Tekil değer ayrışımı (SVD)

Python ile Öneri Motorları Geliştirme

Rob O'Callaghan

Director of Data

SVD ne yapar

Seyrek dikdörtgen matris

Python ile Öneri Motorları Geliştirme

SVD ne yapar

Seyrek dikdörtgen matris ile ilk faktörü yan yana

Python ile Öneri Motorları Geliştirme

SVD ne yapar

Seyrek dikdörtgen matris ile iki faktörü yan yana

Python ile Öneri Motorları Geliştirme

SVD ne yapar

Seyrek dikdörtgen matris ile tüm faktörleri yan yana

Python ile Öneri Motorları Geliştirme

Veriyi hazırlama

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]])
Python ile Öneri Motorları Geliştirme

Veriyi hazırlama

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
     ...               ...                       ...                     ...
Python ile Öneri Motorları Geliştirme

SVD uygulama

from scipy.sparse.linalg import svds

U, sigma, Vt = svds(user_ratings_pivot_centered)
print(U.shape)
(610, 6)
print(Vt.shape)
(6, 1000)
Python ile Öneri Motorları Geliştirme

SVD uygulama

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    ]),
Python ile Öneri Motorları Geliştirme

Nihai matrisi elde etme

SVD’den elde edilen üç faktör matris

Python ile Öneri Motorları Geliştirme

Nihai matrisi elde etme

SVD’den elde edilen üç faktör matris

Python ile Öneri Motorları Geliştirme

Nihai matrisi elde etme

SVD’den elde edilen üç faktör matris

Python ile Öneri Motorları Geliştirme

Nihai matrisi elde etme

SVD’den elde edilen üç faktör matris ile çarpımlarının yan yana görünümü

Python ile Öneri Motorları Geliştirme

Çarpımı Python’da hesaplama

recalculated_ratings =        np.dot(U, sigma)     

Python ile Öneri Motorları Geliştirme

Çarpımı Python’da hesaplama

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      ...   ]
 [ ...        ...        ...      ...   ]]
Python ile Öneri Motorları Geliştirme

Ortalamaları geri ekleme

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      ...   ]
 [ ...        ...        ...      ...   ]]
Python ile Öneri Motorları Geliştirme

Hadi pratik yapalım!

Python ile Öneri Motorları Geliştirme

Preparing Video For Download...