目录

1 FFM算法来源

2 举例说明FFM算法的细节

3 基于FFM的逻辑回归模型

3.1 损失的逻辑回归模型

3.2 ∅(w,xp)的求导过程

3.3 示例

4 优化方法:Bi-FFM算法


1 FFM算法来源

FFM(Field-aware Factorization Machine)算法是FM(Factorization Machine)算法的升级版,FM算法的公式如下:

        其中:样本  是 n 维向量, [公式] 是第 [公式] 个维度上的值。 [公式] 是 [公式] 对应的长度为 [公式] 的隐向量。

FFM则是将隐向量  又进一步细化,引入 field 概念,将特征所在的不同的 field 这个信息也考虑进去。

通过引入field的概念,FFM相同性质的特征归于同一个field

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

Clicked? Country Day Ad_type
1 USA 26/11/15 Movie
0 China 1/7/14 Game
1 China 19/2/15 Game

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

Clicked? Country=USA Country=China Day=26/11/15 Day=1/7/14 Day=19/2/15 Ad_type=Movie Ad_type=Game
1 1 0 1 0 0 1 0
0 0 1 0 1 0 0 1
1 0 1 0 0 1 0 1

以上面的广告分类为例,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中。同理,商品的末级品类编码生成了550个特征,这550个特征都是说明商品所属的品类,因此它们也可以放到同一个field中。简单来说,同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等。在FFM中,每一维特征 xi,针对其它特征的每一种field fj,都会学习一个隐向量 vi,fj。因此,隐向量不仅与特征相关,也与field相关。也就是说,“Day=26/11/15”这个特征与“Country”特征和“Ad_type"特征进行关联的时候使用不同的隐向量,这与“Country”和“Ad_type”的内在差异相符,也是FFM中“field-aware”的由来。

假设样本的 n个特征属于 field,那么FFM的二次项有 nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。

FM可以看作FFM的特例,是把所有特征都归属到一个field时的FFM模型。根据FFM的field敏感特性,可以导出其模型方程。

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

FFM与FM的区别在于隐向量由原来的  变成了,这意味着每个特征对应的不是唯一的一个隐向量,而是一组隐向量。当 [公式] 特征与 [公式] 特征进行交叉时, [公式] 特征会从 [公式] 的一组隐向量中选择出与特征 [公式] 的域 [公式] 对应的隐向量 [公式] 进行交叉。同理, [公式] 也会选择与 [公式] 的域 [公式] 对应的隐向量 [公式] 进行交叉。

举例说明FFM算法的细节

下面以一个例子简单说明FFM的特征组合方式[9]。输入记录如下

User Movie Genre Price
YuChin 3Idiots Comedy, Drama $9.99

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

此示例中一共有4个fields,5个features,细节如下:

Field name Field index Feature name Feature index
User 1 User=YuChin 1
Movie 2 Movie=3Idiots 2
Genre 3 Genre=Comedy 3
Price 4 Genre=Drama 4
Price 5

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

其中,红色是field编号,蓝色是特征编号,绿色是此样本的特征取值。二次项的系数是通过与特征field相关的隐向量点积得到的,二次项共有 n(n−1)/2个。

3 基于FFM的逻辑回归模型

3.1 损失的逻辑回归模型

将域分解机模型写成如下形式:

损失函数:

损失函数求导:

3.2 ∅(w,xp)的求导过程

为了便于理解首先对中的分别的偏导数如下:

训练模型时需要注意的问题:在式(12)和式(13)中会存在

在训练时不需要合并这些项,只要把这些项当成更新参数多个样本即可,这在编程实现中将非常有用。

3.3 示例

假设有如下的例子,五个特征两个域

按照式(7),去掉下标p,计算图1中所示的分解模型,如下

从上式中抽取i=1,fj=1和i=3,fj=2

在模型学习时,需要迭代公式分别为学习率和梯度向量,则在计算时有两种方式:

方式1:

方式2:

因为采用的是AdaGrad所以学习率η在方式二中是变化的。

在学习过程中是采用方式2。因为在计算实际问题时可能特征分布在多个域中,如果按照方式1则需要把每个域中的信息累加起来,结果是编程上非常麻烦,如果按照方式2,非常符合SGD的思想,把看成两个样本,再带回到组合时更新下,当访问到组合时再次更新下,在实际编程中,具体更新哪些参数可以通过相应的索引进行访问,非常方便。

优化方法:Bi-FFM算法

对于FFM的某个特征来说,会构造出  个隐向量,与其他的  个 fields组合的时候分别使用。FFM有什么特点呢?相对FM来说,参数量扩大了 [公式] 倍,效果自然也比FM好,但是要想把它用到现实场景中是有问题的,参数量太大导致特别耗内存、训练速度慢,所以微博团队改进了一个新模型,双线性FFM算法(Bi-FFM)。

Bi-FFM二阶表达式如下:

图形表示如下:

