FM &FFM:深入理解FM与FFM「建议收藏」

FM &FFM:深入理解FM与FFM「建议收藏」0.引言针对类别变量进行oner-hot编码后的高维稀疏矩阵M,可以表示如下:可以看出,经过One-Hot编码之后,大部分样本数据特征是比较稀疏的,One-Hot编码的另一个特点就是导致特征空间大。例如,电影品类有550维特征,一个categorical特征转换为550维数值特征,特征空间剧增。同时通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关…

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

0.引言

针对类别变量进行oner-hot编码后的高维稀疏矩阵M,可以表示如下:

FM &FFM:深入理解FM与FFM「建议收藏」

可以看出,经过One-Hot编码之后,大部分样本数据特征是比较稀疏的, One-Hot编码的另一个特点就是导致特征空间大。例如,电影品类有550维特征,一个categorical特征转换为550维数值特征,特征空间剧增。

同时通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关性就会提高。例如,“USA”与“Thanksgiving”、“China”与“Chinese New Year”这样的关联特征,对用户的点击有着正向的影响。换句话说,来自“China”的用户很可能会在“Chinese New Year”有大量的浏览、购买行为,而在“Thanksgiving”却不会有特别的消费行为。这种关联特征与label的正向相关性在实际问题中是普遍存在的,如“化妆品”类商品与“女”性,“球类运动配件”的商品与“男”性,“电影票”的商品与“电影”品类偏好等。因此,引入两个特征的组合是非常有意义的。

多项式模型是包含特征组合的最直观的模型。在多项式模型中,特征 x_i和 x_j的组合采用 x_i_j表示,即x_ix_j都非零时,组合特征  x_i_j才有意义。从对比的角度,讨论二阶多项式模型。模型的表达式如下:

FM &FFM:深入理解FM与FFM「建议收藏」

其中,n 代表样本的特征数量,x_i是第i个特征的值,w_0,w_i,w_i_j 是模型参数。从公式可以看出,组合特征的参数一共有 C_{n}^{2} = n(n-1)/2 个,任意两个参数都是独立。然而,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数 w_i_j的训练需要大量 x_ix_j 都非零的样本;由于样本数据本来就比较稀疏,满足“x_ix_j 都非零”的样本将会非常少。训练样本的不足,很容易导致参数 w_i_j不准确,最终将严重影响模型的性能。

 

一、FM模型推导

 

1. 对于普通的线性模型,引入二次交叉项后:

FM &FFM:深入理解FM与FFM「建议收藏」

其中,w_0\in R,W\in R^n,V\in R^{n\times k}k为隐向量的维度,则两个向量的内积满足:

FM &FFM:深入理解FM与FFM「建议收藏」

该模型需要学习的参数包括:

  • w_0:模型整体的偏置;

  • w_i:一阶线性权重;

  • i和特征j交互权重

 针对等式(1)右端最后一项化简得:

FM &FFM:深入理解FM与FFM「建议收藏」

FM &FFM:深入理解FM与FFM「建议收藏」

FM &FFM:深入理解FM与FFM「建议收藏」

FM &FFM:深入理解FM与FFM「建议收藏」

所以公式(1)可以化简为:

FM &FFM:深入理解FM与FFM「建议收藏」

针对上式,利用SGD训练模型其参数的梯度下降表达式为:

FM &FFM:深入理解FM与FFM「建议收藏」

其中,FM &FFM:深入理解FM与FFM「建议收藏」是隐向量 FM &FFM:深入理解FM与FFM「建议收藏」的第 FM &FFM:深入理解FM与FFM「建议收藏」个元素。由于FM &FFM:深入理解FM与FFM「建议收藏」 只与FM &FFM:深入理解FM与FFM「建议收藏」有关,而与 j 无关,在每次迭代过程中,只需计算一次所有 FM &FFM:深入理解FM与FFM「建议收藏」FM &FFM:深入理解FM与FFM「建议收藏」,就能够方便地得到所有 FM &FFM:深入理解FM与FFM「建议收藏」的梯度。显然,计算所有 FM &FFM:深入理解FM与FFM「建议收藏」FM &FFM:深入理解FM与FFM「建议收藏」 的复杂度是 O(kn);已知FM &FFM:深入理解FM与FFM「建议收藏」时,计算每个参数梯度的复杂度是 O(1);得到梯度后,更新每个参数的复杂度是 O(1);模型参数一共有 nk+n+1 个。因此,FM参数训练的复杂度也是 O(kn)。综上可知,FM可以在线性时间训练和预测,是一种非常高效的模型。

 

