用户行为数据
就是日志,分为显性反馈行为和隐形反馈行为。一条日志包括:user id、item id、行为种类、上下文(时间地点)、行为权重、行为内容。
常用数据集
MovieLen数据集
用户行为分析
用户活跃度和物品流行度都遵循长尾分布(Power Law)。
横坐标为流行度和活跃度,纵坐标为物品数和用户数。想象一下那个长尾分布的图。
一个结论:用户活跃度越高,越倾向于浏览冷门物品。
协同过滤算法
基于邻域的方法
1.基于用户的协同过滤算法(UserCF)
用户A需要个性化推荐时,先找到与他有相似兴趣的用户,然后把那些用户喜欢的,A不知道的物品推荐给A。
算法步骤:
1)找到和目标用户兴趣相似的用户集合;
2)找到这些集合中用户喜欢的,且没有听说过的物品推荐给目标用户。
这里的核心就是计算用户之间的相似度,推荐一篇讲相似度的文章。
这里的场景是按照数据形式划分的,按照向量维度取值是否是布尔值来看,杰卡德相似度就只适合布尔值向量,余弦相似度弹性略大,适合两种向量。欧式距离度量的是绝对差异,余弦相似度度量的是方向差异,但是调整的余弦相似度则可以避免这个弱点。
书上的余弦相似度是用【两个用户有过正反馈的物品集合的交集/两者物品集合相乘开根号】。
具体先建立一个倒排表——物品-用户,方便计算;然后计算用户u的前k个兴趣最相似的用户,将他们对物品i的兴趣×与用户u的兴趣相似度,得到一个兴趣值,从而进行推荐。
改进算法User-IIF
基于直觉:两个用户对冷门物品采取过同样行为相似度更高。
改进:
该公式通过右上角新增项惩罚了用户u和v共同兴趣列表中热门物品对相似度的影响。
其中N(i)是对物品i有过行为的用户的数量,所以通过公式变换,数量多的热门物品所占有的权重就越低。这种改进是基于对余弦相似度的深刻理解的。
>>文献阅读
2.基于物品的协同过滤算法
基本思想:
算法步骤
1)计算物品之间的相似度;
2)根据物品的相似度和用户的历史行为给用户生成推荐列表。
物品相似度公式:
N(i)为喜欢物品i的用户数。
计算用户u对物品j的兴趣:
S(j,K)是和物品j最相似的K个物品集合,Wji是物品j和i的相似度。
改进算法—IUF、Norm
直觉1:不活跃用户对物品相似度的贡献应该更大。
改进了物品相似度的计算公式,惩罚了活跃用户的贡献度,实际对稠密用户直接忽略。
直觉2:研究发现ItemCF的相似度矩阵按最大值归一化,可以提高准确率
效果,更提升了推荐的覆盖率和多样性。
UserCF和ItemCF对比
哈利波特问题
隐语义模型
基本思想:通过隐含特征联系用户兴趣和物品。
通过兴趣分类推荐面临的问题:
- 编辑分类不代表用户意见、分类粒度、物品多分类、多维度分类、物品在某分类中的权重。
- 隐含语义分析就是一种从用户行为数据统计的自动聚类方法。
- pLSA、LDA、隐含类别模型、隐含主题模型、矩阵分解
- 用户u对物品i的兴趣计算:
- 由此导出损失函数:
关于负样本问题:
采样原则1)正负样本均衡;2)尽量选取热门,但用户没有行为的物品。
LFM和基于邻域的方法对比
| 维度 | LFM | 基于邻域 |
|---|---|---|
| 理论基础 | 较好 | 不好 |
| 离线计算空间复杂度 | 较低 | 很高 |
| 离线计算时间复杂度 | 稍微高 | 低 |
| 在线实时推荐 | 不支持 | 支持 |
| 推荐解释 | 无法解释 | 可解释 |
基于图的随机游走算法
用户行为数据很容易表示成二分图,所以先用二分图对行为数据进行建模。
PersonalRank算法
直觉:在二分图中,相关性很高的顶点之间有如下特征1)两个顶点之间更多的相连路径;2)这些路径长度比较短;3)这些路径不会经过出度比较大的点。
公式:(随机游走的方法)
这里值得一提的是:解决PR算法时间复杂度高中转化矩阵形式,这里需要加强学习。第一次感受到了矩阵论的强大。