分类
- 基于领域的协同过滤。(又可以细分为基于用户和基于项)。
- 基于模型的协同过滤。
描述
协同过滤算法(Collaborative Filtering, CF) 是一种比较常用的推荐算法。CF是对用户行为数据进行分析,找到特定模式从而对用户产生有效推荐。比如基于用户的协同过滤算法是通过用户的行为数据计算出相似的用户,通过其相似用户的喜好推荐内容。基于项的协同过滤是通过分析商品的相似性,将相似的商品推荐给用户。协同过滤算法的特点是推荐行为不依赖于项的内容。比如商品的价格,描述等内容信息。
基于用户的协同过滤算法
我们以美甲款式的推荐为例。
比如有U1,U2,U3 ,U4 4个用户,有S1,S2,S3,S4 ,S5 5种款式。三个用户对5种款式的喜好为
由上图可以得到下面的表格
| User | Style |
|:|:--|
|U1|S1,S2,S3|
|U2|S2,S4|
|U3|S2,S4|
|U4|S1,S2,S5|
|U5|S3|
根据用户对不同款式的喜爱得出用户之前的相似度,如下表。(相似度如何计算,后面会详细说明,此处不做讨论)。
| User | U1 |U2|U3|U4|U5|
|:|
|U1|1|0.25|0.25|0.5|0.3|
|U2|0.25|1|1|0.25|0|
|U3|0.25|1|1|0.25|0|
|U4|0.5|0.25|0.25|1|0|
|U5|0.3|0|0|0|1|
对于用户U4来说,与其相似程度最高的用户为U1,U1与U4的并集为S1,S2,S3,S5。所以给用户推荐的款式为S3
基于项的协同推荐算法
还是以上面美甲款式为例。
不同的款式喜爱的用户如下表:
|Style|User|
|:||
|S1|U1,U4|
|S2|U1,U2,U3,U4|
|S3|U1,U5|
|S4|U2,U3|
|S5|U4|
假设两个不同款式被同样的用户喜爱,则认为这两个款式具有相似性。
不同款式之间的相似度如下表:
|User|S1|S2|S3|S4|S5|
|:|
|S1|1|0.5|0.3|0|0.5|
|S2|0.5|1|0.2|0.5|0.25|
|S3|0.3|0.2|1|0|0|
|S4|0|0.5|0|1|0|
|S5|0.5|0.25|0|0|1|
用户U4 喜欢的款式为S1,S2,S5,而与款式S1,S2,S5 相似度最大的款式为S4
通过以上的例子,可以看到,基于项的CF和基于用户的CF算法其实很相似,只是从两个不同纬度来计算推荐结果,但是同样的,我们也能发现这两者的推荐结果是不一样的。在实际的推荐中,往往将两者相结合。
计算相似度
计算相似度的算法很多,下面将介绍常见的几种算法。
Jaccard算法
Jaccard算法是比较简单的算法,通俗的讲就是交集除以并集。公式如下:
$$J(A,B) = \frac{|\quad A\quad \bigcap \quad B\quad |}{|\quad A \quad \bigcup \quad B\quad |}$$
A,B分别代表符合某种条件的集合
欧几里德距离(Euclidean Distance)
假设 x,y 是 n 维空间的两个点,它们之间的欧几里德距离是:
$$d(x,y)=\sqrt{(\sum(x_i-y_i)^2}$$
余弦相似性
余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。
$$similarity=cos(\Theta)=\frac{AB}{||A||||B||}$$