协同过滤

124 阅读3分钟

协同过滤简介

简单来说是利用用户兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息, 个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助 别人筛序信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要 简单说就是协同(找到相同的人)过滤(过滤出要推荐的物品)

相似性度量:
  1. 夹角余玄,适合离散类别、连续的特征。范围(-1,1).在推荐中一般是(0,1)

image.png

  • 计算公式:

image.png

  • 计算示例:

如下是一份用户物品评分矩阵:

用户物品1物品2物品3
a345
b123

分子:3 * 1 + 4 * 2 + 5 * 3

分母:sqrt(3 * 3 + 4 * 4 + 5 * 5) * sqrt(1 * 1 + 2 * 2 + 3 * 3)

  1. 欧几里得距离,适合数值类的特征。

image.png

  1. Jaccard距离。范围(0,1)

image.png

说完协同过滤以及三种常用的度量方式,我们来看下什么情况下适合那种方式:

1. 基于用户的协同过滤

  • 显示评分矩阵

能统计出用户对产品的具体评分:

物品1物品2物品3
用户132
用户2453
用户3246

这种适合用夹角余弦计算,因为每个人的评分维度不同,有的人普遍高分,有的人普遍低分。 sim(u1,u2) = (3 * 4 + 2 * 3)/(sqrt(3^2 + 2^2) * (4^2 + 3^2))

用户相似矩阵,根据以上两两用户评分的计算,可以计算出用户相似矩阵,例如

物品1物品2物品3
用户110.9880.552
用户20.98810.87
用户30.5520.871

对物品评分

物品1物品2物品3
用户132
用户2453
用户3246

比如要对用户1的物品2打分,

  1. 计算用户相似矩阵
  2. 找到用户1没有打过分的物品-物品2
  3. 找到跟用户1相似的前n个用户
  4. 通过加权平均计算用户1对物品的打分= (用户2相似度 * 用户2对物品2的打分 + 用户3相似度 * 用户3对物品2的打分) / (用户2对物品2的打分 + 用户3对物品2的打分)
  • 隐士评分矩阵

例如用户点击

物品1物品2物品3
用户1101
用户2011
用户3100

用户1和用户2的相似性适合用 Jaccard 来计算: (用户1的物品和用户2物品交集) / (用户1和用户2物品的并集) sim(u1,u2) = 1/3 = 0.33,计算出用户相似矩阵之后,找到最相似的用户,推荐给目标用户没点击过的,但是相似用户点击过的物品。

因此基于用户的协同过滤更适合物品增长很快哪种场景呢?

2. 基于物品的协同过滤

其实和用户的差不多,只是唯独不同。