這次講解的是model-based的SVD推薦算法。
跟ALS推薦算法一樣,都是矩陣分解的推薦算法,只不過求解的方式不同而已。
假如評分矩陣是R,那麼我們希望擬合這樣一個模型
R=U*M
其中U是user特徵,M是item特徵。
假如一個user的特徵是u,一個item的特徵是i,那麼這個user對這個item的評分就是
u*i(兩個特徵的內積)。
損失函數是:
然後我們的目標就是最小化這個E了。
這是SVD矩陣分解預測評分最基本的一種方法。
基於這個思想,各種最優化的方式和損失函數的改造也隨之提出來了,來優化這個算法。
最小化損失函數,我們可以用Batch Gradient Descent,Stochastic Gradient Descent等。
損失函數,我們可以加上正則項防止過擬合。
矩陣分解模型上,我們可以加上user評分偏差和item評分偏差。
我用了論文《A Guide to Singular Value Decomposition for Collaborative Filtering
》的一種方法,實現了一個單機版的SVD矩陣分解預測評分。
https://github.com/linger2012/svd-for-recommendation-implemented-by-java
用到的損失函數是
求解用SGD,對於每個已知user-item的評分,都更新一次模型。
1000次遍歷訓練集,對於測試集的rmse能達到0.96,還是不錯的。
用到的數據集是movielens的一個。
代碼和數據集都可以在上面我提供的github地址下載到。
參考資料:
A Guide to Singular Value Decomposition forCollaborative Filtering
http://www.csie.ntu.edu.tw/~r95007/thesis/svdnetflix/report/report.pdf
Collaborative Filtering for Netflix
https://classes.soe.ucsc.edu/cmps242/Fall09/proj/mpercy_svd_paper.pdf
在MovieLens數據集上用SVD進行評分預測
http://blog.csdn.net/daer520/article/details/19929523
基於矩陣分解的推薦算法,簡單入門 - kobeshow