主题
我将在这篇文章中简单介绍一下协同过滤,介绍下协同过滤的定义,介绍基于物品和基于用户协同过滤的含义和区别,重点介绍一下基于物品协同过滤的共现矩阵实现方式。
以此文记录下我学习协同过滤的的心得和实践感受,某些观点可能较为主观,有问题可以提出。
协同过滤
协同过滤推荐方法的主要思想是利用用户群过去的行为来预测当前用户可能喜欢哪些物品或者对哪些物品感兴趣。其包含两种协同过滤技术,一种是Memory Based的协同过滤技术,Memory Based协同又包含基于用户的协同过滤(User-Based CF)和基于物品的协同过滤(Item-Based CF);另一种是基于模型的协同过滤,基于模型的协同过滤包含隐语义模型(LFM)和Bayesian Networkds等技术。其中,基于用户和基于物品的协同过滤算法因为在推荐时需要利用近邻用户或物品,所以又称为基于邻域的算法。
基于用户的协同过滤
基于用户的协同过滤的思想是,如果你要给一个用户进行推荐,那么你先找到跟这个用户兴趣爱好相似的其他用户,然后将其他用户喜欢的物品推荐给该用户。比如计算发现A用户和B用户的兴趣爱好很相似,那么就可以给A推荐B喜欢的物品,给B推荐A喜欢的物品。基于用户的协同过滤主要包括两个步骤:
- 找到和这个目标用户兴趣相似的用户集合
- 找到这个集合中用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
1.计算用户相似度
给定一个平台的用户数据,比如豆瓣或者京东的,如何判断两个用户相似并且量化这种相似程度呢。推荐系统往往使用的用户对该平台的物品的评分或者行为来进行计算的。这里涉及到一个显式反馈和隐式反馈的概念。显式反馈就是用户行为能够明确表达用户喜好的行为数据,比如用户的评分、点赞、收藏等,相对的,隐式反馈就是用户行为无法直接体现用户的喜好的,比如用户的浏览、驻留时间、购买等。
对于显式反馈有用户评分这种,在得到用户-物品评分矩阵后,可以使用相关距离算法比如欧几里德、余弦、Pearson相关性系数等来计算用户之间的距离。
用户\物品 | item1 | item2 | item3 | item4 | item5 | item6 | item7 | item8 |
---|---|---|---|---|---|---|---|---|
user1 | 0.21 | 0 | 0 | 0 | 0.82 | 0 | 0 | 0.45 |
user2 | 0 | 0 | 0.23 | 0 | 0.65 | 0 | 0 | 0 |
user3 | 0.30 | 0.34 | 0 | 0 | 0.75 | 0 | 0 | 0.15 |
user4 | 0.23 | 0 | 0 | 0 | 0 | 0 | 0.78 | 0 |
user5 | 0 | 0 | 0.34 | 0.65 | 0 | 0 | 0 | 0.23 |
比如对于上面表格的数据,我们可以对任意两个用户计算余弦值以表示用户之间的相似度。
对于隐式反馈的用户行为不涉及评分的,在得到用户行为列表后可以将用户行为数据转化为上面的用户-物品评分矩阵,比如对用户不同的行为定义权值,用户对商品的行为次数也定义权值等来得到评分矩阵,然后运用上述的距离算法来计算。而在《推荐系统实践》一书里是在用户行为列表的基础上利用两用户对商品行为集合的差异使用Jaccard或者余弦进行相似度计算的。具体的,对于给定用户u和用户v,另N(u)表示用户u曾经有过正反馈的物品集合,N(v)表示用户v曾经有过正反馈的物品集合。
那么利用Jaccard公式来计算用户u和v之间的相似度可以:
wuv=N(u)∩N(v)N(u)∪N(v)
或者通过余弦相似度计算:
wuv=N(u)∩N(v)|N(u)||N(v)|√
2.进行推荐
在得到用户之间的兴趣相似度后,基于用户的协同过滤会给用户推荐与该用户最相似的K个用户喜欢的物品。可以使用如下的公式来度量用户u对物品i的感兴趣程度。<