【机器学习】因子分解机(Factorization Machine)原理与java实现
因子分解机(Factorization Machine)与 Logistic Regression算法和 Softmax Regression算法一样,都是基于概率的机器学习算法。不同的是,LR算法适用于线性二分类问题,SR算法适用于线性多分类问题,FM算法适用于非线性二分类问题。因为在因子分解机模型中,不仅包含了每个特征的线性权重,也包含了非线性的交叉项,利用矩阵分解的方法构造两个不同特征之间的相互关系(参考资料1)。
1、因子分解机原理
1.1、分离超平面
如上所述,因子分解机的分离超平面是非线性的,分离超平面公式有两部分组成,第一部分与Logistic Regression算法相同,第二部分是非线性的交叉项与对应的两个不同样本特征乘积的和。假设样本( { ( X 1 , y 1 ) , ( X 2 , y 2 ) , ⋯   , ( X n , y n ) } \left\{ {\left( { {X_1},{y_1}} \right),\left( { {X_2},{y_2}} \right), \cdots ,\left( { {X_n},{y_n}} \right)} \right\} { (X1,y1),(X2,y2),⋯,(Xn,yn)})个数为 n n n,样本的特征个数为 m m m,则分离超平面为:
b + ∑ i = 1 m w i x i + ∑ i = 1 m − 1 ∑ j = i + 1 m ⟨ V i , V j ⟩ x i x j = 0 b + \sum\limits_{i = 1}^m { {w_i}{x_i} + \sum\limits_{i = 1}^{m - 1} {\sum\limits_{j = i + 1}^m {\left\langle { {V_i},{V_j}} \right\rangle {x_i}{x_j}} } } = 0 b+i=1∑mwixi+i=1∑m−1j=i+1∑m⟨Vi,Vj⟩xixj=0
假设系数矩阵为 V V V,其维度为 m × k m \times k m×k, k k k是需要提前设定的模型超参数。系数矩阵中的每一行对应着一个样本特征, ⟨ V i , V j ⟩ {\left\langle { {V_i},{V_j}} \right\rangle } ⟨Vi,Vj⟩表示特征 x i x_i xi与 x j x_j xj之间的相互关系。
对于每一个特征 X i X_i Xi引入一个系数向量 V i = ( v i , 1 , v i , 2 , ⋯   , v i , k ) {V_i} = \left( {
{v_{i,1}},{v_{i,2}}, \cdots ,{v_{i,k}}} \right) Vi=(vi,1,vi,2,⋯,vi,k)。
系数矩阵为: V = [ v 1 , 1 v 2 , 1 ⋮ v m , 1 v 1 , 2 v 2 , 2 ⋮ v m , 2 ⋯ ⋯ ⋱ ⋯ v 1 , k v 2 , k ⋮ v m . k ] V = \left[ {\begin{array}{} {\begin{array}{} {
{v_{1,1}}} \\ {
{v_{2,1}}} \\ \vdots \\ {
{v_{m,1}}} \end{array}}&{\begin{array}{} {
{v_{1,2}}} \\ {
{v_{2,2}}} \\ \vdots \\ {
{v_{m,2}}} \end{array}}&{\begin{array}{} {\begin{array}{} \cdots \\ \cdots \\ \ddots \\ \cdots \end{array}}&{\begin{array}{} {
{v_{1,k}}} \\ {
{v_{2,k}}} \\ \vdots \\ {
{v_{m.k}}} \end{array}} \end{array}} \end{array}} \right] V=⎣⎢⎢⎢⎡v1,1v2,1⋮