1. LR

LR的linear Margin:

假设特征之间是相互独立的,忽略了feature pair等高阶信息;在LR中,特征组合等高阶信息是通过特征工程在特征侧引入的,那么有哪些模型不需要通过特征工程自动学习高阶信息呢?

2. Degree-2 Polynomial Margin (Poly2)

在LR基础上,加入任意两个特征之间的关系:

其中,wij是feature pair (i,j)的权重,只有xi和xj都非零时,组合特征xixj才有意义。

组合特征的参数一共有n(n-1)/2个,任意两个参数都是独立的。然而,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数wij的训练需要大量xi和xj都非零的样本;由于样本数据本来就比较稀疏,满足“xi和xj都非零”的样本将会非常少。训练样本的不足,很容易导致参数wij不准确,最终将严重影响模型的性能。

相对于Linear Margin,Poly2存在如下两个问题

(1)参数空间大幅增加,由线性增加至平方级;

(2)但样本仍然非常稀疏。

假设直接使用Poly2穷举feature pair进行训练,则会存在如下两个致命问题

(1)参数过多导致训练算法效率极低,甚至内存溢出;

(2)由于特征大量增加但不增加样本,极容易造成过拟合。

因此,我们需要一种在模型侧计算高阶信息的低复杂度方法,也就是下面要介绍的FM。

3. FM(Factorization Machine)

   FM将wij分解为两个向量的内积:

  其中,vi是一个k维向量。直观上看,FM的复杂度为O(kn2),但是通过下式,FM的二次项可以化简,其复杂度可以优化到O(kn)。由此可见,FM可以在线性时间对新样本做出预测。

  直观来看,FM认为当一个特征  需要与其它特征  考虑组合特性的时候,只需要一组k维向量  即可代表  ,而不需针对所特征分别计算出不同的组合参数  。这相当于将特征映射到一个k维空间,用向量关系表示特征关系:某种程度上来说,映射到k维空间上,相似的向量会有相似的性质。

  FM使用SGD训练模型,模型各个参数的梯度如下:

FM的优势:

  • 应对稀疏数据--用vector乘积表示权重使得没有观察到的数据也可以被表示;
  • 训练参数是线性的;
  • 预测时间是线性的.

4. FFM(Field-aware Factorization Machine)

  假设样本的n个特征属于f个field,那么FFM的二次项有nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。FM可以看做是FFM的特例,是把所有特征都归属到一个field时的FFM模型。根据FFM的field敏感特性,可以导出其模型方程。

其中,fj是第j个特征所属的field。如果隐向量的长度为k,那么FFM的二次参数有nfk个,远多于FM模型的nk个。此外,由于,隐向量与field相关,FFM二次项并不能化简,其预测复杂度是O(kn2)

举例:

这条记录可以编码成5个特征,其中“Genre=Comedy”和“Genre=Drama”属于同一个field,“Price”是数值型,不用one-hot编码转换。

那么,FFM的组合特征有10项,如下图所示:

其中,二次项共有n(n-1)/2=5*4/2=10个

5. 总结

  • Poly2:提供n个参数  ,n为特征数量;
  • FM:提供1个k维参数  ,与对方特征的k维参数  作内积当做权重;
  • FFM:提供m个k维参数  ,m为field的数量。也就是说,  会视和它组合的特征  属于哪个field来决定它使用哪一个k维向量参与内积计算。

参考文献:

【1】CTR预估[六]: Algorithm-Factorization Machine

【2】从FM推演各深度学习CTR预估模型(附代码)

【3】基于深度学习的CTR预估模型集合

【4】CTR预估[六]: Algorithm-Factorization Machine

