一.背景及优点
随着网站的用户数目越来越大,计算用户兴趣相似度矩阵越来越困难,其运算时间复杂度和空间时间复杂度的增长和用户数的增长近似于平方关系。其次,基于用户的协同过滤算法很难对推荐结果作出解释。
因此产生了基于物品的协同过滤算法(ItemCF)
。ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。 ItemCF可以利用用户的行为给推荐结果提供推荐解释
二.算法详解
2.1 ItemCF主要分为两步
- 计算物品之间的相似度
根据物品的相似度和用户的历史行为给用户生成推荐列表
我们可以通过以下公式定义物品的相似度
以上,其中
N(i)
表示喜欢物品i的用户数,而分子N(i)∩N(j)
表示喜欢物品i同时喜欢物品j
的用户数
因此,上述公式可以理解为喜欢物品i的用户中有多少比例的用户也喜欢物品j
然后,这里有一个问题,就是如果物品j
很热门,那么喜欢物品i的用户很多都喜欢物品j
那么W就会区域1.所有我们使用以下公式以上,在分母中加上
N(j)
对相似度进行惩罚,即越热门,这个物品被使用的人越多,那么分母就会变大。从而可以挖掘长尾信息
。
其中C[i][j]
表示的是同时喜欢物品i 和物品j的用户数 如果物品相似度求出来了,就可以根据以下公式计算用户u对于一个物品j的兴趣度
其中N(u)
是用户喜欢的物品的集合,S(j,k)
是和物品j最相似的K个物品的集合,w
表示是物品j,i
的相似度,r
表示的是用户u
对物品i的兴趣(对于隐反馈数据集,如果用户u对物品i有过行为,即可令r=1
)
该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
2.2 下图是一个基于物品推荐的例子:
- 用户喜欢 C++和编程之美两本书,权重分别为 1.3和0.9
- 和C++相似的书有 C++编程思想,算法导论,EffectiveC++ 相似度分别为 0.7,0.4,0.6
- 和编程之美相似的书有算法导论,代码大全,编程珠玑 相似度分别为 0.5,0.5,0.6
那么计算用户对算法导论的兴趣度为=》1.3*0.4+0.9*0.5=0.97
对C++编程思想兴趣度为=》1.3*0.7=0.91
最后按照兴趣度降序排序,从高到低进行推荐。
2.3 用户活跃度对物品相似度的影响
每个用户的兴趣列表都对物品的相似度产生了贡献。但是不是每个用户对物品的相似度产生的贡献都相同的。
假如一个书商买了几十万本书,那么他的这一行为就不能增加物品相似度。
IUF算法,即用户活跃度对数的倒数的参数,活跃用户对物品相似度的贡献应该小于不活跃用户。他提出应该增加IUF参数来修正物品相似度的计算公式
2.4 物品相似度的归一化
Karypis在研究中发现如果将Ite’mCF的相似度矩阵按最大值归一化,可以提高推荐的准确率。其研究表明,如果已经得到了物品相似度矩阵w,那么可以用如下公式得到归一化之后的相似度矩阵w’
归一化能够有效地提高覆盖率和降低流行度
三: UserCF和ItemCF的区别
就新闻网站来说,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。即使是个性化,也是比较粗粒度的,比如有些用户喜欢体育新闻,有些喜欢社会新闻,而特别细粒度的个性话一般是不存在的。比方说,很少有用户只看某个话题的新闻,主要是因为这个话题不可能保证每天都有新的消息,而这个用户每天都是要看新闻的。
因此个性化新闻推荐更加强调抓住新闻热点,热门程度和时效性是关键
从技术方面来考虑。作为一个物品,新闻的更新非常快,每时每刻都有新内容出现,而ItemCF需要维护一张物品相关度的表,如果物品,新闻的更新非常的快,每时每刻都有新的新闻产生,而ItemCF需要维护一张物品相关度的表,如果物品更新很快,那么这张表需要很快的更新,技术上很难实现。而UserCF对于新用户也需要更新相似度表,但在新闻网站中,物品的更新速度远远快于新用户的加入速度。