FM在特征组合中的应用

Posted cxt618

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FM在特征组合中的应用相关的知识,希望对你有一定的参考价值。

原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun

 特征组合

  x1年龄 x2北京 x3上海 x4深圳 x5男 x6女
用户1 23 1 0 0 1 0
用户2 31 0 0 1 0 1

 如上例特征X有6个维度,年龄是连续值,城市和性别用one-hot表示,假设我们用最简单的线性拟合来预测y值。

$\\hat{y}=w_0+\\sum_{i=1}^n{w_ix_i}$

实际中“北京的男性用户”、“上海的女性用户”这种组合特征可能是有用的,即 $x_i,x_j$( $x_i,x_j$ 都是one-hot特征)同时为1时可能是一个很有用的特征,这种组合特征是 $x_i$ 和 $x_j$ 的线性组合所无法表示的。这样一来乘积 $x_i$ 就成一个新的特征。为了不错过任何一个这种可能有用的组合特征,我们穷举所有的i,j组合,把 $x_ix_j, 1\\le{i}\\le{n}, i<j\\le{n}$  都加到特征里面去,即使其中某些 $x_i$ 不是one-hot特征或者某些 $x_ix_j$  不是有用的特征,都没关系,经过大量样本的训练,模型会把那些无用的特征的系数训练为0。

Factorization Machines 

由于二次项系数$w_{ij}$,我们额外引入$\\frac{n^2}{2}$个参数需要训练。有没有什么办法可以减少参数?再来观察二次项系数矩阵$W_{n\\times n}$,它是对称的方阵$w_{ij}=w_{ji}$,同时它是稀疏的,因为绝大部分的组合特征都是无用的,所以其系数应该为0。可以对$W_{n\\times n}$进行矩阵分解$W_{n\\times n}=V_{n\\times k}V_{n\\times k}^T$,即$w_{i,j}=<v_i,v_j>$。其中$k\\ll n$,本来需要训练的n×n个参数,现在只需要训练n×k个。

$\\hat{y}=w_0+\\sum_{i=1}^n{w_ix_i}+\\sum_i^n{\\sum_{j=i+1}^n{<v_i,v_j>x_ix_j}}$
$<v_i,v_j>=\\sum_{f=1}^k{v_{if}v_{jf}}$

根据x计算$\\hat{y}$的时间复杂度是$O(kn^2)$

以上是关于FM在特征组合中的应用的主要内容,如果未能解决你的问题,请参考以下文章

论文研读1.0 基于神经网络与因子分解机的点击率预估应用研究(陈检)

FM(Factorization Machines)模型详解

推荐系统系列:FM理论与实践

FM(Factorization Machines)

FM算法解析及Python实现

DeepFM算法解析及Python实现