协同过滤(英语:Collaborative Filtering,简称CF),简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人透过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。——维基百科
基于物品的协同过滤算法(item-based collaborative filtering,简称ItemCF)是目前业界应用最多的算法。
亚马逊、Netflix、Hulu、YouTube的推荐算法的基础都是基于物品的协同过滤算法。
基于用户的协同过滤算法有一些缺点。
- 随着网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越困难,其运算时间复杂度和空间复杂度的增长和用户数的增长近似于平方关系。
- 基于用户的协同过滤算法很难对推荐结果作出解释。
基于物品的协同过滤算法优势:
- 计算性能高,通常用户数量远大于物品数量。
- 可预先计算保留,物品并不善变。
I t e m C F ItemCF ItemCF 算法给用户推荐那些和他们之前喜欢的物品相似的物品。
举个例子:
用户/物品 | 物品A | 物品B | 物品C |
---|---|---|---|
用户A | √ | √ | |
用户B | √ | √ | √ |
用户C | √ | 与物品A相似,推荐 |
I t e m C F ItemCF ItemCF 算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品 A A A 和物品 B B B 具有很大的相似度是因为喜欢物品 A A A 的用户大都也喜欢物品 B B B。
基于物品的协同过滤算法可以利用用户的历史行为给推荐结果提供推荐解释,比如给用户推荐《机器学习实战》的解释可以是因为用户之前买过《统计学习方法》。
基于物品的协同过滤算法步骤:
- 计算物品之间的相似度。
- 根据物品的相似度和用户的历史行为给用户生成推荐列表。
定义物品的相似度为 w i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ w_{ij} = \frac{|N(i)\cap{N(j)|}}{ {|N(i)|}} wij=∣N(i)∣∣N(i)∩N(j)∣此处分母 ∣ N ( i ) ∣ { {|N(i)|}} ∣N(i)∣ 是喜欢物品 i i i 的用户数,而分子 ∣ N ( i ) ∩ N ( j ) ∣ {|N(i)\cap{N(j)|}} ∣N(i)∩N(j)∣ 是同时喜欢物品 i i i 和物品 j j j 的用户数。因此,上述公式可以理解为喜欢物品 i i i 的用户中有多少比例的用户也喜欢物品 j j j。
但该公式存在一个问题,如果物品 j j j 很热门,很多人都喜欢,那么 w i j w_{ij} wij 就会很大,接近1。因此,该公式会造成任何物品都会和热门的物品有很大的相似度,这显然不是一个好的特性。为了避免推荐出热门的物品, 可以用下面的公式: w u v = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ w_{uv} = \frac{|N(i)\cap{N(j)|}}{\sqrt{|N(i)||{N(j)|}}} wuv=∣N(i)∣∣N(j)∣∣N(