Item CF 基本原理:
- 基于物品的CF的原理和基于用户的CF类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品;
- 然后根据用户的历史偏好,推荐相似的物品给用户;
- 从计算的角度来看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品;
- 计算得到一个排序的物品列表作为推荐;
- 就是我们常见的:购买该商品的用户还购买了如下商品……
Item CF基本方法
- 构建用户物品的关系矩阵,矩阵元素可以是用户的消费行为,也可以是消费后的评价;
- 还可以是对消费行为的某种量化如时间、次数、费用等;
- 假如矩阵的行表示物品,列表示用户的话,那么就两两计算行向量之间的相似度,得到物品相似度矩阵,行和列都是物品;
- 最终产生推荐结果。
Item CF 相似度计算
- 基于物品的协同过滤算法主要分为两步:
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。 - 最基本的相似度计算公式:
分母|𝑁 𝑖 | 是喜欢物品i的用户数,而分子|𝑁(𝑖) ∩ 𝑁(𝑗) |是同时喜欢物品i和物品j的用户数。
因此,上述公式可以理解为喜欢物品i的用户中有多少比例的用户也喜欢物品j。
上式有一个问题,当物品j是一个很热门的商品时,人人都喜欢,那么wij就会很接近于1,即上式会让很多物品都和热门商品有一个很大的相似度,所以可以改进一下公式:
这个公式惩罚了物品j的权重,因此减轻了热门物品会和很多物品相似的可能性: - 生成物品共现矩阵
- 生成物品相似矩阵
- 生成推荐列表
计算完物品的相似度后,即可进行以下两个场景的推荐:
相关推荐,例如“购买过XXX的顾客还购买”……
TopN推荐,例如“猜你喜欢”……
完成相似度计算后,计算用户u对物品j的兴趣:
𝑵(𝒖) 是用户喜欢的物品的集合, 𝑺(𝒋, 𝒌 )是和物品j最相似的K个物品的集合;
𝑾𝒋𝒊是物品j和i的相似度,𝒓𝒖𝒊 是用户u对物品i的兴趣;
该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名;
某用户喜欢《C++ Primer中文版》和《编程之美》两本 书,需要通过ItemCF找出用户最感兴趣的Top3的书籍。
根据用户对已喜欢的两本书的兴趣,以及其他五本书和这两本书的相似度,可以得出用户对五本书的兴趣度:
计算出五本书的兴趣排序如下,也为用户生成了Top3的书籍推荐列表:
两种CF算法的对比
两种CF算法的适宜场景
- UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品,而ItemCF给用户推荐那些和他之前喜欢的物品类似的物品。
- 从算法的原理可以看到, UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。
- 换句话说, UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。