看了不少论文,总结起来用SVD做推荐主要有两种不同的方式。
1 本质上是memory-based,只不过先用SVD对user-item的评分矩阵做降维,得到降维后的user特征和item特征,可以分别做userbased的协同过滤和itembased的协同过滤。
2 本质上是model-based,跟传统数学意义的SVD没有太大关系,只不过借鉴了SVD分解R=U*S*V这个形式,通过最优化方法进行模型拟合,求得R=U*V。
本文主要讲解第一种情况,第二种情况下次再讲。
可以参考的论文:
《Applying SVD on Generalized Item-based Filtering 》
《Application of Dimensionality Reduction in Recommender System -- ACase Study》
memory-based的userbased和itembased关键点之一,是user相似度和item相似度的计算。
而相似度的计算依赖于特征。
最原始的做法,一个user的特征就是她对所有item的打分,而一个item的特征就是所有user对她的打分。
在数学意义上,SVD是这样子的,一个M*N矩阵的R可以分解成为三个矩阵相乘的形式,
R=U*S*V
(U是M*M矩阵,S是M*N的对角矩阵,V是N*N的矩阵)。
这是严格相等的。
S的对角元素称之为奇异值。
如果我们减少奇异值的数量,可以得到一个逼近相等的分解。
R约等于U*S*V
(U是M*k矩阵,S是k*k的对角矩阵,V是k*N的矩阵)
于是我们可以拿这个维度减少的U作为user特征,
V作为item特征。
然后拿这些降维后的特征去计算相似度。
然后又有人发现,我们上面的R其实是用0来填补那些未知评分的,感觉这样不太好。因为未知评分可能是高分,可能是低分。直接用0来填补就表示低分了。然后提出了一种填补缺失评分的方法,使得更加合理一些。先用该item的平均打分作为所有没有对item打分user的评分,得到一个填充矩阵,然后对于每个user,该user的对所有item的打分减去该user已知打分的平均值。得到这个矩阵后,再做SVD分解,再利用新特征做相似度计算。
最后再用userbased或者itembased预测评分。
参考资料:
Applying SVD on Generalized Item-basedFiltering
http://www.tmrfindia.org/ijcsa/v3i34.pdf
Application of Dimensionality Reduction inRecommender System -- A Case Study
http://ai.stanford.edu/~ronnyk/WEBKDD2000/papers/sarwar.pdf
A Singular Value Decomposition Approach ForRecommendation Systems
http://blog.csdn.net/yuzhongchun/article/details/40779371
SVD 笔记
http://my.oschina.net/zenglingfan/blog/178906
本文作者:linger
本文链接:http://blog.csdn.net/lingerlanlan/article/details/45250805