FM的特点:
- 针对稀疏数据也能有效估计;
- FM复杂度是线性的,计算快;
- 对数据数据没有严格的要求,任意的实数向量都可以。
FM详细介绍
FM,作为线性回归的拓展,能够挖掘特征与特征之间的联系。
大家都知道,线性回归的方程为
y=w_0+\sum_{i=1}^{n}w_ix_i
其中:n是特征维度,w是特征的权重。
度为2的FM的方程为:
y=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}\langle \textbf v_i,\textbf v_j\rangle x_ix_j
其中:
w_0 ∈\mathbb R, w∈\mathbb R^n, V∈\mathbb R^{n×k}
V=\left\{ \begin{matrix} \textbf v_1\\\textbf v_2\\\textbf v_3\\...\\\textbf v_n \end{matrix} \right\}
\langle \textbf v_i,\textbf v_j\rangle表示两个向量的点积,结果是一个值,表示x_i与x_j的组合特征权重大小。对于n个特征,总共有n个行向量\textbf v_i,这些向量组成了V。
这里可以看见x_i与x_j的交互特征通过向量v_i与v_j来表示,这里有一个问题,为什么要用向量来表示这些交互特征而不通过一个值w_{ij}来描述呢?
这里涉及到了FM的关键思想:只用一个值w_{ij}来描述交互特征,如果训练数据中针对两个特征x_i与x_j,没有同时非0的数据,那么x_ix_j一直等于0,导致w_{ij}一直为0,无法更新。而用向量v_i与v_j来表示交互特征的权重,这两个向量在其他特征更新时会同时更新。v_i揭示了第i个特征的内在属性,如果特征i与特征j在其他特征上有关联,反映到向量v_i与v_j上,在计算两者的关系就十分的清楚了。
时间复杂度
原始的FM时间复杂度为O(kn^2),通过简单的变换,能将复杂度降低到O(kn),而且对于稀疏特征矩阵来说,复杂度可以降低到O(k\overline{m_D}),其中\overline{m_D}$是所有特征非零数量的平均数。
度为d的FM公式
公式如下:
其时间复杂度为O(kn^d),也能化简到线性时间。
FM的分布式计算
分布式计算与LR类似,首先按样本求wx规约求和,然后按特征规约求梯度即可。