UserCF

先找到相似的用户,再找到他们喜欢的物品

基本思路

  1. 构建用户评分表
  2. 计算相似度

余弦相似度:算法笔记 - 图1

  1. 计算推荐结果

计算用户u对物品i的感兴趣程度:算法笔记 - 图2
S(u,K)包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,Wuv是用户u和用户v的兴趣相似度,rvi是用户v对物品i的兴趣。

可以改进的点

  • 用户相似度的改进
  • 为了消除稀疏矩阵的影响,可以使用倒排矩阵

ItemCF

先找到用户喜欢的物品,再找到喜欢物品的相似物品

Item算法计算物品相似度的方法是:分析用户的行为记录(评分表),而不是物品的属性。
例如:购买了xx的用户同时购买了yy

基本思路

  • 构建用户评分表 | | a | b | c | d | e | | :—-: | :—-: | :—-: | :—-: | :—-: | :—-: | | A | 3 | 4 | | 3.5 | | | B | 4 | | 4.5 | | 3.5 | | C | | 3.5 | | | 3 | | D | | 4 | | 3.5 | 3 |

  • 计算物品相似度

    • 构建用户-物品倒排表 | A | a | b | d | | :—-: | :—-: | :—-: | :—-: | | B | a | c | e | | C | b | e | | | D | b | d | e |
  • 构建同现矩阵(表示同时喜欢两个物品的用户数) | | a | b | c | d | e | | :—-: | :—-: | :—-: | :—-: | :—-: | :—-: | | a | 0 | 1 | 1 | 1 | 1 | | b | 1 | 0 | 0 | 2 | 2 | | c | 1 | 0 | 0 | 0 | 1 | | d | 1 | 2 | 0 | 0 | 1 | | e | 1 | 2 | 1 | 1 | 0 |

  • 计算每个物品有行为的用户数(可以根据倒排表得到) | 物品 | 有行为用户数 | | :—-: | :—-: | | a | 2 | | b | 3 | | c | 1 | | d | 2 | | e | 3 |

  • 计算相似度

最原始公式:算法笔记 - 图3
物品之间的相似度矩阵:可以理解为“喜欢i的用户有多少比例喜欢j”

a b c d e
a 0 0.5 0.5 0.5 0.5
b 0.33 0 0 0.67 0.67
c 1.0 0 0 0 1.0
d 0.5 1.0 0 0 0.5
e 0.33 0.67 0.33 0.33 0
  • 构建评分矩阵(以用户C为例)

用户C的评分矩阵:

物品 评分
a 0
b 3.5
c 0
d 0
e 3
  • 计算推荐结果

计算用户u对物品i的兴趣
公式:算法笔记 - 图4
N(u):用户u喜欢的物品集合
S(i,K):和物品j最相似的K个物品的集合
Wij:物品i和j的相似度
ruj:用户u对物品j的兴趣
计算推荐结果:

物品 评分
a 3.25
b 2.0
c 3.0
d 5.0
e 2.33

举例:求C对a评分
分数 = 对b评分ba相似度 + 对e评分ea相似度

可改进的点

  • 惩罚热门物品