协同过滤(Collaborative Filtering):A基于邻域的算法+B隐语义模型+C基于图的随机游走算法
A 基于邻域的算法
一、基于用户的协同过滤算法(UserCF):给用户推荐与其兴趣相似的其他用户喜欢的物品
1、首先找到与目标用户兴趣相似的其他用户集合:Jaccard相似度(两用户的交集/并集)+余弦相似度。
余弦相似度:
注:购买同样热门物品时不足以说明两个用户相似,所以需要降权,下式是在余弦相似度公式中的惩罚:
2、从集合中找到用户喜欢的同时目标用户那里没有的物品做推荐:有个算法计算用户u对物品i的兴趣程度
最后得到TopN个物品推荐给目标用户。
二、基于物品的协同过滤算法(ItemCF)
1、计算物品之间的相似度
此相似度不是利用物品本身信息计算,而是主要通过分析用户的行为记录来计算。
表示买了i
的用户同时也买了j
,如果两者的用户群重合比例越大,那么认为i
和j
就更相似。
同时又要惩罚热门物品,于是有:
但是对于热门用户,一个活跃用户可能会喜欢很多种类的物品,他对物品相似度的贡献应该小于不活跃的用户,因为不活跃的用户往往喜欢比较专一,在衡量物品相似度上更有价值,这叫IUF:
2、根据物品的相似度和用户的历史行为给用户生成推荐列表
计算用户u对物品i的兴趣:
三、UserCF和ItemCF比较
1、从推荐结果上来讲:
UserCF帮你找了一些用户来代表你,他们的兴趣是不可能统一的发生大幅改变的,所以你得到的推荐结果都是这一类的东西;而ItemCF,一旦你兴趣列表变了,那接着就认为你兴趣变了,喜欢你这个新兴趣的人喜欢的物品就会被推荐给你。
2、技术角度:
物品和用户表,哪个稳定就用哪个建模。物品迅速增加那就建立用户相似度表,用户迅速增加就建立物品相似度表。
B 隐语义模型
参考链接:https://www.jianshu.com/p/c8711ff27eb0