推荐系统的召回算法
- 1. 协同过滤---基于行为相似的召回
-
- 1.1 协同过滤算法
-
- 1.1.1 相似度计算
- 1.1.2 推荐计算
- 1.2 协同过滤推荐算法的实现
1. 协同过滤—基于行为相似的召回
要实现协同过滤,需要以下几个步骤:
- 收集用户偏好
- 找到相似的用户或物品
- 计算并推荐
1.1 协同过滤算法
1.1.1 相似度计算
在对用户的行为进行分析得到用户的偏好后,可以根据用户的偏好计算相似用户或相似物品,然后基于相似用户或相似物品进行推荐。即基于用户的协同过滤和物品的协同过滤。
关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的,也就是计算两个向量的距离,距离越近则相似度越大。
-
1.同现相似度
物品A和物品B的同现相似度公式定义:
w A , B = ∣ ( N ( A ) ⋂ N ( B ) ∣ ∣ N ( A ) ∣ w_{A,B} = {|(N(A)\bigcap N(B)|\over |N(A)|} wA,B=∣N(A)∣∣(N(A)⋂N(B)∣
分母$ N(A)$是喜欢物品A的用户数
可理解为喜欢物品A的用户中有多少比例的用户也喜欢物品B。 此公式会造成任何物品都与热门物品有很大相似度。
w A , B = ∣ ( N ( A ) ⋂ N ( B ) ∣ ∣ N ( A ) ∣ ∣ N ( B ) ∣ w_{A,B} = {|(N(A)\bigcap N(B)|\over \sqrt {|N(A)||N(B)|}} wA,B=∣N(A)∣∣N(B)∣
∣(N(A)⋂N(B)∣
这个公式惩罚了物品B的权重,因此减小了热门物品与很多物品相似的可能性。
-
2.欧几里得距离
d ( x , y ) = ∑ ( x i − y i ) 2 d(x,y) = \sqrt {\sum (x_i-y_i)^2} d(x,y)=∑(xi−yi)2
当用欧几里得距离表示相似度时,采用以下公式进行转换:距离越小,相似度值越大。
s i m ( x , y ) = 1 1 + d ( x , y ) sim(x,y) = {1 \over 1+d(x,y) } sim(x,y)=1+d(x,y)1
- 3.皮尔逊相关系数
皮尔逊相关系数一般用于计算两个定距变量间的紧密程度,取值范围为[-1,+1]。
p ( x , y ) = ∑ x i y i − n x y ‾ ( n − 1 ) s x s y p(x,y) = {\sum x_iy_i- n \overline{xy} \over (n-1)s_xs_y} p(x,y)=(n−1)sxsy∑xiyi−nxy
- 4.Cosin相似度
Cosin相似度被广泛应用于计算文档数据的相似度:
C ( x , y ) = x ⋅ y ∣ ∣ x ∣ ∣ 2 ∣ ∣ y ∣ ∣ 2 = ∑ x i y i ∑ x i 2 ∑ y i 2 C(x,y) = {x \cdot y \over ||x||^2||y||^2}={\sum x_iy_i \over \sqrt{\sum x_i^2} \sqrt{\sum y_i^2}} C(x,y)=∣∣x∣∣2∣∣y∣∣2x⋅y=∑xi2
∑yi2
∑xiyi
- 5.Tanimoto系数
Tanimoto系数也被称为Jaccard系数,是Cosine相似度的扩展,多用于计算文档数据的相似度:
T ( x , y ) = x ⋅ y ∣ ∣ x ∣ ∣ 2 + ∣ ∣ y ∣ ∣ 2 − x ⋅ y = ∑ x i y i ∑ x i 2 ∑ y i 2 − ∑ x i y i T(x,y) = {x \cdot y \over ||x||^2 + ||y||^2 - x \cdot y} = {\sum x_iy_i \over \sqrt{\sum x_i^2} \sqrt{\sum y_i^2} - \sum x_iy_i} T(x,y)=∣∣x∣∣2+∣∣y∣∣2−x⋅yx⋅y=∑xi2
∑yi2
−∑xiyi∑xiyi
1.1.2 推荐计算
- UserCF
用户/物品 | 物品A | 物品B | 物品C | 物品D |
---|---|---|---|---|
用户1 | ∘ \circ ∘ | ∘ \circ ∘ | 推荐 | |
用户2 | ∘ \circ ∘ | |||
用户3 | ∘ \circ ∘ | ∘ \circ ∘ | ∘ \circ ∘ |
- ItemCF
用户/物品 | 物品A | 物品B | 物品C |
---|---|---|---|
用户1 | ∘ \circ ∘ | ∘ \circ ∘ | |
用户2 | ∘ \circ ∘ | ∘ \circ ∘ | ∘ \circ ∘ |
用户3 | ∘ \circ ∘ | 推荐 |