本文针对无上下文信息的隐性反馈数据集(每一条行为记录仅仅包含用户ID和物品ID),介绍基于用户的协同过滤算法原理。
基于用户的协同过滤推荐算法本质:找到和待推荐用户相似的用户群,推进该用户群感兴趣且待推荐用户没购买过的物品。例如下图中, 用户a购买过物品A、C,用户c购买过物品A、C、D ,则用户a和用户c比较相似,可以考虑把物品D推荐给用户a。
基本步骤:
- 找到和待推荐用户相似的用户群;
- 找到这个用户群中用户感兴趣的,且待推荐用户没购买过的物品。
为便于理解,本文后面示例的计算中使用下面数据: 第一列为索引,userId是用户标识,itemsId表是用户购买过的物品ID。
1. 用户相似度计算
给定用户 u u u和用户 v v v,令 N ( u ) N(u) N(u)表示用户 u u u点击过的物品集合,令 N ( v ) N(v) N(v)为用户 v v v点击过的物品集合
余弦相似度
W u , v = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ W_{u,v} = \frac{|N(u) \bigcap N(v)|} {\sqrt{|N(u)| | N(v)|}} Wu,v=∣N(u)∣∣N(v)∣∣N(u)⋂N(v)∣ 其中 ∣ ∗ ∣ |*| ∣∗∣表示取模,即物品的个数。
Jaccard公式
W u , v = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u )