CF算法分为两大类,一类为基于memory的(Memory-based),另一类为基于Model的(Model-based),User-based和Item-based算法均属于Memory-based类型,具体的User-based的内容请参见我的前一篇博文,下面主要介绍Item-based算法
Item-based算法主要分为两步:即item similarity computation和prediction computation
(1)item similarity computation(物品相似度计算)
在计算item的相似度时计算的过程如下图所示:
计算相似度的算法主要有以下几种:
a.基于余弦(Cosine-based)的相似度计算,通过计算两个向量之间的夹角余弦值来计算物品之间的相似性,公式如下:
b.基于关联(Correlation-based)的相似度计算,计算两个向量之间的Pearson-r关联度,公式如下:
c.调整的余弦(Adjusted Cosine)相似度计算,由于基于余弦的相似度计算没有考虑不同用户的打分情况,可能有的用户偏向于给高分,而有的用户偏向于给低分,该方法通过减去用户打分的平均值消除不同用户打分习惯的影响,公式如下:
(2)prediction computation(预测值计算)
根据之前计算好的物品之间的相似度,接下来对用户未打分的物品进行预测,有两种预测方法:
a. weighted sum(加权求和)
通过对用户u已打分的物品(且物品与物品i非常相似)的分数进行加权求和,权值为各个物品与物品i的相似度,然后对所有物品相似度的和求平均,计算得到用户u对物品i打分,公式如下:
其中Si,N为物品i与物品N的相似度,Ru,N为用户u对物品N的打分。
b.regression( 回归)
和上面加权求和的方法类似,但回归的方法不直接使用相似物品N的打分值Ru,N,因为用余弦法或Pearson关联法计算相似度时存在一个误区,即两个打分向量可能相距比较远(欧氏距离),但有可能有很高的相似度。因为不同用户的打分习惯不同,有的偏向打高分,有的偏向打低分。如果两个用户都喜欢一样的物品,因为打分习惯不同,他们的欧式距离可能比较远,但他们应该有较高的相似度。在这种情况下用户原始的相似物品的打分值进行计算会造成糟糕的预测结果。通过用线性回归的方式重新估算一个新的Ru,N值,运用上面同样的方法进行预测。重新计算Ru,N的方法如下:
其中物品N是物品i的相似物品,a和通过对物品N和i的打分向量进行线性回归计算得到,为回归模型的误差。具体怎么进行线性回归文章里面没有说明,需要查阅另外的相关文献。
item-based和User-based比较:
1. Item-based算法的预测结果比User-based算法的质量要高一点。
2. 由于Item-based算法可以预先计算好物品的相似度,所以在线的预测性能要比User-based算法的高。
3. 用物品的一个小部分子集也可以得到高质量的预测结果。
参考文献:Item-Based Collaborative Filtering Recommendation
Algorithms.Badrul Sarwar, George Karypis, Joseph Konstan, and John Riedl