FM算法原理

FM演变过程:线性模型->二项式模型->FM模型

  • 线性模型
    f ( x ) = ω 0 + ω 1 x 1 + ω 2 x 2 + . . . + ω n x n = ω 0 + ∑ i = 1 n ω i x i f(x) = \omega_0+\omega_1x_1+\omega_2x_2+...+\omega_nx_n=\omega_0+\sum_{i=1}^n{\omega_ix_i} f(x)=ω0+ω1x1+ω2x2+...+ωnxn=ω0+i=1nωixi

  • 二项式模型
    f ( x ) = ω 0 + ∑ i = 1 n ω i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n ω i j x i x j f(x)=\omega_0+\sum_{i=1}^n\omega_ix_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^n\omega_{ij}x_ix_j f(x)=ω0+i=1nωixi+i=1n1j=i+1nωijxixj
    考虑了任意2个特征分量之间的关系

但是,训练 ω i j \omega_{ij} ωij参数需要 x i x_i xi x j x_j xj同时不为0,但在特征非常稀疏的情况下,满足条件的样本数量特别少,所以该参数不能得到足够的训练,不准确。FM基于二项式模型做了改进

  • FM模型
    目标是要求 ω i j \omega_{ij} ωij,也就是:

W = ( ω 11 ω 12 . . . ω 1 n ω 21 ω 22 . . . ω 2 n ⋮ ⋮ ⋱ ⋮ ω n 1 ω n 2 . . . ω n n ) n × n W=\begin{pmatrix} \omega_{11} & \omega_{12}& ... &\omega_{1n}\\ \omega_{21} & \omega_{22}& ... &\omega_{2n}\\ \vdots &\vdots &\ddots & \vdots \\ \omega_{n1} & \omega_{n2}& ... &\omega_{nn}\\ \end{pmatrix}_{n\times n} W=ω11ω21ωn1ω12ω22ωn2.........ω1nω2nωnnn×n

引入隐变量:

为每个特征维度 x i x_i xi引进辅助向量:
V i = ( v i 1 , v i 2 , v i 3 , . . . , v i k ) T ∈ R k , i = 1 , 2 , 3 , . . . , n V_i = (v_{i1},v_{i2},v_{i3},...,v_{ik})^T\in \mathbb R^k, i=1,2,3,...,n Vi=(vi1,vi2,vi3,...,vik)TRk,i=1,2,3,...,n

V = ( v 11 v 12 . . . v 1 k v 21 v 22 . . . v 2 k ⋮ ⋮ ⋱ ⋮ v n 1 v n 2 . . . v n k ) n × k = ( V 1 T V 2 T ⋯ V n T ) V=\begin{pmatrix} v_{11} & v_{12}& ... &v_{1k} \\ v_{21} & v_{22}& ... &v_{2k} \\ \vdots &\vdots &\ddots &\vdots\\ v_{n1} & v_{n2}& ... &v_{nk} \\ \end{pmatrix}_{n\times k}=\begin{pmatrix} V_1^T\\ V_2^T\\ \cdots \\ V_n^T\\ \end{pmatrix} V=v11v21vn1v12v22vn2.........v1kv2kvnkn×k=V1TV2TVnT

V V T = W VV^T = W VVT=W 也就是转换为求 V V V

FM模型即为:
$f(x) = \omega_0+\sum_{i=1}n\omega_ix_i+\sum_{i=1}{n-1}\sum_{j=i+1}n(V_iTV_j)x_ix_j $

v i v_i vi对应 x i x_i xi的k维embedding表示,FM可进一步表示为:
f ( x ) = ω 0 + ∑ i = 1 n ω i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n &lt; v i , v j &gt; x i x j f(x) = \omega_0+\sum_{i=1}^n\omega_ix_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^n&lt;v_i,v_j&gt;x_ix_j f(x)=ω0+i=1nωixi+i=1n1j=i+1n<vi,vj>xixj

其中:

∑ i = 1 n − 1 ∑ j = i + 1 n x i x j = 1 2 [ ( ∑ i = 1 n x i ) 2 − ∑ i = 1 n ( x i 2 ) ] \sum_{i=1}^{n-1}\sum_{j=i+1}^nx_ix_j = \frac{1}{2}[(\sum_{i=1}^nx_i)^2 - \sum_{i=1}^n(x_i^2)] i=1n1j=i+1nxixj=21[(i=1nxi)2i=1n(xi2)]

∑ i = 1 n − 1 ∑ j = i + 1 n &lt; v i , v j &gt; x i x j = 1 2 ∑ j = 1 k [ ∑ i = 1 n ( v i , j x i ) 2 − ∑ i = 1 n ( v i , i 2 x i 2 ) ] \sum_{i=1}^{n-1}\sum_{j=i+1}^n&lt;v_i,v_j&gt;x_ix_j = \frac{1}{2}\sum_{j=1}^k[\sum_{i=1}^n(v_{i,j}x_i)^2 - \sum_{i=1}^n(v_{i,i}^2x_i^2)] i=1n1j=i+1n<vi,vj>xixj=21j=1k[i=1n(vi,jxi)2i=1n(vi,i2xi2)]
(详细推导过程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值