【ML】FM & FFM应用场景-优点-原理-代码

0.FM和MF的区别:

MF:矩阵分解(Matrix Factorization,MF)技术把用户-项目评分矩阵分解为若干个部分的组合,它在2006年 Netfilx公司举办的推荐系统大赛上得到了应用,基于矩阵分解的推荐算法本质上是一种基于模型的协同过滤推荐算法。

基于矩阵分解的推荐算法,实现简单,预测准确度高,扩展性强,在一定程度上缓解了数据的稀疏性问题,但可解释性差。

FM:由 Steffen Rendle于2010年提出一种因子分解模型,优势在于它能够通过特征向量去模拟因子分解模型既结合了特征工程法的普遍性和适用性,又能够利用因子分解模型对不同类别的变量之间的交互作用(interaction)进行建模估计,借助开源实现工具 libFM,能够快速地完成学习任务,取得很好的精度。将这一模型命名为因子分解机,作者正是希望该模型能像支撑向量机那样简单、易用、高精度。

一.应用场景

点击预估。

优点:1.高度稀疏数据场景;2.具有线性的计算复杂度。

二.解决的问题

旨在解决稀疏数据下的特征组合问题。

现象:一个是类别特征经过one-hot产生的特征稀疏,另一个是特征维度剧增

CTR/CVR预测时,用户的性别、职业、教育水平、品类偏好,商品的品类等,经过One-Hot编码转换后都会导致样本数据的稀疏性。特别是商品品类这种类型的特征,如商品的末级品类约有550个,采用One-Hot编码生成550个数值特征,但每个样本的这550个特征,有且仅有一个是有效的(非零)。由此可见,数据稀疏性是实际问题中不可避免的挑战。

One-Hot编码的另一个特点就是导致特征空间大。例如,商品品类有550维特征,一个categorical特征转换为550维数值特征,特征空间剧增。

同时通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关性就会提高。例如,“USA”与“Thanksgiving”、“China”与“Chinese New Year”这样的关联特征,对用户的点击有着正向的影响。

FM模型的核心作用可以概括为以下3个:

1. FM降低了交叉项参数学习不充分的影响

one-hot编码后的样本数据非常稀疏,组合特征更是如此。为了解决交叉项参数学习不充分、导致模型有偏或不稳定的问题。作者借鉴矩阵分解的思路:每一维特征用k维的隐向量表示,交叉项的参数wij用对应特征隐向量的内积表示,即〈vi,vj〉(也可以理解为平滑技术)。这样参数学习由之前学习交叉项参数wij的过程,转变为学习n个单特征对应kk维隐向量的过程。因此,可以说FM降低了因数据稀疏,导致交叉项参数学习不充分的影响

2. FM提升了模型预估能力

依然看上面的示例,样本中没有<男性,化妆品>交叉特征,即没有男性看化妆品广告的数据。如果用多项式模型来建模,对应的交叉项参数w男性,化妆品w男性,化妆品是学不出来的,因为数据中没有对应的共现交叉特征。那么多项式模型就不能对出现的男性看化妆品广告场景给出准确地预估。

FM模型是否能得到交叉项参数w男性,化妆品w男性,化妆品呢?答案是肯定的。由于FM模型是把交叉项参数用对应的特征隐向量内积表示,这里表示为w男性,化妆品=〈v男性,v化妆品〉。

由于FM学习的参数就是单特征的隐向量,那么男性看化妆品广告的预估结果可以用v男性,v化妆品〉得到。这样,即便训练集中没有出现男性看化妆品广告的样本,FM模型仍然可以用来预估,提升了预估能力。

3. FM提升了参数学习效率

这个显而易见,参数个数由(n2+n+1)变为(nk+n+1)个,模型训练复杂度也由O(mn2)变为O(mnk)。m为训练样本数。对于训练样本和特征数而言,都是线性复杂度。

此外,就FM模型本身而言,它是在多项式模型基础上对参数的计算做了调整,因此也有人把FM模型称为多项式的广义线性模型,也是恰如其分的。

