FM和FFM原理

FM和FFM原理模型用途FM和FFM,分解机,是近几年出的新模型,主要应用于广告点击率预估(CTR),在特征稀疏的情况下,尤其表现出优秀的性能和效果,也数次在kaggle上的数据挖掘比赛中拿到较好的名次。FM原理特征编码时常用的one-hot编码,会导致特征非常稀疏(很多0值)。常用的特征组合方法是多项式模型,模型表达式如下: y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1nwijxixjy(x)=w…

大家好,又见面了,我是你们的朋友全栈君。

模型用途

FM和FFM,分解机,是近几年出的新模型,主要应用于广告点击率预估(CTR),在特征稀疏的情况下,尤其表现出优秀的性能和效果,也数次在kaggle上的数据挖掘比赛中拿到较好的名次。

FM原理

特征编码时常用的one-hot编码,会导致特征非常稀疏(很多0值)。常用的特征组合方法是多项式模型,模型表达式如下: 

y(x)=w0+i=1nwixi+i=1nj=i+1nwijxixjy(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1nwijxixj



其中
xixi
表示第i列特征,
nn
表示特征数,
w0,wi,wijw0,wi,wij
为模型参数。模型参数为
n2n2
个。在对模型进行训练时,采用SGD(随即梯度下降),由于特征较稀疏,大部分
wijwij
的梯度值为0,那么参数
wijwij
的值就不准确,会影响模型的效果。 


FM模型,将参数
wijwij
对应的矩阵
WW
,利用矩阵分解表示为
W=VTVW=VTV
, 矩阵
VV
Rk×n∈Rk×n
, 可以通过调节k来调节模型的泛化能力。 


k影响



FM模型则表示为: 

y(x)=w0+i=1nwixi+i=1nj=i+1n<vi,vj>xixjy(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n<vi,vj>xixj



模型参数减少为kn个。训练方法还是采用SGD,在预测时,可以通过下式将计算复杂度从
O(kn2)O(kn2)
降低为
O(kn)O(kn)
: 

i=1nj=i+1n<vi,vj>xixj=12f=1k((i=1nvi,fxi)2i=1n(vi,fxi)2)∑i=1n∑j=i+1n<vi,vj>xixj=12∑f=1k((∑i=1nvi,fxi)2−∑i=1n(vi,fxi)2)

FFM 原理

FFM模型是在FM特征组合的基础上给特征加上了field属性,于是模型表示为 

y(x)=w0+i=1nwixi+i=1nj=i+1n<vi,fj,vj,fi>xixjy(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n<vi,fj,vj,fi>xixj



其中
fifi
表示特征i所属的field,需要训练的
VV

n×k×fn×k×f
,
ff
为field的个数,具体案例见
ppt
 


由于FFM加入field,使得训练和预测过程参数计算不能简化,复杂度为
O(kn2)O(kn2)

参考文献

  1. http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
  2. ffm源码git

转自:https://blog.csdn.net/Leo00000001/article/details/71330927?locationNum=13&fps=1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143838.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • addEventListener() 方法

    addEventListener() 方法先看个例子:document.getElementById("myBtn").addEventListener("click",function(){document.getElementById("demo").innerHTML="HelloWorld";});123定义和用法addEventListener()方法用于向指定元素添加事件句柄。提示:使用removeE…

    2022年7月12日
    15
  • 什么是线程死锁以及如何避免死锁「建议收藏」

    什么是线程死锁以及如何避免死锁「建议收藏」认识线程死锁多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止,最终导致死锁产生。如下图所示,线程A持有资源2,线程B持有资源1,他们同时都想申请对方的资源,所以这两个线程就会因互相等待而进入死锁状态。线程死锁示意图下面通过一个例子来说明线程死锁,代码模拟了上图的死…

    2022年7月15日
    16
  • cmd ping命令大全_ping命令怎么使用

    cmd ping命令大全_ping命令怎么使用简介:ping是一种Computernetworktools(电脑网络工具),作用是测试数据包是否能通过IP协议到达特定主机。Ping是Windows系统、Unix系统和Linux系统下的一个命令。它也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。该命令还可以加许多参数使用。例如:-t,-l,-n。(注意,所有ping指令都必须在知道IP的情况下使用)使用方法:主要的用法:1.-t:不断向目标IP发送数.

    2022年9月22日
    2
  • Pytorch 安装及使用(Pycharm 版)

    Pytorch 安装及使用(Pycharm 版)Pytorch安装(Pychram版)

    2022年8月26日
    11
  • SQL Prompt10 安装激活教程,让你写sql 如鱼得水[通俗易懂]

    SQL Prompt10 安装激活教程,让你写sql 如鱼得水[通俗易懂]需要sql_Prompt10压缩包的请看文章最底下1.首先得有我们的SQLPrompt10压缩包2.选择SQLPromptDownload.exe进行安装打开安装界面,全部勾选选点击continue——–>>继续下一步点击accept选择安装位置,一般不推荐安装C盘,继续install——>>>>等待安装完成点击finish3.打开sqlserver数据库打开sqlserver数据库,可能有些兄弟进入不是这样得,有sql_

    2022年7月26日
    50
  • DB2存储过程语法解析

    DB2存储过程语法解析创建SQL存储过程(CREATEPROCEDURE(SQL)statement)语法格式如下:>>-CREATEPROCEDURE–procedure-name—————————–>>–+—————————————————-+–*—->’-(–+-

    2022年7月17日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号