FM

FM即因子分解机,主要是针对logistic回归的改进,FM通过不同因子间的高阶组合构造了新的特征,增加了模型的非线性。

对于因子间的二阶组合,可以表示为:

y = w 1 ∗ x 1 + w 2 ∗ x 2 + . . . + w n ∗ x n + ∑ i , j w i , j ∗ x i , j y=w_{1}*x_{1}+w_{2}*x_{2}+...+w_{n}*x_{n}+\sum_{i,j}w_{i,j}*x_{i,j} y=w1x1+w2x2+...+wnxn+i,jwi,jxi,j

假设特征个数为n,特征间两两组合有 ( n ∗ n − n ) / 2 (n*n - n)/2 (nnn)/2 种组合,那么理论上就要学习到 ( n ∗ n − n ) / 2 (n*n - n)/2 nnn)/2个参数,当n比较大的时候,参数量会变得很大,比如当n=100时,参数个数为 (100*100 - 100)*2 = 4950。这样主要有两个问题,一个是参数量太多,一个是样本往往很稀疏,因为离散后的数据在大多数位置的取值都是0(比如手机类别变量,假设有5种类别,而每个用户一般只用一种手机,所以只会在一个位置取1其余4个位置都会取0)。 这样带来的问题就是参数往往无法学习。为了解决这样的问题,实质上参照SVD分解的思想即: A i , j = p i ∗ q j A_{i,j}=p_{i}*q_{j} Ai,j=piqj的方法,即将矩阵分解为两个低阶矩阵p,q,使得p,q的乘积近似等于原始矩阵。

即目标是找到一个nk维的矩阵g,满足 g i ∗ g j = W i , j g_{i}*g_{j}=W_{i,j} gigj=Wi,j,这样就由原来求 ( n ∗ n − n ) / 2 (n*n - n)/2 (nnn)/2个参数变为了求nk个参数的问题了,一般k远小于n,这样求解的参数个数就大大减少了。并且这样做也解决了原来的数据稀疏的问题。

此时可以表示为:

ϕ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j \phi (x)=w_{0} + \sum_{i=1}^{n}w_{i}x_{i} + \sum_{i=1}^{n-1}\sum_{j=i+1}^{n} \left \langle v_{i},v_{j} \right \rangle x_{i}x_{j} ϕ(x)=w0+i=1nwixi+i=1n1j=i+1nvi,vjxixj

可以改写为:
在这里插入图片描述
因此
在这里插入图片描述

这样,计算复杂度就从O(kn2)降低到了O(kn)。

损失函数采用交叉熵损失函数,即:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果考虑到和不同的field中的feature交互时,latent vector参数的值不同,即一个特征对于每个field都维护一个latent vector。这样FM就变成了FFM,此时参数的个数变成了nkfield_num。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值