用户行为数据

就是日志,分为显性反馈行为和隐形反馈行为。一条日志包括:user id、item id、行为种类、上下文(时间地点)、行为权重、行为内容。
常用数据集
MovieLen数据集

用户行为分析

用户活跃度和物品流行度都遵循长尾分布Power Law)。
横坐标为流行度和活跃度,纵坐标为物品数和用户数。想象一下那个长尾分布的图。

一个结论:用户活跃度越高,越倾向于浏览冷门物品。

协同过滤算法

基于邻域的方法

1.基于用户的协同过滤算法(UserCF)
用户A需要个性化推荐时,先找到与他有相似兴趣的用户,然后把那些用户喜欢的,A不知道的物品推荐给A。
算法步骤
1)找到和目标用户兴趣相似的用户集合;
2)找到这些集合中用户喜欢的,且没有听说过的物品推荐给目标用户。
这里的核心就是计算用户之间的相似度,推荐一篇讲相似度的文章

这里的场景是按照数据形式划分的,按照向量维度取值是否是布尔值来看,杰卡德相似度就只适合布尔值向量,余弦相似度弹性略大,适合两种向量。欧式距离度量的是绝对差异,余弦相似度度量的是方向差异,但是调整的余弦相似度则可以避免这个弱点。

书上的余弦相似度是用【两个用户有过正反馈的物品集合的交集/两者物品集合相乘开根号】。
具体先建立一个倒排表——物品-用户,方便计算;然后计算用户u的前k个兴趣最相似的用户,将他们对物品i的兴趣×与用户u的兴趣相似度,得到一个兴趣值,从而进行推荐。

改进算法User-IIF
基于直觉:两个用户对冷门物品采取过同样行为相似度更高。
改进:
ww=iN(u)N(v)1log1+N(i)N(u)N(v)w_{w}=\frac{\sum_{i \in N(u) \cap N(v)} \frac{1}{\log 1+|N(i)|}}{\sqrt{|N(u)||N(v)|}}
该公式通过右上角新增项惩罚了用户u和v共同兴趣列表中热门物品对相似度的影响。
其中N(i)是对物品i有过行为的用户的数量,所以通过公式变换,数量多的热门物品所占有的权重就越低。这种改进是基于对余弦相似度的深刻理解的。
>>文献阅读
2.基于物品的协同过滤算法
基本思想:
算法步骤
1)计算物品之间的相似度;
2)根据物品的相似度和用户的历史行为给用户生成推荐列表。
物品相似度公式:
wij=N(i)N(j)N(i) w_{i j}=\frac{|N(i) \cap N(j)|}{|N(i)|}
N(i)为喜欢物品i的用户数。

计算用户u对物品j的兴趣:
puj=iN(u)S(j,K)wjiruip_{u j}=\sum_{i \in N(u) \cap S(j, K)} w_{j i} r_{u i}
S(j,K)是和物品j最相似的K个物品集合,Wji是物品j和i的相似度。

改进算法—IUF、Norm
直觉1:不活跃用户对物品相似度的贡献应该更大。
改进了物品相似度的计算公式,惩罚了活跃用户的贡献度,实际对稠密用户直接忽略。
直觉2:研究发现ItemCF的相似度矩阵按最大值归一化,可以提高准确率
效果,更提升了推荐的覆盖率和多样性。

UserCF和ItemCF对比
协同过滤——基于用户行为分析的推荐算法
哈利波特问题

隐语义模型

基本思想:通过隐含特征联系用户兴趣和物品。
通过兴趣分类推荐面临的问题:

  • 编辑分类不代表用户意见、分类粒度、物品多分类、多维度分类、物品在某分类中的权重。
  • 隐含语义分析就是一种从用户行为数据统计的自动聚类方法。
  • pLSA、LDA、隐含类别模型、隐含主题模型、矩阵分解
  • 用户u对物品i的兴趣计算:
    Preference(u,i)=rui=puTqi=f=1Fpu,kqi,kPreference (u, i)=r_{u i}=p_{u}^{T} q_{i}=\sum_{f=1}^{F} p_{u, k} q_{i, k}
  • 由此导出损失函数:
    C=(u,i)K(ruir^ui)2=(u,i)K(ruik=1Kpu,kqi,k)2+λpu2+λqi2 C=\sum_{(u, i) \in K}\left(r_{u i}-\hat{r}_{u i}\right)^{2}=\sum_{(u, i) \in K}\left(r_{u i}-\sum_{k=1}^{K} p_{u, k} q_{i, k}\right)^{2}+\lambda\left\|p_{u}\right\|^{2}+\lambda\left\|q_{i}\right\|^{2}
    关于负样本问题:
    采样原则1)正负样本均衡;2)尽量选取热门,但用户没有行为的物品。

LFM和基于邻域的方法对比

维度 LFM 基于邻域
理论基础 较好 不好
离线计算空间复杂度 较低 很高
离线计算时间复杂度 稍微高
在线实时推荐 不支持 支持
推荐解释 无法解释 可解释

基于图的随机游走算法

用户行为数据很容易表示成二分图,所以先用二分图对行为数据进行建模。
PersonalRank算法
直觉:在二分图中,相关性很高的顶点之间有如下特征1)两个顶点之间更多的相连路径;2)这些路径长度比较短;3)这些路径不会经过出度比较大的点。

公式:(随机游走的方法)
PR(v)={αvi(v)PR(v)lout(v)(vvu)(1 alpha )+αv in (v)PR(v)out(v)(v=vu) \operatorname{PR}(v)=\left\{\begin{array}{l} {\alpha \sum_{v \in \mathbb{i}(v)} \frac{\operatorname{PR}\left(v^{\prime}\right)}{\operatorname{lout}\left(v^{\prime}\right) |} \quad\left(v \neq v_{u}\right)} \\ {(1-\text { alpha })+\alpha \sum_{v \in \text { in }(v)} \frac{\operatorname{PR}\left(v^{\prime}\right)}{\left|\operatorname{out}\left(v^{\prime}\right)\right|} \quad\left(v=v_{u}\right)} \end{array}\right.
这里值得一提的是:解决PR算法时间复杂度高中转化矩阵形式,这里需要加强学习。第一次感受到了矩阵论的强大。

实验设计和算法评测

相关文章: