这次讲解的是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