精华内容
下载资源
问答
  • FM算法

    2018-10-15 20:42:00
    FM算法(一):算法理论 FM算法(二):工程实现 Python实现FM (附代码与数据) FM算法梯度推导 转载于:https://www.cnblogs.com/zyber/p/9794527.html
    展开全文
  • FM算法详解

    万次阅读 多人点赞 2016-08-07 18:02:06
    1.FM背景在计算广告中,CTR预估(click-through rate)是非常重要的一个环节,因为DSP后面的出价要依赖于CTR预估的结果。...今天,我们就来讲讲FM算法。2.one-hote编码带来的问题FM(Factorization Machine)主要是为了

    项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
    欢迎大家star,留言,一起学习进步

    1.FM背景

    在计算广告中,CTR预估(click-through rate)是非常重要的一个环节,因为DSP后面的出价要依赖于CTR预估的结果。在前面的相关博文中,我们已经提到了CTR中相关特征工程的做法。对于特征组合来说,业界现在通用的做法主要有两大类:FM系列与Tree系列。今天,我们就来讲讲FM算法。

    2.one-hote编码带来的问题

    FM(Factorization Machine)主要是为了解决数据稀疏的情况下,特征怎样组合的问题。已一个广告分类的问题为例,根据用户与广告位的一些特征,来预测用户是否会点击广告。数据如下:(本例来自美团技术团队分享的paper)
    这里写图片描述
    clicked是分类值,表明用户有没有点击该广告。1表示点击,0表示未点击。而country,day,ad_type则是对应的特征。前面我们在http://blog.csdn.net/bitcarmanlee/article/details/51472816一文中专门提到过,对于这种categorical特征,一般都是进行one-hot编码处理。

    将上面的数据进行one-hot编码以后,就变成了下面这样
    这里写图片描述

    因为是categorical特征,所以经过one-hot编码以后,不可避免的样本的数据就变得很稀疏。举个非常简单的例子,假设淘宝或者京东上的item为100万,如果对item这个维度进行one-hot编码,光这一个维度数据的稀疏度就是百万分之一。由此可见,数据的稀疏性,是我们在实际应用场景中面临的一个非常常见的挑战与问题。

    one-hot编码带来的另一个问题是特征空间变大。同样以上面淘宝上的item为例,将item进行one-hot编码以后,样本空间有一个categorical变为了百万维的数值特征,特征空间一下子暴增一百万。所以大厂动不动上亿维度,就是这么来的。

    3.对特征进行组合

    普通的线性模型,我们都是将各个特征独立考虑的,并没有考虑到特征与特征之间的相互关系。但实际上,大量的特征之间是有关联的。最简单的以电商为例,一般女性用户看化妆品服装之类的广告比较多,而男性更青睐各种球类装备。那很明显,女性这个特征与化妆品类服装类商品有很大的关联性,男性这个特征与球类装备的关联性更为密切。如果我们能将这些有关联的特征找出来,显然是很有意义的。

    一般的线性模型为:
    y=ω0+∑i=1nωixiy = \omega_0 + \sum_{i=1}^{n} \omega_i x_iy=ω0+i=1nωixi

    从上面的式子很容易看出,一般的线性模型压根没有考虑特征间的关联。为了表述特征间的相关性,我们采用多项式模型。在多项式模型中,特征xix_ixixjx_jxj的组合用xixj表示x_ix_j表示xixj。为了简单起见,我们讨论二阶多项式模型。具体的模型表达式如下:

    y=ω0+∑i=1nωixi+∑i=1n−1∑j=i+1nωijxixjy = \omega_0 + \sum_{i=1}^{n} \omega_i x_i + \sum_{i=1}^{n-1}\sum_{j=i+1}^{n} \omega_{ij}x_ix_jy=ω0+i=1nωixi+i=1n1j=i+1nωijxixj

    上式中,nnn表示样本的特征数量,xix_ixi表示第iii个特征。
    与线性模型相比,FM的模型就多了后面特征组合的部分。

    4.FM求解

    从上面的式子可以很容易看出,组合部分的特征相关参数共有n(n−1)2\frac{n(n-1)}{2}2n(n1)个。但是如第二部分所分析,在数据很稀疏的情况下,满足xix_ixi,xjx_jxj都不为0的情况非常少,这样将导致ωij\omega_{ij}ωij无法通过训练得出。

    为了求出ωij\omega_{ij}ωij,我们对每一个特征分量xix_ixi引入辅助向量Vi=(vi1,vi2,⋯ ,vik)V_i=(v_{i1},v_{i2},\cdots,v_{ik})Vi=(vi1,vi2,,vik)。然后,利用vivjTv_iv_j^TvivjTωij\omega_{ij}ωij进行求解。

    这里写图片描述

    那么ωij\omega_{ij}ωij组成的矩阵可以表示为:
    这里写图片描述
    上面的表达形式,就对应了一种矩阵的分解。对kkk值的限定,就反应了FM模型的表达能力。

    要求出<vi,vj><v_i,v_j><vi,vj>,主要是采用了如公式((a+b+c)2−a2−b2−c2((a+b+c)^2-a^2-b^2-c^2((a+b+c)2a2b2c2求出交叉项。具体过程如下:这里写图片描述

    展开全文
  • FM的总结:1、FM算法与线性回归相比增加了特征的交叉。自动选择了所有特征的两两组合,并且给出了两两组合的权重。2、上一条所说的,如果给两两特征的组合都给一个权重的话,需要训练的参数太多了。比如我们有N维的...

    FM的总结:

    1、FM算法与线性回归相比增加了特征的交叉。自动选择了所有特征的两两组合,并且给出了两两组合的权重。

    2、上一条所说的,如果给两两特征的组合都给一个权重的话,需要训练的参数太多了。比如我们有N维的特征,这样的话就需要N*N量级的参数。FM算法的一个优点是减少了需要训练的参数。这个也是参考了矩阵分解的想法。有N个特征,特征间的权重,需要一个N*N的权重矩阵。把这个N*N的矩阵分解成  K*N的矩阵V的乘积,权重矩阵W=VT*V。把每个特征用长度为K的向量来表示,此处应该是每个特征也有一个向量,而不是每个特征的值有一个向量。比如有一个长度为K的向量来表示性别这个特征。

    此处的K是自己设置的,K<

    3、FM算法的表示公式为:

    d128826357337fb7ac2cca82fe3966d0.png

    如果按这个直接算的话就是N2的复杂度了,比较高。然后针对后一部分进行化简,变成KN复杂度的。

    这部分的化简主要使用了 x*y  = 1/2( (x+y)2 - x2 - y2)。

    变换之后的是这个样子的:

    fe789ae8de4c70bd6bad1beebb29ec77.png

    4、然后是FM的训练。

    我们再来看一下FM的训练复杂度,利用SGD(Stochastic Gradient Descent)训练模型。模型各个参数的梯度如下

    7a373fb0e78a667be4d37d98f3ceaddc.png

    5992cdf95b8497c4fc7b24d09275b82f.png

    未完待续,等我看完论文再写点

    参考资料:https://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html

    展开全文
  • 主要内容:动机FM算法模型FM算法VS 其他算法一、动机在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合;非线性SVM可以对特征进行kernel映射,...

    主要内容:动机

    FM算法模型

    FM算法VS 其他算法

    一、动机

    在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合;非线性SVM可以对特征进行kernel映射,但是在特征高度稀疏的情况下,并不能很好地进行学习;现在也有很多分解模型Factorization model如矩阵分解MF、SVD++等,这些模型可以学习到特征之间的交互隐藏关系,但基本上每个模型都只适用于特定的输入和场景。为此,在高度稀疏的数据场景下如推荐系统,FM(Factorization Machine)出现了。

    下面所有的假设都是建立在稀疏数据的基础上,举个例子,根据用户的评分历史预测用户对某部电影的打分,这里的每一行对应一个样本,Feature vector x表示特征,Targer y表示预测结果。从下图可以看出,这是一个稀疏特征的例子,后面的相关内容会以此为例子进行说明。

    特征中的前四列表示用户u(one-hot编码,稀疏),接着五列表示电影i(ont-hot编码,稀疏),再接下去五列表示用户u对电影i的打分(归一化特征),紧接着一列表示时间(连续特征),最后五列表示用户u对电影i打分前评价过的最近一部电影(one-hot编码,稀疏)

    29bd8e141d9dcff0b86cca6429b14001.png

    二、FM算法模型

    1、模型目标函数

    二元交叉的FM(2-way FM)目标函数如下:

    其中,w是输入特征的参数,是输入特征i,j间的交叉参数,v是k维向量。

    前面两个就是我们熟知的线性模型,后面一个就是我们需要学习的交叉组合特征,正是FM区别与线性模型的地方。

    12207d299283acb6b0ffef32bb896e7b.png

    为什么要通过向量v的学习方式而不是简单的wij参数呢?

    这是因为在稀疏条件下,这样的表示方法打破了特征的独立性,能够更好地挖掘特征之间的相关性。以上述电影为例,我们要估计用户A和电影ST的关系w(A&ST)以更好地预测y,如果是简单地考虑特征之间的共现情况来估计w(A&ST),从已有的训练样本来看,这两者并没有共现,因此学习出来的w(A&ST)=0。而实际上,A和ST应该是存在某种联系的,从用户角度来看,A和B都看过SW,而B还看过ST,说明A也可能喜欢ST,说明A很有可能也喜欢ST。而通过向量v来表示用户和电影,任意两两之间的交互都会影响v的更新,从前面举的例子就可以看过,A和B看过SW,这样的交互关系就会导致v(ST)的学习更新,因此通过向量v的学习方式能够更好的挖掘特征间的相互关系,尤其在稀疏条件下。

    2、模型的计算复杂度

    可能有人会问,这样两两交叉的复杂度应该O(k*n^2)吧,其实,通过数学公式的巧妙转化一下,就可以变成O(kn)了。转化公式如下所示,其实就是利用了2xy = (x+y)^2 – x^2 – y^2的思路。

    d7efc7da7c9ae591e8d0c8686b386bbe.png

    3、模型的应用

    FM可以应用于很多预测任务,比如回归、分类、排序等等。

    1.回归Regression:y^(x)直接作为预测值,损失函数可以采用least square error;

    2.二值分类Binary Classification:y^(x)需转化为二值标签,如0,1。损失函数可以采用hinge loss或logit loss;

    3.排序Rank:x可能需要转化为pair-wise的形式如(X^a,X^b),损失函数可以采用pairwise loss

    4、模型的学习方法

    前面提到FM目标函数可以在线性时间内完成,那么对于大多数的损失函数而言,FM里面的参数w和v更新通过随机梯度下降SGD的方法同样可以在线性时间内完成,比如logit loss,hinge loss,square loss,模型参数的梯度计算如下:

    a1a894504cde59a6ee3106e412036a10.png

    5ce1dcc5c8edd287f8ab05b9f4029a59.png这部分求和跟样本i是独立的,因此可以预先计算好。

    5、模型延伸:多元交叉

    前面提到到都是二元交叉,其实可以延伸到多元交叉,目标函数如下:(看起来复杂度好像很高,其实也是可以在线性时间内完成的)

    7a1b197182dc5207c0eaba98bb42b72b.png

    6、总结

    前面简单地介绍了FM模型,总的来说,FM通过向量交叉学习的方式来挖掘特征之间的相关性,有以下两点好处:

    1.在高度稀疏的条件下能够更好地挖掘数据特征间的相关性,尤其是对于在训练样本中没出现的交叉数据;

    2.FM在计算目标函数和在随机梯度下降做优化学习时都可以在线性时间内完成。

    三、FM算法 VS 其他算法

    1、FM 对比 SVM

    1)SVM

    SVM是大家熟知的支持向量机模型,其模型原理在这里就不详述了。

    SVM的线性模型函数表示为:

    8a933eecd45b2e985fa2ba6c47cd2af7.png

    其非线性形式可以通过核映射kernel mapping的方式得到,如下所示:

    a406933b221b797ae623b0b273264ef7.png

    其中多项式核表示为:

    6382447bdbd296ce9000062be3abfc9f.png

    当d=2时为二次多项式,表示为:

    3574ecb7f75bfaf8bcf7b33510d58232.png

    多项式核映射后的模型函数表示为:

    44a76177e3306fa11c4adeb5cff5534a.png

    2)FM 对比 SVM

    看到上面的式子,是不是觉得跟FM特别像?SVM和FM的主要区别在于,SVM的二元特征交叉参数是独立的,如wij,而FM的二元特征交叉参数是两个k维的向量vi、vj,这样子的话,和就不是独立的,而是相互影响的。

    为什么线性SVM在和多项式SVM在稀疏条件下效果会比较差呢?线性svm只有一维特征,不能挖掘深层次的组合特征在实际预测中并没有很好的表现;而多项式svn正如前面提到的,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,这样对于测试集上的case而言这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。

    此外,FM和SVM的区别还体现在:1)FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行;2)FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量。

    2、FM 对比 其他分解模型Fac torization Model

    这部分不详述,其他分解模型包括Matrix factorization (MF)、SVD++、PITF for Tag Recommendation、Factorized Personalized Markov Chains (FPMC),这些模型都只在特定场景下使用,输入形式也比较单一(比如MF只适用于categorical variables),而FM通过对输入特征进行转换,同样可可以实现以上模型的功能,而且FM的输入可以是任意实数域的数据,因此FM是一个更为泛化和通用的模型。详细内容参考:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

    四、参考文献

    1、《Factorization Machines》

    展开全文
  • 简介FM是Steffen Rendle在2010年提出的,FM算法的核心在于特征组合,以此来减少人工参与特征组合工作。对于FM,其优势可分以下三点:FM能处理数据高度稀疏场景,SVM则不能;FM具有线性的计算复杂度,而SVM依赖于...
  • 关于FM算法

    2020-04-19 03:32:00
    一、FM算法的简介: ⑴FM 算法可进行回归和二分类预测的一种算法。 ⑵FM的主要目标就是解决在数据稀疏的情况下,特征怎样组合的问题。 ⑶FM的特点是考虑了特征之间的相互作用,是一种非线性模型。 ⑷目前FM算法是...
  • FM算法介绍

    2019-08-06 12:34:24
    FM (Factorization Machine) 算法可进行回归和二分类预测,它的特点是考虑了特征之间的相互作用,是一种非线性模型,目前FM算法是推荐领域被验证的效果较好的推荐方案之一,在诸多电商、广告、直播厂商的推荐领域有...
  • 稀疏贝叶斯学习算法SBL-FM算法,为博士论文中的代码实现
  • FM算法模型

    2020-08-14 15:37:34
    FM算法模型一、FM意义二、FM理论模型三、参数优化 一、FM意义 传统的LR模型,各个特征之间是相互独立的,为了获得特征之间的交互关系,需要花费大量的时间去进行人工特征构造(交叉特征)。同时,面对特征高度稀疏的...
  • 豆瓣FM的推荐算法没有停止,反而是在不断演进当中,伴随着它成长的用户,会慢慢发现越来越多的惊喜与满意。豆瓣FM是中国互联网实践个性化服务的一个很好的土壤.单位换算及读法1微米(um)=1000纳米(nm); 1纳米(nm) =...
  • Python实现FM算法解析

    2020-09-19 06:45:00
    主要介绍了Python实现FM算法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • tensorflow实现FM算法

    千次阅读 2019-04-19 19:51:53
    FM算法 Tensorflow实现 本节通过实现FM 算法熟悉tensorflow的使用 FM 算法原理 FM (factor machine)算法是有监督的机器学习算法,可以用来分类和回归,一般用来做CTR预估。FM算法的亮点是提出了一种特征组合的方式...
  • Python实实现现FM算算法法解解析析 这篇文章主要介绍了Python实现FM算法解析文中通过示例代码介绍的非常详细对大家的学习或者工作具有一 定的 考学习价值需要的朋友们下面随着小编来一起学习学习吧 1. 什什么么是是...
  • 准确的估计 对于提高...业界常用的方法有人工特征工程 + LR(Logistic Regression)、GBDT(Gradient Boosting Decision Tree) + LR[1][2][3]、FM(Factorization Machine)[2][7]和FFM(Field-aware Factorization Mach...
  • Fm算法个人理解小记

    2020-11-25 12:04:07
    从开始接触推荐相关的内容以来,无论是主流的工业应用还是各种博客科普教学,Fm算法始终是推荐这条路上绕不过的重要节点。 因为个人水平有限,始终对于Fm算法的理解都停滞与表面,别人说Fm算法是对LR的升级,是对MF...
  • python实现FM算法

    2020-12-25 17:49:53
    x2,x3,那么就会有3中特征相乘的组合x1*x2,x1*x3,x2*x3,如果变量的维度比较少,我们是可以先计算这些特征组合在进行求相关的参数,但是如果遇到维度特别大的时候而且特征又是比较稀疏的时候可以考虑用FM算法 ...
  • FM(Factor Machine, 因子分解机)算法是一种基于矩阵分解的机器学习算法,是为了解决大规模稀疏数据中的特征组合问题。不同于传统的线性模型LR(Logistic Regression),其认为每个特征都是独立的。在FM中,考虑到特征...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,089
精华内容 435
关键字:

fm算法