Rozkład według wartości szczególnych (SVD)

Budowanie systemów rekomendacji w Pythonie

Rob O'Callaghan

Director of Data

Co robi SVD

Rzadka macierz prostokątna

Budowanie systemów rekomendacji w Pythonie

Co robi SVD

Rzadka macierz prostokątna obok swojego pierwszego czynnika

Budowanie systemów rekomendacji w Pythonie

Co robi SVD

Rzadka macierz prostokątna obok dwóch swoich czynników

Budowanie systemów rekomendacji w Pythonie

Co robi SVD

Rzadka macierz prostokątna obok swoich czynników

Budowanie systemów rekomendacji w Pythonie

Przygotowanie danych

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]])
Budowanie systemów rekomendacji w Pythonie

Przygotowanie danych

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
     ...               ...                       ...                     ...
Budowanie systemów rekomendacji w Pythonie

Stosowanie SVD

from scipy.sparse.linalg import svds

U, sigma, Vt = svds(user_ratings_pivot_centered)
print(U.shape)
(610, 6)
print(Vt.shape)
(6, 1000)
Budowanie systemów rekomendacji w Pythonie

Stosowanie SVD

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    ]),
Budowanie systemów rekomendacji w Pythonie

Wyznaczanie macierzy wynikowej

Trzy macierze czynnikowe wyznaczone przez SVD

Budowanie systemów rekomendacji w Pythonie

Wyznaczanie macierzy wynikowej

Trzy macierze czynnikowe wyznaczone przez SVD

Budowanie systemów rekomendacji w Pythonie

Wyznaczanie macierzy wynikowej

Trzy macierze czynnikowe wyznaczone przez SVD

Budowanie systemów rekomendacji w Pythonie

Wyznaczanie macierzy wynikowej

Trzy macierze czynnikowe SVD obok ich iloczynu

Budowanie systemów rekomendacji w Pythonie

Obliczanie iloczynu w Pythonie

recalculated_ratings =        np.dot(U, sigma)     

Budowanie systemów rekomendacji w Pythonie

Obliczanie iloczynu w Pythonie

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      ...   ]
 [ ...        ...        ...      ...   ]]
Budowanie systemów rekomendacji w Pythonie

Dodawanie średnich

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      ...   ]
 [ ...        ...        ...      ...   ]]
Budowanie systemów rekomendacji w Pythonie

Czas na ćwiczenia!

Budowanie systemów rekomendacji w Pythonie

Preparing Video For Download...