2. FM & SVM讨论

  • 线性核SVM

FM &FFM:深入理解FM与FFM「建议收藏」

  可以看出等价于d=1时的FM。

  • 多项式核 SVM 

      非线性映射函数d=2

 

FM &FFM:深入理解FM与FFM「建议收藏」

       SVM的表达式为:

 

FM &FFM:深入理解FM与FFM「建议收藏」

        可以看出,SVM的二元特征交叉参数是独立的,而FM的二元特征交叉参数是两个k维的向量v_iv_j,交叉参数就不是独立的,而是相互影响的;

 

SUMMARY

  • 对于大型稀疏矩阵,SVM无法估计高阶交互特征的参数,因为对于特征对(i,j)的参数w_{ij}必须有足够的非零样本即FM &FFM:深入理解FM与FFM「建议收藏」只要存在某一个特征FM &FFM:深入理解FM与FFM「建议收藏」则wij参数估计失败,因此在大型稀疏样本情况下,SVM表现很差,而FM对大型稀疏数据非常有用。

  • FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行;

  • FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量;

FM参数初始化

FM &FFM:深入理解FM与FFM「建议收藏」

FM &FFM:深入理解FM与FFM「建议收藏」

可以看出:常数项和一次项初始化为零,二次项按照均值为0,方差为0.01的正态分布初始化。

 

FM数据格式

 

 

FM &FFM:深入理解FM与FFM「建议收藏」

  • For classification(binary/multiclass), <label> is an integer indicating the class label.

  • For regression, <label> is the target value which can be any real number.

  • Labels in the test file are only used to calculate accuracy or errors. If they are unknown, you can just fill the first column with any number.

FM &FFM:深入理解FM与FFM「建议收藏」

 

二、FFM

 假设一个广告分类的问题,根据用户和广告位相关的特征,预测用户是否点击了广告。源数据如下:
 

FM &FFM:深入理解FM与FFM「建议收藏」

“Clicked?“是label,Country、Day、Ad_type是特征。由于三种特征都是categorical类型的,需要经过独热编码(One-Hot Encoding)转换成数值型特征。

 

FM &FFM:深入理解FM与FFM「建议收藏」

         FFM(Field-aware Factorization Machine)最初的概念来自Yu-Chin Juan(阮毓钦,毕业于中国台湾大学,现在美国Criteo工作)与其比赛队员,是他们借鉴了来自Michael Jahrer的论文中的field概念提出了FM的升级版模型。
通过引入field的概念,FFM把相同性质的特征归于同一个field。以上面的广告分类为例,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中。同理,商品的末级品类编码生成了550个特征,这550个特征都是说明商品所属的品类,因此它们也可以放到同一个field中。简单来说,
同一个
cat
egorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等。在FFM中,每一维特征
FM &FFM:深入理解FM与FFM「建议收藏」,针对其它特征的每一种
field f
j,都会学习一个隐向量
FM &FFM:深入理解FM与FFM「建议收藏」。因此,隐向量不仅与特征相关,也与field相关。也就是说,“Day=26/11/15”这个特征与“Country”特征和“Ad_type”特征进行关联的时候使用不同的隐向量,这与“Country”和“Ad_type”的内在差异相符,也是FFM中“field-aware”的由来。

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

FM &FFM:深入理解FM与FFM「建议收藏」

 
        其中,fj是第 
j个特征所属的field。如果隐向量的长度为
k,那么FFM的二次参数有 nfk 个,远多于FM模型的
 nk个。此外,由于隐向量与field相关,
FFM二次项并不能够化简,其预测复杂度是 O(
kn
2
)
 
 
 
