协同过滤简介
简单来说是利用用户兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息, 个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助 别人筛序信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要 简单说就是协同(找到相同的人)过滤(过滤出要推荐的物品)
相似性度量:
- 夹角余玄,适合离散类别、连续的特征。范围(-1,1).在推荐中一般是(0,1)
- 计算公式:
- 计算示例:
如下是一份用户物品评分矩阵:
| 用户 | 物品1 | 物品2 | 物品3 |
|---|---|---|---|
| a | 3 | 4 | 5 |
| b | 1 | 2 | 3 |
分子:3 * 1 + 4 * 2 + 5 * 3
分母:sqrt(3 * 3 + 4 * 4 + 5 * 5) * sqrt(1 * 1 + 2 * 2 + 3 * 3)
- 欧几里得距离,适合数值类的特征。
- Jaccard距离。范围(0,1)
说完协同过滤以及三种常用的度量方式,我们来看下什么情况下适合那种方式:
1. 基于用户的协同过滤
- 显示评分矩阵
能统计出用户对产品的具体评分:
| 物品1 | 物品2 | 物品3 | |
|---|---|---|---|
| 用户1 | 3 | 2 | |
| 用户2 | 4 | 5 | 3 |
| 用户3 | 2 | 4 | 6 |
这种适合用夹角余弦计算,因为每个人的评分维度不同,有的人普遍高分,有的人普遍低分。 sim(u1,u2) = (3 * 4 + 2 * 3)/(sqrt(3^2 + 2^2) * (4^2 + 3^2))
用户相似矩阵,根据以上两两用户评分的计算,可以计算出用户相似矩阵,例如
| 物品1 | 物品2 | 物品3 | |
|---|---|---|---|
| 用户1 | 1 | 0.988 | 0.552 |
| 用户2 | 0.988 | 1 | 0.87 |
| 用户3 | 0.552 | 0.87 | 1 |
对物品评分
| 物品1 | 物品2 | 物品3 | |
|---|---|---|---|
| 用户1 | 3 | 2 | |
| 用户2 | 4 | 5 | 3 |
| 用户3 | 2 | 4 | 6 |
比如要对用户1的物品2打分,
- 计算用户相似矩阵
- 找到用户1没有打过分的物品-物品2
- 找到跟用户1相似的前n个用户
- 通过加权平均计算用户1对物品的打分= (用户2相似度 * 用户2对物品2的打分 + 用户3相似度 * 用户3对物品2的打分) / (用户2对物品2的打分 + 用户3对物品2的打分)
- 隐士评分矩阵
例如用户点击
| 物品1 | 物品2 | 物品3 | |
|---|---|---|---|
| 用户1 | 1 | 0 | 1 |
| 用户2 | 0 | 1 | 1 |
| 用户3 | 1 | 0 | 0 |
用户1和用户2的相似性适合用 Jaccard 来计算: (用户1的物品和用户2物品交集) / (用户1和用户2物品的并集) sim(u1,u2) = 1/3 = 0.33,计算出用户相似矩阵之后,找到最相似的用户,推荐给目标用户没点击过的,但是相似用户点击过的物品。
因此基于用户的协同过滤更适合物品增长很快哪种场景呢?
2. 基于物品的协同过滤
其实和用户的差不多,只是唯独不同。