LR、Poly2、FM、FFM的更多相关文章

  1. iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇

    完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...

  2. Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm

    目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...

  3. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

    相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868.shtml http://www.gxu.edu.cn/college ...

  4. Dotfuscator可以实现混淆代码、变量名修改、字符串加密

    C#编写的代码如果不进行一定程度的混淆和加密,那么是非常容易被反编译进行破解的,特别是对于一些商业用途的C#软件来说,因为盯着的人多,更是极易被攻破.使用VS自带的Dotfuscator可以实现混淆代 ...

  5. Linux搜索文件、文件夹数、文件个数命令

    1.查看某文件夹下文件的个数:ls -l|grep "^-"|wc -l 2.查看某文件夹下文件目录的个数:ls -l|grep "^d"|wc -l 3.查看 ...

  6. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)

    SSL.TLS协议格式.HTTPS通信过程.RDP SSL通信过程   相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868 ...

  7. 2016中国app年度排行榜:十大行业、25个领域、Top 500 和2017趋势预测

    本文为猎豹全球智库联合猎豹移动大数据平台libra.科技顶尖媒体36kr联合发布,如需转载必须在文章开头注明“来源:猎豹全球智库”和作者姓名,且不得更改或增删文中所有信息. 本文作者:猎豹全球智库 容 ...

  8. mysql索引之一:索引基础(B-Tree索引、哈希索引、聚簇索引、全文(Full-text)索引区别)(唯一索引、最左前缀索引、前缀索引、多列索引)

    没有索引时mysql是如何查询到数据的 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储10 ...

  9. Linux--6 redis订阅发布、持久化、集群cluster、nginx入门

    一.redis发布订阅 Redis 通过 PUBLISH .SUBSCRIBE 等命令实现了订阅与发布模式. 其实从Pub/Sub的机制来看,它更像是一个广播系统,多个Subscriber可以订阅多个 ...

  10. 1、VGG16 2、VGG19 3、ResNet50 4、Inception V3 5、Xception介绍——迁移学习

    ResNet, AlexNet, VGG, Inception: 理解各种各样的CNN架构 本文翻译自ResNet, AlexNet, VGG, Inception: Understanding va ...

随机推荐

  1. 文件下载报错:引发类型为“System.OutOfMemoryException”的异常-.Net 内存溢出

    CSDN:http://blog.csdn.net/huwei2003/article/details/53559272 设置了也没有用,于是想到手动清理应用程序池,但又迁配置问题于是改成最后的方式! ...

  2. 温故KMP算法

    最近由于某些原因,又回顾了一次KMP算法.上一次回顾KMP算法还是在刷题的时候遇到的: http://blog.csdn.net/dacc123/article/details/50994611 在我 ...

  3. TOP100summit:【分享实录-Microsoft】基于Kafka与Spark的实时大数据质量监控平台

    本篇文章内容来自2016年TOP100summit Microsoft资深产品经理邢国冬的案例分享.编辑:Cynthia 邢国冬(Tony Xing):Microsoft资深产品经理.负责微软应用与服 ...

  4. 一窥Spring Cloud Eureka

    在Spring Cloud中Eureka负责服务发现功能.服务发现需要解决如何找到服务提供者在网络中位置的问题. 服务端 在Spring Tool Suite的文件菜单中,点击新建Spring Sta ...

  5. 游标SQL Cursor 基本用法

    http://www.cnblogs.com/Gavinzhao/archive/2010/07/14/1777644.html 1 table1结构如下 2 id    int 3 name  va ...

  6. React组件中的key

    React组件中的key 一.key的作用 react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key props),而是给reac ...

  7. 超级有用的15个mysqlbinlog命令

    在MySQL或MariaDB中,任意时间对数据库所做的修改,都会被记录到日志文件中.例如,当你添加了一个新的表,或者更新了一条数据,这些事件都会被存储到二进制日志文件中.二进制日志文件在MySQL主从 ...

  8. Android+Tomcat通过http获取本机服务器资源

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  9. 转:JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

    原文地址:JVM 内存初学 (堆(heap).栈(stack)和方法区(method) ) 博主推荐 深入浅出JVM 这本书 先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap).栈( ...

  10. js禁用页面上右键菜单、选中和复制

    有时候我们不想页面上的内容被人复制走,那么就可以使用js对页面进行设置,禁止右键菜单.禁止选中.禁止复制等功能可以有效的达到这个效果,js代码如下所示: /** * 禁用右键菜单 */ documen ...