下面以一个例子简单说明FFM的特征组合方式。输入记录如下
 

FM &FFM:深入理解FM与FFM「建议收藏」

 
这条记录可以编码成5个特征,其中“Genre=Comedy”和“Genre=Drama”属于同一个field,“Price”是数值型,不用One-Hot编码转换。为了方便说明FFM的样本格式,我们将所有的特征和对应的field映射成整数编号。
 
 

FM &FFM:深入理解FM与FFM「建议收藏」

那么,FFM的组合特征有10项:
 

FM &FFM:深入理解FM与FFM「建议收藏」

 
 
FFM数据格式
 

FM &FFM:深入理解FM与FFM「建议收藏」

FM &FFM:深入理解FM与FFM「建议收藏」

 
在训练FFM的过程中,有许多小细节值得特别关注。
  • 样本归一化。FFM默认是进行样本数据的归一化,即 pa.normpa.norm 为真;若此参数设置为假,很容易造成数据inf溢出,进而引起梯度计算的nan错误。因此,样本层面的数据是推荐进行归一化的。
  • 特征归一化。CTR/CVR模型采用了多种类型的源特征,包括数值型和categorical类型等。但是,categorical类编码后的特征取值只有0或1,较大的数值型特征会造成样本归一化后categorical类生成特征的值非常小,没有区分性。例如,一条用户-商品记录,用户为“男”性,商品的销量是5000个(假设其它特征的值为零),那么归一化后特征“sex=male”(性别为男)的值略小于0.0002,而“volume”(销量)的值近似为1。特征“sex=male”在这个样本中的作用几乎可以忽略不计,这是相当不合理的。因此,将源数值型特征的值归一化到 [0,1]是非常必要的。
  • 省略零值特征。从FFM模型的表达式可以看出,零值特征对模型完全没有贡献。包含零值特征的一次项和组合项均为零,对于训练模型参数或者目标值预估是没有作用的。因此,可以省去零值特征,提高FFM模型训练和预测的速度,这也是稀疏样本采用FFM的显著优势。
 

 

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

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

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


相关推荐

  • ETL 开发相关

    ETL 开发相关ETL开发相关

    2022年6月10日
    32
  • nginx和apache的区别,选择哪个好?

    nginx和apache的区别,选择哪个好?Apache和Nginx最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;而nginx是异步的,多个连接(万级别)可以对应一个进程。下面本篇文章就来给大家介绍一下Apache和Nginx的区别有那些,选择哪个好?希望对你们有所帮助。一、Nginx特点  1、轻量级,采用C进行编写,同样的web服务,会占用更少的内存及资源。  2、抗并发,nginx以epollandkqueue作为开发模型,处理请求是异步非阻塞的,负载能力比apache高很多,而apache则.

    2022年5月24日
    35
  • intellij idea激活码多少钱(最新序列号破解)

    intellij idea激活码多少钱(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    52
  • information_schema.schemata_information theory

    information_schema.schemata_information theory1.INFORMATION_SCHEMA简介INFORMATION_SCHEMA提供对数据库元数据的访问,有关MySQL服务器信息,例如数据库或表的名称,列的数据类型或访问权限。INFORMATION_SCHEMA使用说明字符集注意事项INFORMATION_SCHEMA作为SHOW语句的替代INFORMATION_SCHEMA和特权性能注意事项1.1INFOR…

    2022年9月14日
    3
  • Mysql覆盖索引_mysql索引长度限制

    Mysql覆盖索引_mysql索引长度限制如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。只扫描索引而无需回表的优点:    1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。    2.因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。    3.一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作…

    2022年8月30日
    1
  • mysql 误清空表 恢复数据

    mysql 误清空表 恢复数据把今天一不小心把订单表清空,怎么恢复数据的记录下来首先mysql需要开启bin-log,我的是宝塔面板,默认开启接下来进入到宝塔的www/server/data控制台输入find/-namemysqlbinlog-print找到binlog地址然后软连到usr/binln-fs/www/server/mysql/bin/mysqlbinlog/usr…

    2022年5月27日
    30

发表回复

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

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