原文地址:Ron's XYZ http://www.neilron.xyz/collaborative-filter
本文参考了IBM developerWorks上的文章:探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤
协同过滤(Collaborative Filtering, CF)我认为有些像KNN在推荐系统上的一种应用,一般来说可以分为基于用户的协同过滤和基于商品的协同过滤,基于用户的CF是根据用户对商品的喜好计算用户之间的相似度,然后按相似的用户的喜好推荐给用户未接触过的新商品。基于商品的CF计算的则是商品间的相似度,推荐与用户之前偏好商品最相似的商品。
协同过滤大致过程
1 收集用户偏好
2 找到相似的用户或物品
3 推荐相似用户喜欢的,或是相似物品给用户
用户偏好收集
对于网站来说,用户对商品会有显性的偏好,如电影的评分,对物品的投票,也会有一些隐性的偏好,比如点击,页面停留的时间,购买等行为。将用户的所有这些行为做统计之后,在经过一定的预处理,即转变为了接下来要用的特征矩阵。
用户不同方式得出的特征可以分开使用,比如类似于当当网或者 Amazon 给出的“购买了该图书的人还购买了 ...”,“查看了图书的人还查看了 ...”;也可以加权之后得到商品总体的偏好程度,但针对不同问题不同需求,需要注意各个行为的权重分布。
相似性的度量
1 欧几里得距离,越小则相似度越高。
![](https://i-blog.csdnimg.cn/blog_migrate/4df778809eb7513e5f9a796d1b759400.png)
2 皮尔逊相关系数, 衡量两个定距变量间联系的紧密程度,在区间[-1,+1]上,越接近+1则越相似
![](https://i-blog.csdnimg.cn/blog_migrate/160bf2208ce6b7c0f92f847066198808.png)
3 余弦相似度,多用于计算文档数据的相似度,角度越小则越相似。
![](https://i-blog.csdnimg.cn/blog_migrate/c8e187f1963514623af9bed1927220eb.png)
4 Tanimoto系数, 余弦相似度的改良版本,角度越小则越相似。
![](https://i-blog.csdnimg.cn/blog_migrate/0bf5199f5b6035cf3c52b1255be60c29.png)
相似邻居的计算
1 KNN,固定样本个数选择最近邻,见图A
2 Threshold-based,固定距离的上限选择范围内的最近邻,见图B
推荐(两种推荐使用的是相同的数据)
![](https://i-blog.csdnimg.cn/blog_migrate/6ea7804f3e0ba1cc1fdd54161fa65299.png)
推荐(两种推荐使用的是相同的数据)
1 基于用户相似度的推荐
2 基于商品相似度的推荐
以上两者的比较
1 计算复杂度。对于用户数量大大超过商品数量的网站,比如电商,电影,音乐网站等,Item CF的计算量较小,同时不必频繁更新。而对于微博、新闻、博客等系统,用户的数量相对固定,而推荐的商品是海量并且频繁更新的,这时从计算的角度讲,User CF更合适。
2 另外一点,在非社交类型的网站中,使用“某某与你有相同的兴趣,因此推荐了他喜欢的**”,对用户的解释性不强,而相对的,如果是社交属性的网站,用User CF则具有很强的解释性。
3 推荐的多样性。对于单一用户来说,User CF因为选了多个相似的用户喜欢的,所以推荐的商品的类别会比较多,而Item CF只是推荐和以前看过最相似的东西,相对会比较单调。对于整个系统来说,要考虑推荐的覆盖率(coverage),User CF考察用户的相似度,所以会更倾向于推荐一些热门物品(最多用户接触),而Item CF因为来自于物品间的相似性,所以更容易推荐长尾中的商品。
4 对于用户的适应性。用户是接受推荐的终端,用户的接受程度才是衡量推荐系统的最重要标准。对于User CF,如果一个用户他没有兴趣相似的朋友,那么系统找到的邻居其实并不是那么符合用户的兴趣,这样推荐的效果就会很差。对于Item CF,如果一个用户本身就对看过的商品不再感兴趣,他就不满足Item CF的基本假设,推荐的效果自然也会很差。
--------------------------------------这里有一条分割线--------------------------------------------
下面引用原文中的一个例子来说明,
如果你对推荐的多样性还心存疑惑,那么下面我们再举个实例看看 User CF 和 Item CF 的多样性到底有什么差别。首先,假设每个用户兴趣爱好都是广泛的,喜欢好几个领域的东西,不过每个用户肯定也有一个主要的领域,对这个领域会比其他领域更加关心。给定一个用户,假设他喜欢 3 个领域 A,B,C,A 是他喜欢的主要领域,这个时候我们来看 User CF 和 Item CF 倾向于做出什么推荐:如果用 User CF, 它会将 A,B,C 三个领域中比较热门的东西推荐给用户;而如果用 ItemCF,它会基本上只推荐 A 领域的东西给用户。所以我们看到因为 User CF 只推荐热门的,所以它在推荐长尾里项目方面的能力不足;而 Item CF 只推荐 A 领域给用户,这样他有限的推荐列表中就可能包含了一定数量的不热门的长尾物品,同时 Item CF 的推荐对这个用户而言,显然多样性不足。但是对整个系统而言,因为不同的用户的主要兴趣点不同,所以系统的覆盖率会比较好。
从上面的分析,可以很清晰的看到,这两种推荐都有其合理性,但都不是最好的选择,因此他们的精度也会有损失。其实对这类系统的最好选择是,如果系统给这个用户推荐 30 个物品,既不是每个领域挑选 10 个最热门的给他,也不是推荐 30 个 A 领域的给他,而是比如推荐 15 个 A 领域的给他,剩下的 15 个从 B,C 中选择。所以结合 User CF 和 Item CF 是最优的选择,结合的基本原则就是当采用 Item CF 导致系统对个人推荐的多样性不足时,我们通过加入 User CF 增加个人推荐的多样性,从而提高精度,而当因为采用 User CF 而使系统的整体多样性不足时,我们可以通过加入 Item CF 增加整体的多样性,同样同样可以提高推荐的精度。
参考文献地址 IBM developerWorks:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/
以上两者的比较
1 计算复杂度。对于用户数量大大超过商品数量的网站,比如电商,电影,音乐网站等,Item CF的计算量较小,同时不必频繁更新。而对于微博、新闻、博客等系统,用户的数量相对固定,而推荐的商品是海量并且频繁更新的,这时从计算的角度讲,User CF更合适。
2 另外一点,在非社交类型的网站中,使用“某某与你有相同的兴趣,因此推荐了他喜欢的**”,对用户的解释性不强,而相对的,如果是社交属性的网站,用User CF则具有很强的解释性。
3 推荐的多样性。对于单一用户来说,User CF因为选了多个相似的用户喜欢的,所以推荐的商品的类别会比较多,而Item CF只是推荐和以前看过最相似的东西,相对会比较单调。对于整个系统来说,要考虑推荐的覆盖率(coverage),User CF考察用户的相似度,所以会更倾向于推荐一些热门物品(最多用户接触),而Item CF因为来自于物品间的相似性,所以更容易推荐长尾中的商品。
4 对于用户的适应性。用户是接受推荐的终端,用户的接受程度才是衡量推荐系统的最重要标准。对于User CF,如果一个用户他没有兴趣相似的朋友,那么系统找到的邻居其实并不是那么符合用户的兴趣,这样推荐的效果就会很差。对于Item CF,如果一个用户本身就对看过的商品不再感兴趣,他就不满足Item CF的基本假设,推荐的效果自然也会很差。
--------------------------------------这里有一条分割线--------------------------------------------
下面引用原文中的一个例子来说明,
如果你对推荐的多样性还心存疑惑,那么下面我们再举个实例看看 User CF 和 Item CF 的多样性到底有什么差别。首先,假设每个用户兴趣爱好都是广泛的,喜欢好几个领域的东西,不过每个用户肯定也有一个主要的领域,对这个领域会比其他领域更加关心。给定一个用户,假设他喜欢 3 个领域 A,B,C,A 是他喜欢的主要领域,这个时候我们来看 User CF 和 Item CF 倾向于做出什么推荐:如果用 User CF, 它会将 A,B,C 三个领域中比较热门的东西推荐给用户;而如果用 ItemCF,它会基本上只推荐 A 领域的东西给用户。所以我们看到因为 User CF 只推荐热门的,所以它在推荐长尾里项目方面的能力不足;而 Item CF 只推荐 A 领域给用户,这样他有限的推荐列表中就可能包含了一定数量的不热门的长尾物品,同时 Item CF 的推荐对这个用户而言,显然多样性不足。但是对整个系统而言,因为不同的用户的主要兴趣点不同,所以系统的覆盖率会比较好。
从上面的分析,可以很清晰的看到,这两种推荐都有其合理性,但都不是最好的选择,因此他们的精度也会有损失。其实对这类系统的最好选择是,如果系统给这个用户推荐 30 个物品,既不是每个领域挑选 10 个最热门的给他,也不是推荐 30 个 A 领域的给他,而是比如推荐 15 个 A 领域的给他,剩下的 15 个从 B,C 中选择。所以结合 User CF 和 Item CF 是最优的选择,结合的基本原则就是当采用 Item CF 导致系统对个人推荐的多样性不足时,我们通过加入 User CF 增加个人推荐的多样性,从而提高精度,而当因为采用 User CF 而使系统的整体多样性不足时,我们可以通过加入 Item CF 增加整体的多样性,同样同样可以提高推荐的精度。
参考文献地址 IBM developerWorks:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/