之前的一篇博文里介绍的是基于用户的协同过滤算法http://blog.sina.com.cn/s/blog_dac9ee630102vhmh.html
基于物品的协同过滤算法主要分为以下两步
1. 计算物品之间的相似性
2. 根据物品的相似性和用户的历史行为给用户生成推荐列表。
计算物品相似性可以用以下公式计算:
N(i): 喜欢物品 i 的用户数,分子是同时喜欢物品 i 和物品 j 的用户数。可以理解为喜欢物品 i的用户中有多少比例的用户也喜欢物品 j.
也可以利用下面的公式计算:
在得到物品之间的相似度后,ItemCF通过如下公式计算用户 u 对一个物品 j 的兴趣:
N(u) 用户喜欢的物品的集合,S(j,k)是和物品 j 最相似的 K个物品的集合,w(ji) 是物品 j 和 i 的相似度,r(ui)是用户 u 对物品 i 的兴趣,用户 u 对物品 i 有过行为则 r(ui)=1,反之 r(ui)=0。
但是利用上式计算物品相似性存在一个问题就是用户活跃度高的用户和低的用户对物品的相似度的贡献应不应该一样??JohnS.Breese提出 IUF(Inverse UserFrequence),即用户活跃度对数的参数,认为活跃用户对物品相似性的贡献应小于不活跃的用户,以此来修正物品相似度:
这个公式只对活跃用户做个一个惩罚,但是实际情况中存在很多过于活跃的用户,将直接忽略物品相似性的计算。
再之,在研究中表明将 ItemCF 的相似性矩阵将按最大值进行归一化,可以提高推荐的准确率。