Forum IT Moldova

Sistemul recomandat...
 
Notificări
Șterge tot

Sistemul recomandator - Factorizare matricială


Daniela
Postări: 187
Topic starter
(@daniela)
Membru
S-a alăturat: 3 ani în urmă

Sistemul recomandator - Factorizare matricială

 
Sistemele de recomandare sunt utilizate într-o varietate de domenii precum Amazon, UberEats, Netflix și Youtube.

Filtrare colaborativă: Filtrarea colaborativă este de a descoperi asemănări cu comportamentul trecut al utilizatorului și de a face predicții pentru utilizator pe baza unei preferințe similare cu alți utilizatori. Acest model este apoi utilizat pentru a prezice articole (sau evaluări pentru articole) în care utilizatorul poate avea un interes.

Filtrare bazată pe conținut : Filtrarea bazată pe conținut este utilizată pentru a produce recomandări de articole bazate pe caracteristicile articolelor.

În acest articol, veți afla algoritmul de factorizare matricială a sistemului recomandator:

(1) Introducere în factorizarea matricei

(2) Conceptul matematic al factorizării matricei

(3) Experiență practică a codului pyton privind factorizarea matricei

Factorizarea matricială este o modalitate de a genera caracteristici latente atunci când înmulțiți două tipuri diferite de entități. Filtrarea colaborativă este aplicarea factorizării matricei pentru a identifica relația dintre entitățile și elementele utilizatorilor. Odată cu introducerea evaluărilor utilizatorilor asupra articolelor din magazin, am dori să prezicem cum utilizatorii ar evalua articolele astfel încât utilizatorii să poată primi recomandarea pe baza previziunilor.

Presupunem că avem tabelul de clasare al clienților format din 5 utilizatori și 5 filme, iar evaluările sunt numere întregi cuprinse între 1 și 5, matricea este oferită de tabelul de mai jos.

 

Imagine pentru postare

 Tabelul1-Tabelul cu evaluările utilizatorilor la film

Întrucât nu fiecare utilizator acordă rating tuturor filmelor, există multe valori care lipsesc în matrice și rezultă o matrice redusă. Prin urmare, valorile nule care nu sunt date de utilizatori ar fi completate cu 0 astfel încât valorile completate să fie furnizate pentru înmulțire. De exemplu, doi utilizatori acordă ratinguri ridicate unei anumite mișcări atunci când filmul este interpretat de actorul și actrița lor preferată sau genul filmului este unul de acțiune, etc. Din tabelul de mai sus, putem găsi că user1 și user3 dau atât evaluări pentru filmul 2 și filmul 3. Prin urmare, din factorizarea matricei, suntem capabili să descoperim aceste caracteristici latente pentru a da o predicție asupra unei evaluări în ceea ce privește similitudinea preferințelor și interacțiunilor utilizatorului.

Având în vedere un scenariu, utilizatorul 4 nu a acordat o evaluare filmului 4. Am dori să știm dacă utilizatorul 4 ar dori filmul 4. Metoda este de a descoperi alți utilizatori cu preferințe similare ale utilizatorului 4, luând evaluările date de utilizatorii de preferințe similare cu filmul 4 și prevăd dacă utilizatorul 4 ar dori filmul 4 sau nu.

Definiți un set de utilizatori (U), articole (D), dimensiunea R de | U | și | D |. Matricea | U | * | D | include toate evaluările date de utilizatori. Scopul este de a descoperi caracteristici latente K. Dat cu introducerea a două matrici matrice P (| U | * k) și Q (| D | * k), ar genera rezultatul produsului R.

 

Imagine pentru postare

Matricea P reprezintă asocierea dintre un utilizator și caracteristici în timp ce matricea Q reprezintă asocierea dintre un element și caracteristici. Putem obține predicția unei evaluări a unui articol prin calculul produsului punct al celor doi vectori corespunzători u_i și d_j.

 

Imagine pentru postare

Pentru a obține două entități deopotrivă P și Q, trebuie să inițializăm cele două matrici și să calculăm diferența produsului numit matricea M. În continuare, minimizăm diferența prin iterații. Metoda se numește descendență în gradient , având ca scop găsirea unui minim local al diferenței.

 

Imagine pentru postare

Pentru a minimiza eroarea, gradientul este capabil să minimizeze eroarea și prin urmare diferențiem ecuația de mai sus față de aceste două variabile separat.

 

Imagine pentru postare

Din gradient, formula matematică poate fi actualizată atât pentru p_ik cât și pentru q_kj. a este pasul pentru a atinge valoarea minimă în timp ce gradientul este calculat, iar a este de obicei setat cu o valoare mică.

 

Imagine pentru postare

Din ecuația de mai sus, p'_ik și q'_kj pot fi ambele actualizate prin iterații până când eroarea se transformă la minim.

 

Imagine pentru postare

Produsul punct al utilizatorului și al matricei elementului poate genera matricea de evaluare, în timp ce matricea utilizatorului are forma lui k (utilizatori) * f (caracteristici), iar matricea elementului este forma j (elemente) * f (caracteristici). Din matricile utilizatorului și ale articolului, caracteristicile filmelor pot fi genul său, actorii, complotul etc. Cu două caracteristici ale matricelor date în calcul, să presupunem că F1 este „Dacă acest film este o comedie sau nu?” și F2 să fie „dacă Robin Williams acționează în film?”

User Matrix: Potrivit User1, dacă este un film de comedie, îi va da 4 puncte și dacă Robin Williams este actorul din film, îi va da încă 3 puncte.

Matricea elementului: Există în principal valori binare în matricea elementului unde valoarea este 1 atunci când îndeplinește condițiile de mai sus și 0 în caz contrar. Prin efectuarea produsului punct al matricei utilizatorului și al matricei elementelor, matricea de rating va fi generată.

Factorizarea matricei a utilizatorilor și a elementelor matriciale poate fi generată atunci când funcția de costuri matematice RMSE este minimizată prin factorizarea matricei. Urmând conceptul matematic de mai sus, descendența în gradient este una dintre metodele de minimizare a RMSE prin fiecare iterație.

Mai jos este fragmentul de cod piton pentru a conduce algoritmul de coborâre a gradientului. Am stabilit o matrice de rating cu 4 filme oferite de 6 utilizatori. După cum puteți vedea, unii utilizatori nu au mai vizionat unele filme înainte, astfel încât evaluarea este dată ca 0 în rating.

 
import numpy
def matrix_factorization(R, P, Q, K, steps=5000, alpha=0.0002, beta=0.02):
    '''
    R: rating matrix
    P: |U| * K (User features matrix)
    Q: |D| * K (Item features matrix)
    K: latent features
    steps: iterations
    alpha: learning rate
    beta: regularization parameter'''
    Q = Q.T
    for step in range(steps):
        for i in range(len(R)):
            for j in range(len(R[i])):
                if R[i][j] > 0:
                    # calculate error
                    eij = R[i][j] - numpy.dot(P[i,:],Q[:,j])
                    for k in range(K):
                        # calculate gradient with a and beta parameter
                        P[i][k] = P[i][k] + alpha * (2 * eij * Q[k][j] - beta * P[i][k])
                        Q[k][j] = Q[k][j] + alpha * (2 * eij * P[i][k] - beta * Q[k][j])
        eR = numpy.dot(P,Q)
        e = 0
        for i in range(len(R)):
            for j in range(len(R[i])):
                if R[i][j] > 0:
                    e = e + pow(R[i][j] - numpy.dot(P[i,:],Q[:,j]), 2)
                    for k in range(K):
                        e = e + (beta/2) * (pow(P[i][k],2) + pow(Q[k][j],2))
        # 0.001: local minimum
        if e < 0.001:
            break
    return P, Q.T

 

 

 

R = [
     [5,3,0,1],
     [4,0,0,1],
     [1,1,0,5],
     [1,0,0,4],
     [0,1,5,4],
    
     [2,1,3,0],
    ]
R = numpy.array(R)
# N: num of User
N = len(R)
# M: num of Movie
M = len(R[0])
# Num of Features
K = 3
 
P = numpy.random.rand(N,K)
Q = numpy.random.rand(M,K)

 

 

 

nP, nQ = matrix_factorization(R, P, Q, K)

 

nR = numpy.dot(nP, nQ.T)

Matricea prevăzută este generată mai jos. După cum puteți vedea, matricea prevăzută are o ieșire similară cu valorile adevărate, iar evaluările 0 sunt înlocuite cu predicția bazată pe preferințele utilizatorilor similare la filme.

Putem vedea că pentru evaluările existente avem aproximări foarte apropiate de valorile adevărate și obținem și unele „predicții” ale valorilor necunoscute. Cu caracteristica oferită ca trei, algoritmul este capabil să asocieze utilizatorii și elementele la trei caracteristici diferite, iar previziunile urmează și aceste asocieri. Putem constata că U2, U5 și U6 dau un rating scăzut pe M1 și M2 și dau un rating ridicat pe M3. Chiar dacă U5 nu a urmărit M1, am deduce în continuare că U5 ar putea să nu placă M1.

Pred_Matrix   M1 M2 M3 M4
U1 4.9921822 2.94665346 3.40536863 1.00099803
U2 3.97665318   2.15037496 3.10801712 0.99668824
U3 1.04690221 0.89961819   5.20187891 4.96401721
U4 0.98735764 0.77053916 4.27454201   3.97482436
U5 1.86869693 1.09103752 4.94375052 4.02158161
U6 1.93781997 1.06363722 3.01008954 1.99265014
 

În lumea reală, matricea de rating este foarte redusă, deoarece fiecare utilizator urmărește filme la frecvențe diferite. Cu toate acestea, funcția de eroare RMSE este calculată doar cu ratingul nul. Înregistrările lipsă din matricea de rating vor fi înlocuite cu produsul punct al matricilor factorilor. Prin urmare, știm ce să recomandăm utilizatorilor cu filme nevăzute bazate pe predicție.

In concluzie:

  • Factorizarea matricială este o metodă de filtrare colaborativă pentru a găsi relația dintre elementele și entitățile utilizatorilor. Funcțiile latente, asocierea între utilizatori și matricile filmelor, sunt determinate să găsească similitudini și să facă o predicție bazată atât pe entitate cât și pe entități ale utilizatorului
  • Factorizarea matricei a utilizatorilor și a elementelor matriciale poate fi generată atunci când funcția de costuri matematice RMSE este minimizată prin factorizarea matricei. Coborârea gradientului este o metodă de minimizare a funcției de cost.

 

 

 

 

 

 

 

 

Distribuie: