协同过滤推荐 -- 基于行为相似的召回

1.推荐计算 — UserCF & ItemCF

源代码地址:
Movielens_Recommend

1.1 基于用户的协同过滤(UserCF)

中心思想:基于用户对物品的偏好找到相邻用户,然后将相邻用户喜欢的物品推荐给当前用户

  • 1.1 计算向量: 将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度
  • 1.2 根据相似度找到K个相邻用户之后,根据相邻用户的相似度权重以及他们对物品的偏好,预测当前用户喜欢的物品,计算得到一个排序的物品列表进行推荐

通过计算用户的相似度和多用户对目标物品的得分,进而计算不同用户对目标物品的推荐得分,对不同用户的推荐得分排序进行推荐
在这里插入图片描述

1.2 基于物品的协同过滤(ItemCF)

中心思想:基于物品被用户喜欢的频率找到相邻物品,然后将相似度高的物品推荐给当前用户

  • 1.1 计算向量: 将所有用户对一个物品的偏好作为一个向量来计算用户之间的相似度
  • 1.2 根据相似度找到K个相邻物品之后,着眼于当前用户没有标注的物品,计算得到一个排序的物品列表进行推荐

通过计算物品的相似度和当前用户对多物品物品的得分,进而计算当前用户对不同物品的推荐得分,对不同物品的推荐得分排序进行推荐
在这里插入图片描述

2.相似度计算

在介绍详细的推荐算法之前我们对推荐算法中常用的相似度计算进行了解

2.1 同现相似度

其实就是计算同时喜欢A物品和B物品的用户数占喜欢A物品的用户数的比率:

w A , B = ∣ N ( A ) ∩ N ( B ) ∣      /      ∣ N ( A ) ∣ w_{A,B} = |N(A) \cap N(B)|\;\; /\;\;|N(A)| wA,B=N(A)N(B)/N(A)

  • N(A)是喜欢A物品的用户数, N(B)是喜欢B物品的用户数

但是如果B是热门物品,那么同时喜欢B物品的用户会很多,那么 w A , B w_{A,B} wA,B会接近于1;那么任何物品与热门物品的相似度都很高,这样推荐便没有什么意义,所以我们这样计算同现相似度:

w A , B = ∣ N ( A ) ∩ N ( B ) ∣      /      ∣ N ( A ) ∣ ∣ N ( B ) ∣ w_{A,B} = |N(A) \cap N(B)| \;\;/\;\; \sqrt{|N(A)||N(B)|} wA,B=N(A)N(B)/N(A)N(B)

2.2 欧几里得距离

欧几里得距离是比较常用的衡量多维空间距离的公式,当然可以认为是两个坐标点直接的绝对距离:

在这里插入图片描述

d ( x ) = ∑ ( x i − y i ) 2 d(x) = \sqrt{\sum(x_i - y_i)^2} d(x)=(xiyi)2

那么我们可以认为距离越短,这两个目标点就越相似,即相似度越大,所以欧几里得相似度可以这样定义:

s i m ( x , y ) = c o u n t      /      1 + d ( x ) sim(x,y) = count\;\;/\;\;1+d(x) sim(x,y)=count/1+d(x)

2.3 Cosine相似度—— 余弦相似度

这个相似度其实是通过两个向量的夹角来反应数据的相似性
在这里插入图片描述

c ( x , y ) = X Y      /      ∣ ∣ X ∣ ∣ ∣ ∣ Y ∣ ∣ = ∑ x i y i      /      ∑ x i 2 ∑ y i 2 c(x,y) = XY\;\;/\;\;||X||||Y|| = \sum x_iy_i \;\; /\;\;\sqrt{\sum x_i^2} \sqrt{\sum y_i^2} c(x,y)=XY/XY=xiyi/xi2 yi2

2.4 皮尔逊相关系数

皮尔逊稀疏一般用于计算两个定距变量间联系的紧密程度,他的取值范围是[-1,1]:
在这里插入图片描述

3.协同过滤算法实现(ItemCF实现)
3.1 数据源:

下载Movielens 1M数据集ml-1m.zip

目录中有: movies.dat ratings.dat users.dat

3.2 同现相似度计算

在这里插入图片描述

  • 对数据进行 物品-物品 的同现频次的分组处理,然后利用同现相似度公式 w A , B = ∣ N ( A ) ∩ N ( B ) ∣      /      ∣ N ( A ) ∣ ∣ N ( B ) ∣ w_{A,B} = |N(A) \cap N(B)| \;\;/\;\; \sqrt{|N(A)||N(B)|} wA,B=N(A)N(B)/N(A)N(B) 计算同现相似度,得到物品相似矩阵,如上图所示
3.3 欧几里得相似度 & 余弦(Cosine)相似度

在这里插入图片描述

  • 欧几里得相似度:同理对数据进行 物品-物品 的同现频次的分组处理,同时通过每组两个物品的得分,根据 s i m ( x , y ) = c o u n t      /      1 + d ( x ) sim(x,y) = count\;\;/\;\;1+d(x) sim(x,y)=count/1+d(x)计算两个物品之间的欧几里得相似度矩阵,如上图所示

  • Cosine相似度:同理对数据进行 物品-物品 的分组处理,计算每组物品的 x y xy xy, ∣ x ∣ 2 |x|^2 x2, ∣ y ∣ 2 |y|^2 y2并依次累加,然后根据 c ( x , y ) = ∑ x i y i      /      ∑ x i 2 ∑ y i 2 c(x,y) = \sum x_iy_i \;\; /\;\;\sqrt{\sum x_i^2} \sqrt{\sum y_i^2} c(x,y)=xiyi/xi2 yi2 计算得到两个物品的余弦相似度矩阵个,如上图所示( x , y x,y x,y是每个物品对的得分)

3.4推荐

相似度计算出来之后,根据物品相似度模型,用户评分和指定最大推荐数量进行用户推荐,如下所示:
在这里插入图片描述
在这里插入图片描述

上面两个图比较明了的解释了推荐的计算过程:

  • eg: 用户2对物品1的评分是1,而物品1和物品2的相似度是0.67,则对用户2推荐物品2的得分:

s c o r e = 评 分 ∗ 相 似 度 = 1 ∗ 0.67 = 0.67 score = 评分 * 相似度 = 1 * 0.67 = 0.67 score==10.67=0.67

  • eg: 用户2对物品1的评分是1,而物品1和物品2的相似度是0.67;用户2对物品3的评分是2,而物品3和物品2的相似度是0.33,则对用户2推荐物品2的得分:

s c o r e = 评 分 ∗ 相 似 度 = 1 ∗ 0.67 + 2 ∗ 0.33 = 1.33 score = 评分 * 相似度 = 1 * 0.67 + 2 * 0.33 = 1.33 score==10.67+20.33=1.33

也就是说推荐结果就是:

当前用户对不同用户评分乘以不同用户与同一物品相似度的叠加之和就是当前用户对该物品的推荐分数

s c o r e 目 标 物 品 = ∑ 对 i 物 品 的 评 分 ∗ i 物 品 与 目 标 物 品 相 似 度 score_{目标物品} = \sum 对i物品的评分 * i物品与目标物品相似度 score=ii
以下链接是源码代地址,感谢阅读;
Movielens_Recommend

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值