Singularwaardedecompositie (SVD)

Aanbevelingssystemen bouwen in Python

Rob O'Callaghan

Director of Data

Wat SVD doet

Spaarzame rechthoekige matrix

Aanbevelingssystemen bouwen in Python

Wat SVD doet

Spaarzame rechthoekige matrix naast de eerste factor

Aanbevelingssystemen bouwen in Python

Wat SVD doet

Spaarzame rechthoekige matrix naast twee factoren

Aanbevelingssystemen bouwen in Python

Wat SVD doet

Spaarzame rechthoekige matrix naast zijn factoren

Aanbevelingssystemen bouwen in Python

Data voorbereiden

print(book_ratings_df.shape)
(220, 500)
avg_ratings = book_ratings_df.mean(axis=1)

print(avg_ratings)
array([[4.5 ],
       [3.5],
       [2.5],
       [3.5],
        ... 
       [2.2]])
Aanbevelingssystemen bouwen in Python

Data voorbereiden

user_ratings_pivot_centered = user_ratings_df.sub(avg_ratings, axis=0)
user_ratings_df.fillna(0, inplace=True)

print(user_ratings_df)
          The Great Gatsby    The Catcher in the Rye    Fifty Shades of Grey                    
User_233               0.0                       0.0                     0.0
User_651               0.0                       0.5                    -0.5
User_965               0.5                      -0.5                     0.0
     ...               ...                       ...                     ...
Aanbevelingssystemen bouwen in Python

SVD toepassen

from scipy.sparse.linalg import svds

U, sigma, Vt = svds(user_ratings_pivot_centered)
print(U.shape)
(610, 6)
print(Vt.shape)
(6, 1000)
Aanbevelingssystemen bouwen in Python

SVD toepassen

print(sigma)
[3.0, 4.8, -12.6, -3.8, 8.2, 7.3]
sigma = np.diag(sigma)
print(sigma)
array([   3.0    ,   0.     ,   0.     ,   0.     ,   0.     ,   0.     ],
       [  0.     ,   4.8    ,   0.     ,   0.     ,   0.     ,   0.     ],
       [  0.     ,   0.     , -12.6    ,   0.     ,   0.     ,   0.     ],
       [  0.     ,   0.     ,   0.     ,  -3.8    ,   0.     ,   0.     ],
       [  0.     ,   0.     ,   0.     ,   0.     ,   8.2    ,   0.     ],
       [  0.     ,   0.     ,   0.     ,   0.     ,   0.     ,   7.3    ]),
Aanbevelingssystemen bouwen in Python

De eindmatrix krijgen

De drie factormatrices uit SVD

Aanbevelingssystemen bouwen in Python

De eindmatrix krijgen

De drie factormatrices uit SVD

Aanbevelingssystemen bouwen in Python

De eindmatrix krijgen

De drie factormatrices uit SVD

Aanbevelingssystemen bouwen in Python

De eindmatrix krijgen

De drie factormatrices uit SVD naast hun product

Aanbevelingssystemen bouwen in Python

Product berekenen in Python

recalculated_ratings =        np.dot(U, sigma)     

Aanbevelingssystemen bouwen in Python

Product berekenen in Python

recalculated_ratings = np.dot(np.dot(U, sigma), Vt)
print(recalculated_ratings)
[[  0.1      -0.9       -3.6.     ...   ]
 [ -2.3       0.5       -0.5      ...   ]
 [  0.5      -0.5        2.0      ...   ]
 [ ...        ...        ...      ...   ]]
Aanbevelingssystemen bouwen in Python

Gemiddelden terugzetten

recalculated_ratings = recalculated_ratings + avg_ratings.values.reshape(-1, 1)
print(recalculated_ratings)
[[  4.6       3.6        0.9      ...   ]
 [  1.8       4.0        3.0      ...   ]
 [  3.0       2.0        4.5      ...   ]
 [ ...        ...        ...      ...   ]]
print(book_ratings_df)
[[  5.0       4.0         NA      ...   ]
 [   NA       4.0        3.0      ...   ]
 [  3.0       2.0         NA      ...   ]
 [ ...        ...        ...      ...   ]]
Aanbevelingssystemen bouwen in Python

Laten we oefenen!

Aanbevelingssystemen bouwen in Python

Preparing Video For Download...