目录
1.1 邻域 Neighborhood_CF(usercf, itemcf)
0.序言
传统推荐模型可以根据 数据源的不同,分为基于内容的推荐,和基于协同过滤的推荐。
🍇 协同过滤
忽略对item的建模,只考虑用户与物品的交互信息,即 共现矩阵 进行建模。协同过滤根据用户相似度、物品相似度可以划分为 usercf 和 itemcf,分别是行列向量计算相似度。
原理是利用用户访问行为的相似性 或 物品相似性,来互相推荐用户可能感兴趣的物品。
🍇 内容过滤
内容过滤:基本思想是给用户推荐和他们之前喜欢的物品在 内容上 相似的其他物品。核心任务就是 计算物品的内容相似度。
只考虑了item的本身性质,将对象按标签形成集合,如果你消费集合中的一个则向你推荐集合中的其他对象。
侧重于对user 或者 item的 属性信息 建模,比如用户的性别、年龄,商品的颜色、大小等属性。对于同一用户而言,需要利用用户的性别、年龄、爱好等组成特征向量来表示;
1.协同过滤(隐式特征)
1.1 邻域 Neighborhood_CF(usercf, itemcf)
usercf
itemcf
相似度计算方法
1.2 矩阵分解 MF
🍋 1.21 Motivation for MF
流行度会导致长尾分布,产生头部效应。
也就是热门商品容易和大量商品产生相似性,而尾部商品往往特征向量稀疏,不容易被推荐。
为了缓解流行度产生的头部效应,更好的处理稀疏矩阵,提出了矩阵分解算法。
矩阵分解是在协同过滤算法的共现矩阵的基础上,加入了隐向量的概念,加强了模型处理稀疏矩阵的能力 [2006年]。
矩阵分解将共现矩阵R分解为用户向量U和物品向量V。分解形式为R=U^T✖️V。其中R是N*M维度的,U的维度是D*N的,V的维度是D*M的。
🍋 1.22 矩阵分解的方法
🍓 特征值分解 ED(Eigen Decomposition)
其中,特征值分解,只能作用于方阵。不适用于共现矩阵。
🍓 奇异值分解 SVD(Singular Value Decomposition)
🍓 梯度下降 (Gradient Descent)
🍋 1.23 概率矩阵分解 (引入参数先验,求解MF)
为了解决矩阵分解由于噪声存在,有时不存在完美的低秩分解,提出了概率矩阵分解PMF。
先验假设:对噪声||R-R^||、用户矩阵U、物品矩阵V,进行 高斯先验假设/Laplace先验假设。
目标函数:max P(U、V|R) ∝ P(R|U、V)*P(U)*P(V)
等价于共现矩阵R条件下U、V的概率,等价于 U、V条件下R的概率 * P(U) * P(V)
优化:对R进行max_min归一化,对U^T*V进行 sigmoid激活,把两者都投射到(0,1)区间。这样就解决了评分区间有限的问题。
求解:用梯度下降求数值解。把矩阵每一个值都当成参数,用梯度下降的方法去求解。
🍋 1.24 受限概率矩阵分解 Constrained_PMF (加法分解)
为了解决共现矩阵R特征维度不均衡,导致预测失败。提出了Constrained_PMF。
对用户矩阵U做了加法分解,
每个用户Ui分解为 用户i的评分加权均值(sum(IW)/sum(I)) + 用户i的先验偏置(Yi)。
❤️优点:
每个用户Ui,由打分均值+偏置所构成,不易出现特征向量稀疏。
每个用户Ui的先验偏置Yi不同,所以是 混合高斯先验,更易产生逼近真实值的结果。
注意:目标函数中的 I_ij, 是指有Rij 有无打分,也就是有无训练数据。只对训练集合进行损失计算。
🍋 1.25 消除用户和物品打分的偏差 (消除偏置的角度,优化MF)
消除行偏置bu(用户user)、列偏置bi(物品item)、均值偏置。
2.内容过滤 (显式特征)
2.1 逻辑回归LR
相比协同过滤模型,仅利用 用户与物品的行为信息 进行推荐,LR能综合利用 用户、物品、上下文等多种不同特征(用户/物品本身的属性),生成较为全面的推荐结果。
2.2 因子分解机FM
LR 不具备特征交叉、生成组合特征的能力 ,表达能力很弱,容易产生 辛普森悖论 那样错误的结论。(在每个分组中占优势的一方,在总评反而是失势的一方)。
POLY2——特征交叉的开始
o(n^2) 二阶特征交叉
FM
o(n*k) 二阶特征交叉
2.3 特征域因子分解机FFM
FFM通过引入特征域的方式,提高特征交叉能力。但只能做二阶特征交叉,如果维度达到3阶以上,会出现组合爆炸(计算量过高)。
o(n*k*f) ≈ o(n^2*k)
n:n个特征 k:隐向量维度 f:特征域o(n)
2.4 组合模型
GBDT+LR (与GBDT 做分类不同)
FFM引入特征域提高了特征交叉的能力,但受组合爆炸限制只能做二阶。
2014年Facebook提出基于GBDT+LR组合模型的解决方案。能进行高维特征组合与筛选。
(Facebook: GBDT自动进行特征筛选和组合,生成新的离散特征向量,再把特征向量当作LR模型的输入的预估ctr的模型)
GBDT+LR 分为两部分(独立训练),先是将训练样本经过GBDT(经过GBDT每一颗树时,样本所落在的叶结点的值设为1,其他叶结点设为0,这样得到该树的一个特征向量,所有树的特征向量拼接到一起),生成新的离散特征向量。
再是将新特征向量输入给LR(线性2分类器)得到分类结果label。
🍋 GBDT分类 & GBDT回归
易混淆,与GBDT+LR不同,GBDT自身也可以做分类。
🍓GBDT分类
分裂规则(损失增益函数): 熵之半/基尼指数/分类误差率
整体的损失函数: 指数损失 / 负对数似然函数损失。
a) 如果是指数损失函数,则损失函数表达式为 L(y,f(x))=exp(−yf(x))
b) 如果是负对数似然函数损失,分为二元分类和多元分类两种,也就是2/多元交叉熵损失函数。
GBDT多分类:每次迭代训练K个树(k分类) + softmax层得到分类结果。
GBDT二分类:每次迭代训练1个树(2分类) + sigmoid层得到分类结果。
后剪枝时,比如代价复杂度剪枝(CCP),对于我们选择的损失函数R,计算每个结点的 误差增加率 α= R(t)-R(Tt) /|Lt|-1。α小的结点剪枝。其中R(t)是 , R(Tt)是 , Lt是剪枝结点的叶子结点的个数。
🍓GBDT回归
分裂规则(损失增益函数):MSE
整体的损失函数:MSE
GBDT回归: 每次迭代训练一棵树,用负梯度(2阶时:-G/H=-G/1)模拟残差,以残差为拟合目标生成决策树。
后剪枝时,比如代价复杂度剪枝(CCP),对于我们选择的损失函数R,计算每个结点的 误差增加率 α= R(t)-R(Tt) /|Lt|-1。α小的结点剪枝。其中R(t)是 , R(Tt)是 , Lt是剪枝结点的叶子结点的个数。
🍓XGBoost分类
损失增益函数为Gain, 选择最优的划分/终止划分。整棵树的损失函数为
LS-PLM (阿里)
MLR:对全量样本进行聚类,对每个类做LR。