协同过滤(英语:Collaborative Filtering,简称CF),简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人透过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。——维基百科
基于用户的协同过滤算法(简称UserCF)
在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。
举个例子:
用户/物品 | 物品A | 物品B | 物品C | 物品D |
---|---|---|---|---|
用户A | √ | √ | 推荐给用户A | |
用户B | √ | |||
用户C | √ | √ | √ |
要实现基于用户的协同过滤,需要的步骤:
- 收集用户偏好
- 通过计算相似度找到与目标用户相似的用户
- 将相似用户喜欢的、且目标用户没有听说过的物品推荐给目标用户
一、计算两个用户的兴趣相似度
其中关键的一步就是计算两个用户的兴趣相似度。
协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户 u u u 和用户 v v v ,令 N ( u ) N(u) N(u) 表示用户 u u u 曾经有过正反馈的物品集合,令 N ( v ) N(v) N(v) 为用户 v v v 曾经有过正反馈的物品集合。则可以通过计算余弦相似度简单地计算 u u u 和 v v v 的兴趣相似度: w u v = ∣ N ( u ) ∩ N ( v ) ∣ ∣ N ( u ) ∪ N ( v ) ∣ w_{uv} = \frac{|N(u)\cap{N(v)|}}{\sqrt{|N(u)\cup{N(v)|}}} wuv=∣N(u)∪N(v)∣∣N(u)∩N(v)∣
例子:
![](https://img-blog.csdnimg.cn/20200504142940296.png)
如图, A A A、 B B B、 C C C、 D D D 为用户, a a a、 b b b、 c c c、 d d d、 e e e 为物品。
利用余弦相似度公式计算他们之间的兴趣相似度分别为: w A B = ∣ { a , b , d } ∩ { a , c } ∣ ∣ { a , b , d } ∣ ∣ { a , c } ∣ = 1 6 w_{AB} = \frac{|{\{ a,b,d\}}\cap\{ {a,c}\}|}{\sqrt{|\{a,b,d\}|\,\,|\{a,c\}}|}=\frac{1}{\sqrt{6}} wAB=∣{ a,b,d}∣∣{ a,c}∣∣{ a,b,d}∩{ a,c}∣=61
w A C = ∣ { a , b , d } ∩ { b , e } ∣ ∣ { a , b , d } ∣ ∣ { b , e } ∣ = 1 6 w_{AC} = \frac{|{\{ a,b,d\}}\cap\{ {b,e}\}|}{\sqrt{|\{a,b,d\}|\,\,|\{b,e\}}|}=\frac{1}{\sqrt{6}} wAC=