FFM算法介绍

参考文献
Field-aware Factorization Machines for CTR Prediction

前情提要:
FM算法

FFM算法,全名Field-aware Factorization Machines ,整整比FM算法多了一个F!多出来的F意为Field,那么这个Field代表了什么?原作者凭什么认为FFM优于FM呢?在介绍FFM之前,需要有FM的知识,可参考我之前写的,链接附于前面。

我们知道,FM比起弱智的线性模型多考虑了特征的交叉项,那个交叉项为:
在这里插入图片描述
这里xj1,xj2分别代表两个不同的特征,wj1,wj2分别是xj1,xj2对应的隐向量(前篇文章我们是用v这个符号代表隐向量的,这里为什么改为w符号了呢,因为介绍FFM算法的原文献就是这么写的)
那么 ,FFM比起FM有什么不同,在这里插入图片描述
wj1,wj2变成了wj1,f2,wj2,f1,多了个脚标!!!
那这个脚标是什么?f1,f2跟j1,j2似乎有着千丝万缕的关系,带着一样的数字,没错,他们就是一一对应的。怎么个对应法,举个简单的例子,设有四个特征,xj1,xj2,xj3,xj4,它们对应的交叉项的参数分别为(wj1,f2•wj2,f1)xj1xj2,(wj1,f3•wj3,f1)xj1xj3,(wj1,f4•wj4,f1)xj1xj4,(wj2,f3•wj3,f2)xj2xj3,(wj2,f4•wj4,f2)xj2xj4,(wj3,f4•wj4,f3)xj3xj4,找到规律没?作为xj的隐向量,wj是看xj跟具体哪另一个特征交叉,跟着带上不同的脚标,而带上不同的脚标,wj也变换成不同的模样,换句话说,就是wj1,f2跟wj1,f3,wj1,f4都是不同的,虽然他们都是xj1的隐向量!这就是FFM的核心,比起FM每个特征只对应一个隐向量,FFM中每个特征都对应着多个隐向量!视跟不同的特征交叉使用不同的隐向量来计算对应交叉项的参数。

显然,这样每个特征都带有更多隐向量的FFM比起每个特征都只带有一个隐向量的FM有更多的参数,模型的拟合能力就更强,因此在某些场合下就比FM表现更好就不足为奇,但因为模型拟合能力更强了,经常过拟合就也不奇怪了,因此在原作者认为,FFM搭配early stopping风味更佳,所谓的early stopping,就是看着差不多了就让FFM停下,让其别再进一步拟合了!差不多就行了,再拟合下去就过拟合了。
前面说过,在FFM中,每个特征都带有更多的隐向量,那么究竟带有多少个呢?这就牵扯到field的概念,带多少个主要看我们把特征归类成多少个field。试看以下的场景
在这里插入图片描述
这是个经典的CTR的场景,右边是特征,Publisher是广告的发行平台,Advertiser是广告商,左边带有+号的是该广告被成功点击多少次,带有—号的是该广告被成功无视多少次,右边的这些特征都是类别特征,通常我们就是用one hot独热编码来表示,每个位置代表一个类别,若是对应类别就标1,其余标0,每个位置都算是一个单独的特征,在FM看来,每个单独的特征都可以算出一个对应的隐向量,而在FFM看来,每个单独的特征都可以算出多个对应的隐向量。那么在这个场景下会有多少个隐向量?我们前面说过这取决于我们把特征归类为多少个field。在这个场景下,两个field足够,一个field是Publisher,包含着ESPN,Vogue,NBC等,一个field是Advertiser,包含着Nike,Gucci,Adidas等,那么需要多少个隐向量?是2-1=1个!只有属于Publisher field的特征碰上Advertiser field的特征,才取出对应的隐向量,那这总共只有这么个场景,隐向量对应的也只要用一个就够了,对了,这其实就是FM!那么有人问了,那如果同属一个field的特征碰上了怎么办?忘了独热编码了么,同一个field里的特征至多只有一个位置上的特征标1,该交叉项必乘以一个0,该交叉项就不存在了!
试着在场景里多考虑些特征
在这里插入图片描述
那这里就多出来了一些可以划为Gender field的特征,现在共有三个field了,因此每个特征都可以对应算出3-1=2个隐向量!

那么FFM里那些特征的多个隐向量要怎么计算,这可以参考FM算法(链接已附在前面),也是构筑成优化问题使用SGD等优化算法解决

至此,FFM就讲得差不多了,现在我们来看看其适用场景
1FFM与FM一样,都是在线性拟合上多考虑了特征的交叉项,但有些场景特征x跟目标y之间就只是单纯无邪的线性拟合关系,你多考虑特征的交叉项也没啥用,此时FFM与FM的效果与线性模型差不多

2前面我们说过,FFM中每个特征对应要算的隐向量的个数与特征可以被划为多少个field有关,那如果划来划去也划不出多少个field,比如只能划出2个,那些FFM就退化为FM

3在我们说FM的那篇文章中(链接已在上面给出)说过,FM在数据集大型稀疏的场合下运转良好,利用共享参数的方法解决了用少量记录数据拟合大量参数的问题,其实FFM也一样,比起FM多了些隐向量要算,多了些参数,但其实多出的参数量也在可控的范围内,并没有多出特别多,用少量记录数据也足够拟合了,那么在那些数据集不那么大型稀疏的场合呢?其实FM,FFM并不比SVM等经典算法好出多少,那么什么场合会是数据集大型稀疏的场合,其实就是类别特征多,我们又使用独热编码编码类别特征的场合,那么在数值特征占多的情况下,FM,FFM就没啥优势了

介绍完FFM,觉得不过瘾,那再来
DeepFM

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值