Factorization Machine 学习笔记

FM 的 优点:

  1. 解决了特征稀疏的问题,能在非常系数数据的情况下进行预估。
  2. 解决了特征组合的问题,研究了特征与特征之间的向量,不像LR线性回归那样没有组合
  3. FM使一个通用模型,适用于大部分场景,而其他因式分解模型只能用于一些输入数据比较固定的情况
  4. 训练速度快,线性复杂度是线性的,优化效果很好

一般的线性回归:
Factorization Machine 学习笔记
考虑了特征组合:
Factorization Machine 学习笔记
缺点:复杂度太高,复杂度n^2,wij只能在xi,xj不同时为0的情况下训练,特征稀疏的情况下,大多数情况下xi,xj大多数情况下为0,训练不充分

FM的推导:
引入一个变量ViV_i,让ViV_i等于
Vi=(vi1,vi2,vi3,...,vik)T V_i = (v_{i1},v_{i2},v_{i3},...,v_{ik})^T
所以当 i =1或者n时:
V1=(v11,v12,v13,...,v1k)T V_1 = (v_{11},v_{12},v_{13},...,v_{1k})^T
Vn=(vn1,vn2,vn3,...,vnk)T V_n = (v_{n1},v_{n2},v_{n3},...,v_{nk})^T
已知wijw_{ij}可以组成一个矩阵:
W=[w11w12...w1nw21w22...w2nwn1wn2...wnn]nn W = \begin{bmatrix} w_{11} & w_{12}& ... & w_{1n}\\ w_{21} & w_{22}& ... & w_{2n}\\ \vdots & \vdots& \ddots & \vdots\\ w_{n1} & w_{n2}& ...& w_{nn} \end{bmatrix} _{nn}
ViV_i组成一个矩阵VV
V=[V1TV2T VnT]=[v11v12...v1kv21v22...v2kvn1vn2...vnk]nk V = \begin{bmatrix} {V_{1}}^T\\ {V_{2}}^T\\\ \vdots\\ {V_{n}}^T\\ \end{bmatrix} = \begin{bmatrix} v_{11} & v_{12}& ... & v_{1k}\\ v_{21} & v_{22}& ... & v_{2k}\\ \vdots & \vdots& \ddots & \vdots\\ v_{n1} & v_{n2}& ...& v_{nk} \end{bmatrix} _{nk}
所以可以有VVT=WVV^T = W

所以可以得到一个FM的推导公式:
Factorization Machine 学习笔记
其中,点积可以写成
Factorization Machine 学习笔记
所以原公式又可以写成
Factorization Machine 学习笔记
Factorization Machine 学习笔记
复杂度只n, k有关,所以这个FM的复杂度是nk,是线性复杂度,相对较小

拓展,FFM