基于物品的协同过滤(item-basedcollaborativefiltering)算法是目前业界应用最多的算法。无论是亚马逊网,还是Netflix、Hulu、YouTube,其推荐算法的基础都是该算法。
Item-based算法会给用户推荐那些和他们之前喜欢的物品相类似的物品。如图所示,比如你之前购买过《C++Primer中文版》和《编程之美》,那么它会给你推荐《C++编程思想》或者《编程珠玑》。不过,Item-based算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。
详细流程
相似度计算:计算物品的相似度;
构建推荐矩阵:根据物品的相似度和用户的历史行为给用户生成推荐列表。
1.相似度计算
i是用户已偏好的物品,j是目标物品,简单的物品相似度公式(1)可以这样计算:
这里,分母|N(i)|是喜欢物品i的用户数,而分子|N(i)∩N(j)|是同时喜欢物品i和物品j的用户数,所以该公式也可以理解为喜欢物品i的用户中有多少比例也喜欢物品j。
这里面有个假设,就是每个用户的兴趣都局限在某几个方面。如果用户之间的兴趣广泛且不相交,那么即使存在同时喜欢物品i和物品j的用户数多,那也不能代表物品i和物品j的相似度大,因为很可能两种物品所属领域非常不同。
2.构建推荐矩阵
下图为同时购买两种物品的次数:
其中对物品a计算相似度如下:
同理可求得相似度矩阵:
在得到物品之间的相似度后,Item算法通过如下公式计算用户u对一个物品j的兴趣:
这里N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品的集合,w_ji是物品j和i的相似度,r_ui是用户u对物品i的兴趣。(对于隐反馈数据集,如果用户u对物品i有过行为,即可令r_ui=1。)
该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
假设我们现在有用户v,他的偏好为:
所以u最终的推荐列表为[b,c,e]。
优缺点
Item-based算法原理是给用户推荐那些和他之前喜欢的物品类似的物品,在推荐方面更加个性化,反映了用户自己的兴趣传承。在用户有新行为时,一定会导致推荐结果的实时变化。
适用范围:长尾物品丰富,用户个性化需求强烈的领域。
优点:可以利用用户的历史行为给用户做推荐解释,可以令用户比较信服。比较适用在物品较少、物品更新速度不会很快、用户的兴趣比较固定和持久的情况下。