机器学习面试必知:推荐算法FM

传统的线性模型如LR中,每个特征都是独立的,如果需要特征与特征直接的交互作用,需要人工对特征进行交叉组合,例如核方法。但是在特征高度稀疏的情况下,并不能很好地进行学习。
很多分解模型Factorization model如矩阵分解MF,SVD++等,这些模型可以学习到特征之间的交互隐藏关系,但是每个模型都只适用于特定的输入和场景。
因此,在高度稀疏的数据场景下推荐系统FM(Factorization Machine)出现了。

FM模型目标函数 y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j y(x)=w_{0}+\sum_{i=1}^{n}w_{i}x_{i}+\sum_{i=1}^{n}\sum_{j=i+1}^{n}<v_{i},v_{j}>x_{i}x_{j} y(x)=w0+i=1nwixi+i=1nj=i+1n<vi,vj>xixj < v i , v j > <v_{i},v_{j}> <vi,vj>是输入特征i,j之间的交叉参数, v i 和 v j v_{i}和v_{j} vivj都是k维向量。

模型的计算复杂度O(kn) ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j \sum_{i=1}^{n}\sum_{j=i+1}^{n}<v_{i},v_{j}>x_{i}x_{j} i=1nj=i+1n<vi,vj>xixj = 1 2 ∑ i = 1 n ∑ j = 1 n < v i , v j > x i x j − 1 2 ∑ i = 1 n < v i , v i > x i x i =\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}<v_{i},v_{j}>x_{i}x_{j}-\frac{1}{2}\sum_{i=1}^{n}<v_{i},v_{i}>x_{i}x_{i} =21i=1nj=1n<vi,vj>xixj21i=1n<vi,vi>xixi = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k v i , f v j , f x i x j − ∑ i = 1 n ∑ f = 1 k v i , f v i , f x i x i ) =\frac{1}{2}(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{f=1}^{k}v_{i,f}v_{j,f}x_{i}x_{j}-\sum_{i=1}^{n}\sum_{f=1}^{k}v_{i,f}v_{i,f}x_{i}x_{i}) =21(i=1nj=1nf=1kvi,fvj,fxixji=1nf=1kvi,fvi,fxixi) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i , f x i ) 2 − ∑ i = 1 n v i , f 2 x i 2 ) =\frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}v_{i,f}x_{i})^{2}-\sum_{i=1}^{n}v_{i,f}^{2}x_{i}^{2}) =21f=1k((i=1nvi,fxi)2i=1nvi,f2xi2)

模型的应用

  • 回归模型,损失函数可以采用最小均方误差
  • 分类模型,损失函数可以采用hinge loss或者logit loss 或者softmax loss
  • 排序模型, 损失函数可以采用维pairwise loss

模型的学习
FM模型的w和v更新可以通过随机梯度下降法SGD进行

与多项式核SVM的区别
多项式核SVM y ( x ) = w 0 + 2 ∑ i = 1 n w i x i + ∑ i = 1 n w i , i 2 x i 2 + 2 ∑ i = 1 n ∑ j = i + 1 n w i , j 2 x i x j y(x)=w_{0}+\sqrt{2}\sum_{i=1}^{n}w_{i}x_{i}+\sum_{i=1}^{n}w_{i,i}^{2}x_{i}^{2}+\sqrt{2}\sum_{i=1}^{n}\sum_{j=i+1}^{n}w_{i,j}^{2}x_{i}x_{j} y(x)=w0+2 i=1nwixi+i=1nwi,i2xi2+2 i=1nj=i+1nwi,j2xixj可以看到虽然和FM模型的表达式很相似。区别在于SVM的二元特征交叉参数是独立的(比如 w i , j w_{i,j} wi,j),而FM中的 < v i , v j > 和 < v i , v k > <v_{i},v_{j}>和<v_{i},v_{k}> <vi,vj><vi,vk>不是独立的,而是相互影响的。
多项式SVM,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数为0,这样的话对于测试集上的情况而言就失去了意义。因此在稀疏的条件下,共现很难,整体性能表现不佳。而FM通过向量化的交叉,可以学习到不同特征之间的交互,进而提取到更深层次的抽象意义。
另外的区别还体现在

  1. FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常在对偶形式下进行
  2. FM的模型预测是与训练样本独立的,而SVM与部分训练样本有关即支持向量

你可能感兴趣的:(机器学习,面试)