核心思想 给用户推荐那些和他们之前喜欢的物品相似的物品。
不同于基于内容的推荐,基于物品的协同过滤中的相似主要是利用用户行为的集体智慧。
相似度的计算
计算相似度的实现方式是多种多样的
- 基于共同喜欢物品的用户列表计算:
w i j = ∣ N i ? N j ∣ ∣ N i ∣ ? ∣ N j ∣ w_{ij} = \frac{|N_i \bigcap N_j|}{\sqrt{|N_i| * |N_j|}} wij?=∣Ni?∣?∣Nj?∣ ?∣Ni??Nj?∣?
分母中N i N_i Ni? 是喜欢物品i
的用户数,N j N_j Nj? 是喜欢物品j
的用户数,分子中∣ N i ? N j ∣ |N_i \bigcap N_j| ∣Ni??Nj?∣ 是同时喜欢物品i
和j
的用户数。当同时喜欢两个物品的人数越多,说明两个物品的相似度越高,或者说是相关性越高。分母中,使用了喜欢该物品的总人数作为惩罚,来减小物品因过度热门造成的误差影响。
- 基于余弦相似度计算
w i j = N i ? N j ∣ N i ∣ ? ∣ N j ∣ = ∑ k = 1 l e n ( n k i × n k j ) ∑ k = 1 l e n n k i 2 × ∑ k = 1 l e n n k j 2 w_{ij} = \frac{N_i \cdot N_j}{|N_i| * |N_j|} = \frac{\sum_{k=1}^{len} (n_{ki} \times n_{kj}) }{\sqrt{\sum_{k=1}^{len}n_{ki}^2 \times \sqrt{\sum_{k=1}^{len} n_{kj}^2 }}} wij?=∣Ni?∣?∣Nj?∣Ni??Nj??=∑k=1len?nki2?×∑k=1len?nkj2? ? ?∑k=1len?(nki?×nkj?)?
- 热门物品的惩罚问题
i
被更多的用户喜欢时,分子中的N ( i ) ? N ( j ) N(i) \bigcap N(j) N(i)?N(j) 和分母中的N(i)
都会增长。对于热门物品,分子N ( i ) ? N ( j ) N(i) \bigcap N(j) N(i)?N(j) 的增长速度普遍会高于分母中N(i)
的增长速度,就容易使得物品i
和很多物品的相似度都偏高,出现 ItemCF 中的物品热门问题。为解决该问题,对于热门物品
i
进行惩罚,如下:w i j = ∣ N i ? N j ∣ ∣ N i ∣ α ? ∣ N j ∣ 1 ? α w_{ij} = \frac{|N_i \bigcap N_j|}{|N_i|^\alpha * |N_j|^{1-\alpha}} wij?=∣Ni?∣α?∣Nj?∣1?α∣Ni??Nj?∣?
其中当α ∈ ( 0 , 0.5 ) \alpha \in (0, 0.5) α∈(0,0.5) 时,
N(i)
越小,惩罚越厉害,从而使得热门物品相关性分数下降。计算预测评分 使用如下公式进行评分的预测:
p u i = ∑ N u ? S j , k w j i s c o r e u i p_{ui} = \sum_{N_u \bigcap S_{j,k}} w_{ji} score_{ui} pui?=Nu??Sj,k?∑?wji?scoreui?
其中S j k S_{jk} Sjk? 是物品
j
相似物品的集合,一般取相似分数最高的k
个物品。 s c o r e u i score_{ui} scoreui? 是用户u
对物品i
的评分,如果没有评分数据,则取1。通过使用该方法计算得到用户物品的评分预测,可取其中Top-N个,作为推荐候选。基于用户的协同过滤的原理和基于物品的协同过滤的原理是类似的。
代码实例:
https://github.com/zhangdianlei/recommendation/blob/master/ItemSimilarity.py
https://github.com/zhangdianlei/recommendation/blob/master/ItemSimilarity_cos.py
https://github.com/zhangdianlei/recommendation/blob/master/ItemSimilarity_alpha.py
https://github.com/zhangdianlei/recommendation/blob/master/ItemSimilarity_recommend.py
推荐阅读
- 论文笔记|【论文笔记】DIEN: Deep Interest Evolution Network for Click-Through Rate Prediction
- 深度学习|论文阅读(《Deep Interest Evolution Network for Click-Through Rate Prediction》)
- 人工智能|端到端声源分离研究(现状、进展和未来)
- 推荐系统-node2vec 技术在设计网络推荐中的应用
- 知识图谱与推荐系统综述
- ALS算法讲解
- 隐式/显式反馈
- 矩阵分解模型(1)(ALS学习算法)
- 推荐系统|矩阵分解MF用于评分预测