Bi-FFM的思想:  分别使用一个隐向量来表达,但是把两个特征交互的信息用一个共享参数矩阵表示。关于共享矩阵  ,给出了三种形式:

  • (1)共享同一个  ,这是参数量最小的一种形式。  的参数量是 [公式] , [公式] 是特征Embedding的size;
  • (2)每个field共享一个,即每个field各自学各自的  ;
  • (3)每两个fields对共享一个,能更加细化地描述特征组合;

FFM与Bi-FFM的参数量比较:

改进的Bi-FFM,它的参数量跟FFM相比是什么情况?如果用Criteo这个4500万的数据集,它有230万个特征,39个Fields,假设Embedding size是10。如果用FFM就会有8.97亿的参数量。Bi-FFM的FM部分是大概2300万的参数,在三个改进版共享矩阵  中,类型(1)100个参数;类型(2)3900个参数;类型(3)15万参数。与FFM相比,参数差了38倍,但性能两者是相当的,这就是Bi-FFM的价值所在。

美团技术团队:https://tech.meituan.com/deep_understanding_of_ffm_principles_and_practices.html

https://blog.csdn.net/zc02051126/article/details/54614230

FFM算法原理及Bi-FFM算法实现:https://zhuanlan.zhihu.com/p/145928996

机器学习算法(三):FFM(Field-aware Factorization Machine)(域分解机模型)相关推荐

  1. ML之回归预测:利用两种机器学习算法(LiR,XGBoost(调优+重要性可视化+特征选择模型))对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值

    ML之回归预测:利用两种机器学习算法(LiR,XGBoost(调优+重要性可视化+特征选择模型))对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值 目录 输出结果 1. ...

  2. 【机器学习算法】支持向量机(support Vector Machine,SVM)

    目录 支持向量机 支持向量机概述 线性可分及线性不可分的问题 线性可分的支持向量机 线性不可分的支持向量机 支持向量机与神经网络之间的关系 处理两类以上的分类问题. 我的主页:晴天qt01的博客_CS ...

  3. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  4. 机器学习算法(二十六):文本表示模型

    目录 1 词袋模型 2 TF-IDF 2.1 TF(Term Frequency) 2.2 IDF(Inverse Document Frequency) 2.3 TF-IDF 2.4 用scikit ...

  5. Machine Learning:如何选择机器学习算法?

    2019独角兽企业重金招聘Python工程师标准>>> Machine Learning Algorithms Overview 关于目前最流行的一些机器学习算法,建议阅读: Mac ...

  6. 人工智障学习笔记——机器学习(7)FM/FFM

    一.概念 FM(分解机模型)和FFM(基于域的分解机模型)是最近几年提出的模型,主要用于预估CTR/CVR,凭借其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果的特性,屡次在各大公司 ...

  7. 机器学习算法如何应用于控制_将机器学习算法应用于NBA MVP数据

    机器学习算法如何应用于控制 A step-by-step tutorial in R R中的分步教程 1引言 (1 Introduction) This blog makes up the Machi ...

  8. [量化学院]价值选股策略——基于机器学习算法

    文献回顾 回顾价值策略 价值策略通俗地讲就是买入便宜股票,卖出昂贵股票,思想非常简单和直观.但是实际操作上这非常困难,因为我们没办法直接观察股票的真实价值.投资者可以从不同的视角采用不同的指标来估计股 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

最新文章

  1. datetime处理日期和时间
  2. ASP.NET Core分布式项目实战(集成ASP.NETCore Identity)--学习笔记
  3. 漫谈高数——泰勒级数的物理意义
  4. 2017.5.15 项链工厂 思考记录
  5. JVM 虚拟机类加载过程和双亲委派机制
  6. android水印添加水印,android 增加背景文字 水印效果(仿钉钉)
  7. linux32-bit是什么意思,怎么查看LINUX系统是32bit还是64bit
  8. 16/32/64位平台下char、short、int、long、指针等类型分别占多少字节,操作系统可以使用的最大内存空间为多大?
  9. 2020年Gartner新兴技术成熟度曲线,AI持续增强
  10. processing python mode - 01
  11. uniapp实现苹果支付流程
  12. Android 10.0SystemUI下拉状态栏隐藏下拉快捷开关两种方法
  13. Mac解压缩rar文件
  14. 教育行业crm管理解决方案 - whale帷幄
  15. 嵌入式产品测试工装——ETest
  16. layui js 自定义打印功能实现
  17. java 20008年月历输出 日期的个位与星期数相等 的日子
  18. 详解SVD(奇异值分解)
  19. CNN网络结构理解:感受野计算方法
  20. 双目视觉测量系统在不同纵向距离中测量精度比对实验

热门文章

  1. 有关军旅人生励志语录
  2. delphi 获取硬盘序列号
  3. 第二届中国SaaS产业峰会-深圳站——挖掘SaaS的深度价值
  4. Java List Stream 排序
  5. FTP上传文件速度太慢怎么办?
  6. 3个躺着赚钱的神仙副业
  7. P2892 [NOI2007] 追捕盗贼
  8. group by和聚合函数
  9. Code.V光学设计学习(五)——变焦和多重结构
  10. [案例分析]一汽高工离职后揭示的中国汽车业绝对内幕!(转)