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

目录

1 FFM原理

2 基于FFM的逻辑回归模型

2.1 损失的逻辑回归模型

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

2.3 示例


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

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

1 FFM原理

通过引入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敏感特性,可以导出其模型方程。

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

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

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

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

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个。

2 基于FFM的逻辑回归模型

2.1 损失的逻辑回归模型

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

损失函数:

损失函数求导:

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

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

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

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

2.3 示例

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

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

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

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

方式1:

方式2:

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

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

猜你喜欢

转载自blog.csdn.net/weixin_39910711/article/details/82228187
今日推荐