简单的协同过滤算法流程如下
(1)、计算其他用户和你的相似度,可以使用反差表忽略一部分用户
(2)、根据相似度的高低找出K个与你最相似的邻居
(3)、在这些邻居喜欢的物品中,根据邻居与你的远近程度算出每一件物品的推荐度
(4)、根据每一件物品的推荐度高低给你推荐物品。
其中计算相似度,本文采用的是Jaccard算法,这个算法就是并集除以交集,计算用户打分的电影集的相似度。
协同推荐过程遇到的问题
最近邻协同过滤推荐需要在整个用户空间上搜索目标用户的最近邻居,随着数据的不断增多、系统规模的扩大,在整个用户空间上搜索目标用户的最近邻居的计算量成线性增大,系统的实时性能越来越差,大数据的稀疏性成为协同过滤推荐系统发展的瓶颈。
在采用协同过滤算法构建个性化推荐的系统中,经常面临用户评价数据稀疏问题,这将严重降低个性化推荐的准确度.针对此问题,提出了一种混合加权预测填充算法,从用户访问的资源特征以及该资源在整个用户群体中被访问的热度出发,对用户访过的但未给出评价的数据进行预测并填充,从而降低了由于用户评价数据缺失所造成的评价矩阵稀疏程度,提高推荐准确度.在MovieLens数据集上的试验结果表明,该算法能够明显地提高推荐准确度.
针对上述问题,即为了降低数据的稀疏性问题给推荐系统带来的影响,人们专门研究了很多的解决方法。其中从不同角度对用户和产品信息进行分析、处理、降低数据的稀疏程度。基于项目的协同过滤推荐、降维法、智能Agent方法可以在一定程度上缓解数据稀疏性问题。BP神经网络缓解协同过滤推荐算法的稀疏性问题,将奇异值分解应用到协同过滤推荐算法,通过奇异值分解算法得到低维正交矩阵,较好地解决了数据稀疏性问题,但是推荐的准确性会有一定的下降。在采用神经网络模型进行聚类处理的总思路下,通过寻找基于对象属性信息的项目类间隐性联系化解数据稀疏性对高维数据聚类的影响。此外,应用聚类算法是解决用户—项目评分矩阵稀疏性的比较有效的方法。
基于物品的协同过滤
step1.如果用户i对项目j没有评过分,就把ri,j置为0。找到与物品j最相似的k个近邻(采用余弦距离)
step2.然后用这K个邻居对项目j的评分的加权平均来预测用户i对项目j的评分。
I1=(r1,1,r2,1...rm,1)
I2=(r1,2,r2,2...rm,2)
每一项减去各个用户评分的均值:
I1=(r1,1−r1¯,r2,1−r2¯...rm,1−rm¯)
I2=(r1,2−r1¯,r2,2−r2¯...rm,2−rm¯)
商品i和j之间的相似度采用余弦计算:
预测用户u对商品i的评分:
其中N是商品i的近邻。
由于物品之间的相似度比较稳定,可以离线先算好,定期更新即可。在电商行业这种算法用的比较多。
混合协同过滤
所谓的混合算法,主体思路还是基于用户的协同过滤,只是在计算两个用户的相似度时又嵌套了item-based CF思想。度量用户i和用户j相似度更好的方法是:
1.用户i参与评分的项目集合为Ii,用户j参与评分的项目集合为Ij,找到它们的并集Uij=Ii∪Ij
2.在集合Uij中用户i未评分的项目是Ni=Uij−Ii,采用item-based CF方法重新估计用户i对Ni中每个项目的评分。
3.这样用户i和j对Uij的评分就都是非0值了,在此情况下计算他们的相似度。
(4)、基于混合协同过滤之后,我们对用户未评分的选项(电影)进行预测而且评分,从而得到一个新的矩阵,这个矩阵数据都是密集的,因为它包含了所有用户对所有电影的打分情况,从而很好的解决了数据的稀疏性问题。
(4)、其中算法的主要部分在于计算用户的相似性和矩阵的预测评分其中时间复杂度为:如果想计算每两个用户的相似度需要的时间复杂度为O(n*n*d)。