网站重新建设的申请书,建设网银登录官方网站,如何在电脑登录wordpress,wordpress购物车保存目录 从特征组合说起FM模型1.原理2.模型训练3.预测阶段4.一网打尽其他模型5.FFM 总结 在上一篇文章中#xff0c;我们讲到了使用逻辑回归和梯度提升决策树组合的模型融合办法#xff0c;用于CTR预估#xff0c;给这个组合起了个名字#xff0c;叫“辑度组合”。这对组合中我们讲到了使用逻辑回归和梯度提升决策树组合的模型融合办法用于CTR预估给这个组合起了个名字叫“辑度组合”。这对组合中梯度提升决策树GBDT所起的作用就是对原始的特征做各种有效的组合一颗树一个叶子节点就是一种特征组合。
从特征组合说起
从逻辑回归最朴素的特征组合就是二阶笛卡尔乘积但是这种暴力组合存在如下问题 1.两两组合导致特征维度灾难 2.组合后的特征不见得都有效事实上大部分可能无效 3.组合后的特征样本非常稀疏即组合容易但是样本中可能不存在对应的组合也就没办法在训练时更新参数。
如果把包含了特征两两组合的逻辑回归线性部分写出来就是 y ^ ω 0 ∑ i 1 n ω i x i ∑ i 1 n ∑ j j 1 n ω i j x i x j \hat{y} ω_0 \sum_{i1}^n{ω_ix_i} \sum_{i1}^n\sum_{jj1}^n{ω_{ij}x_ix_j} y^ω0i1∑nωixii1∑njj1∑nωijxixj
这和原始的逻辑回归相比多了后面的部分特征两两组合也需要去学习对应的参数权重。 问题是两两组合后可能没有样本能欧学习到$w_{ij}在应用中对于这些组合也只能放弃因为没有学到权重。
针对这个问题就有了一个新的算法模型因子分解机模型也叫FM,即Factorization Machine。因子分解机也常常用来做模型融合。
FM模型
1.原理
因子分解机模型是在2010年被提出因为逻辑回归在做特征组合时样本稀疏无法学习到很多特征组合的权重所以因子分解机的提出者就想能否对上面那个公式中的 w i j w_{ij} wij做解耦让每一个特征学习一个隐因子向量出来。
正如矩阵分解时为每一个用户和每一个物品各自都学习一个隐因子向量这样任何两个特征需要组合时只需隐因子变量做向量点积就是两者组合特征的权重了。
针对逻辑回归的线性部分 y ^ ω 0 ∑ i 1 n ω i x i ∑ i 1 n ∑ j i 1 n v i , v j x i x j \hat{y} \omega_{0} \sum_{i1}^n{\omega_{i}x_{i}} \sum_{i1}^{n}{\sum_{ji1}^{n}}{v_i,v_jx_ix_j} y^ω0i1∑nωixii1∑nji1∑nvi,vjxixj
这个公式和前面特征组合的公式相比不同之处就是原来有个\omega_{ij},变成了两个隐因子向量的点积V_i,V_j。
它认为两个特征之间即便没有出现在一条样本中也是有间接联系的。比如特征A和特征B,出现在一些样本中特征B和特征C也出现在一些样本中那么特征A和特征C无论是否出现在一些样本中我们有理由认为两个特征仍然有些联系。
如果在实际预测CTR时特征A和特征C真的同时出现在一些样本中如果你用的是因子分解模型你可以直接取特征A和特征C的隐因子向量进行点积计算就得到两者组合的权重。因子分解机的先进之处就在于此。
既然二阶组合特征可以学到隐因子向量那么三阶、四阶、五阶呢实际上组合越多计算复杂度就会陡增一般在实际使用中因子分解机多用在二阶特征组合中。
2.模型训练
因子分解机的参数学习并无特别之处看目标函数这里是把他当做融合模型来看的用来做CTR预估因预测目标是一个二分类因子分解机的输出还需要经过sigmoid函数变换 σ ( y ^ ) 1 1 e − y ^ \sigma(\hat{y}) \frac{1}{1 e^{-\hat{y}}} σ(y^)1e−y^1
因此损失目标函数为 l o s s ( θ ) − 1 m ∑ i 1 m [ y ( i ) l o g ( σ ( y ^ ) ) ( 1 − y ( i ) ) l o g ( 1 − σ ( y ^ ) ] loss(\theta) - \frac{1}{m}\sum_{i1}^m{[y^{(i)} log(\sigma(\hat{y})) (1-y^{(i)})log(1-\sigma(\hat{y}) ]} loss(θ)−m1i1∑m[y(i)log(σ(y^))(1−y(i))log(1−σ(y^)]
公式中 σ ( y ^ ) \sigma(\hat{y}) σ(y^) 是因子分解机的预测输出后经过sigma函数变换得到的预估CTR, y ^ \hat{y} y^是真实样本的类别标记正样本为1负样本为0m是样本总数。
对于这个损失目标函数使用梯度下降或者随机梯度下降就可以得到模型的参数注意函数实际上还需要加上正则项。
3.预测阶段
因子分解机中二阶特征组合那一部分在实际计算时复杂度有点高如果隐因子向量的维度是k,特征维度是n,那么这个复杂度为O(kn^2),其中n方是特征要两两组合k是每次组合都要对k维向量计算 点积。需稍微改造一下改造过程如下:
loop1 begin: 循环k次k就是隐因子向量的维度其中循环到第f次时做以下事情loop2 begin:循环n个特征第i次循环时做这样的事情1. 从第i个特征的隐因子向量中拿出第f维的值2. 计算两个值A是特征值和f维的值相乘B是A的平方loop2 end把n个A累加起来并平方得到C把n个B也累加起来得到D用C减D得到Eloop1 end把k次循环得到的k个E累加起来除以2
这就是因子分解机中二阶组合部分的实际计算方法目前复杂度下降为O(kn)。
4.一网打尽其他模型
下面继续带你见识一些因子分解机的神奇之处。看下面这张图 下面继续带你见识一些因子分解机的神奇之处。看下面这张图
这张图中的每一条样本都记录了用户对电影的评分最右边的y是评分也就是预测目标左边的特征有五种用户ID、当前评分的电影ID、曾经评过的其他分、评分时间、上一次评分的电影。
现在我们来看因子分解机如何一网打尽其他模型的这里说的打败是说模型可以变形成其他模型。
前面例子因子分解机实现了带有特征组合的逻辑回归。
现在假设图中的样本特征只留下用户ID和电影ID,因子分解机模型就变成 y ^ ω 0 ω u ω i V u , V i \hat{y} \omega_{0} \omega_{u} \omega_{i} V_{u},V_{i} y^ω0ωuωiVu,Vi
用户ID和电影ID在一条样本中各自都只有一个维度1其他都是0。所以在一阶部分就没有了求和符号直接是 w u w_u wu和 w i w_i wi,二阶部分乘积也只剩下了1其他都为0就转变为偏置信息的SVD。
继续在SVD基础上把样本中的特征加上用户历史评分过的电影ID,再求隐因子向量就转变为SVD;再加上时间信息就变成了time-SVD。
因子分解机把前面讲过的矩阵分解一网打尽了顺便还干起了逻辑回归的工作。正因为如此因子分解机常常用来做模型融合在推荐系统的排序阶段肩负起对召回结果做重排序的任务。
5.FFM
在因子分解机基础上可以进行改进改进思路是不但认为特征和特征之间潜藏着一些关系还认为特征和特征类型也有千丝万缕的关系。
这个特征类型就是某些特征实际上来自数据的同一个字段。比如用户id占据了很多维度变成了很多特征但他们都属于同一个类型都叫做用户ID。这个特征类型就是字段即Field.所以这种改进叫做Field-aware Factorization Machines 简称FFM。
因子分解机模型如下 y ^ ω 0 ∑ i 1 n ω i x i ∑ i 1 n ∑ j i 1 n V i , V j x i x j \hat{y} \omega_{0} \sum_{i1}^n{\omega_{i} x_{i}} \sum_{i1}^n{\sum_{ji1}^{n}{V_i,V_jx_ix_j}} y^ω0i1∑nωixii1∑nji1∑nVi,Vjxixj
之前因子分解机认为每个特征有一个隐因子向量FFM改进的是二阶组合那部分改进的模型认为每个特征有f个隐因子向量这里的f就是特征一共来自都少个字段Field,二阶组合部分改进后如下 ∑ j 1 n ∑ j i 1 n V i , f j , V j , f i x i x j \sum_{j1}^n{\sum_{ji1}^n{V_{i,fj},V_{j,fi}x_ix_j}} j1∑nji1∑nVi,fj,Vj,fixixj
FFM模型也常用来做CTR预估在FM和FFM事件过程中记得要对样本和特征做归一化。
总结
今天我给你介绍了另一种常用来做CTR预估的模型因子分解机。因子分解机最早提出在2010年在一些数据挖掘比赛中取得了不错的成绩后来被引入到工业界做模型融合也表现不俗。 严格来说因子分解机也算是矩阵分解算法的一种因为它的学习结果也是隐因子向量也是用隐因子向量的乘积来代替单个权重参数。