从交互项的角度看,FM仅仅是一个可以表示特征之间交互关系的函数表法式,可以推广到更高阶形式,即将多个互异特征分量之间的关联信息考虑进来。例如在广告业务场景中,如果考虑User-Ad-Context三个维度特征之间的关系,在FM模型中对应的degree为3。

最后一句话总结,FM最大特点和优势:FM模型对稀疏数据有更好的学习能力,通过交互项可以学习特征之间的关联关系,并且保证了学习效率和预估能力。

如何组合?

带着这个问题,继续往下看。

三.原理

FM模型的引入:

推荐CTR预估时最简单的思路就是将特征做线性组合(逻辑回归LR),传入sigmoid中得到一个概率值,本质上这就是一个线性模型,因为sigmoid是单调增函数不会改变里面的线性模型的CTR预测顺序,因此逻辑回归模型效果会比较差。也就是LR的缺点有:

  1. 是一个线性模型
  2. 每个特征对最终输出结果独立,需要手动特征交叉(xi*xj),比较麻烦

LR模型的上述缺陷(主要是手动做特征交叉比较麻烦),干脆就考虑所有的二阶交叉项,如下:

如何解决二次项参数的训练问题呢?

矩阵分解提供了一种解决思路。在model-based的协同过滤中,一个rating矩阵可以分解为user矩阵和item矩阵,每个user和item都可以采用一个隐向量表示。比如在下图中的例子中,我们把每个user表示成一个二维向量,同时把每个item表示成一个二维向量,两个向量的点积就是矩阵中user对item的打分。

首先是为什么使用向量的点积可以解决以上问题呢?

1.参数的数量大幅度缩减,从n×(n−1)/2降低到nk
2.隐向量的点积可以表示原本两个毫无相关的参数之间的关系
3.而稀疏数据下学习不充分的问题也能得到充分解决。比如原本的多项式回归的参数w12的学习只能依赖于特征x1和x2;而对参数〈v1,v2〉而言就完全不一样了,它由v1和v2组成。而对于每个向量可以通过多个交叉组合特征学习得到,比如可以由x1x2,x1x3,x1x3,..学习获得,这样可供学习的非零样本就大大增加了。

FM与矩阵分解MF与SVM有什么差别呢?

1.FM是一种比较灵活的模型,通过合适的特征变换方式,FM可以模拟二阶多项式核的SVM模型、MF模型、SVD++模型等。

2.相比SVM的二阶多项式核而言,FM在样本稀疏的情况下是有优势的;而且,FM的训练/预测复杂度是线性的,而二项多项式核SVM需要计算核矩阵,核矩阵复杂度就是N平方。

3.相比MF而言,我们把MF中每一项的rating分改写为rui∼βu+γi+xTuyi,从此公式中可以看出,这相当于只有两类特征 β 和 γ 的FM模型。对于FM而言,我们可以加任意多的特征,比如user的历史购买平均值,item的历史购买平均值等,但是MF只能局限在两类特征。SVD++与MF类似,在特征的扩展性上都不如FM。【补充:MF的Rui可以表示为用户的向量跟商品的向量的乘积,也就是从用户和商品两个维度进行交叉;FM则可以从所有特征维度上做交叉,因为每一个维度的特征都学出了一个向量。】

应用方式: 

1.直接作为模型使用。

2.获取vector,用于计算相似度。

3.作为深度模型的预训练,生成id或者类别特征的embeding方式。

四.代码

待续ing

参考链接:

1.FM:推荐系统学习笔记之四 Factorization Machines 因子分解机 + Field-aware Factorization Machine(FFM) 场感知分解机_小鹅鹅的博客-CSDN博客

2.FM原理及代码:FM算法解析及Python实现 - Bo_hemian - 博客园

2.FFMmodel:LIBFFM: A Library for Field-aware Factorization Machines

3.FFMppt介绍 :https://www.csie.ntu.edu.tw/~r01922136/slides/ffm.pdf

4.FM& FFM以及例子介绍: 第09章:深入浅出ML之Factorization家族 | 计算广告与机器学习

5.MF推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) - 知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值