FM是机器学习中的一种类似于SVM的算法模型,常用于高维稀疏的数据中。相比SVM中的多项式核,其同样可以捕捉数据中不同变量之间的作用关系。但是相比SVM,它具有如下几个优点: 1、FM允许在非常稀疏的数据下进行参数估计,SVM不行。2、FM具有线性复杂度,可以在原始状态下进行优化,不依赖于支持向量,比如SVMs。3、FMs是一种适用于任意实值特征向量的通用预测器。而其他的一些对于数据有限制。
首先,我们给出FM在二维下的模型方程:
ŷ (x):=w0+∑i=1nwixi+∑i=1n∑j=i+1n⟨vi,vj⟩xixj 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
其中我们需要对参数
w0∈ℝ,w∈ℝn,V∈ℝn×k w 0 ∈ R , w ∈ R n , V ∈ R n × k 进行估计。
⟨⋅,⋅⟩ ⟨ ⋅ , ⋅ ⟩ 表示向量的内积:
⟨vi,vj⟩:=∑f=1kvi,f⋅vj,f ⟨ v i , v j ⟩ := ∑ f = 1 k v i , f ⋅ v j , f
这里的k是超参数,表示矩阵分解后的维数。这里引入额外的向量
v v 构成权重矩阵V。然后用内积
ŵ i,j:=⟨vi,vj⟩ w ^ i , j := ⟨ v i , v j ⟩ 来表征第i和j个变量之间的作用关系。而不是单纯的使用权重
wi,j w i , j ,因为它在稀疏数据的情况下存在一个很大的缺陷,即在对于观察样本中未出现交互的特征分量,不能对相应的参数进行估计。而用这矩阵分解这种方式可以使得FM在高维稀疏数据下也能具有很好的参数估计。我们知道对于正定矩阵W, 存在矩阵V使得
W=V⋅Vt W = V ⋅ V t ,这使得FM可以表示任意作用矩阵W当k足够大时。但是一般k比较小,因为没有足够的数据用于估计复杂的作用矩阵W。限制k的值使用FM来表示可以使模型具有更好的泛化以及提高稀疏下的相互作用。
在稀疏数据下,通常没有足够的数据用来直接估计变量之间的相互作用。FM通过对变量之间相互作用的权重矩阵进行分解来分离其独立性达到对于有效估计的目的。比如:对于两个变量
xa,xb x a , x b ,通常如果找不到使得二者同时不为0的样本,那么我们可能会说二者之间的相互作用为0,但是通过FM分解后的作用参数
⟨va,vb⟩ ⟨ v a , v b ⟩ 可以用来估计。
另外,我们来说明一下FM的计算可以是线性时间 O(kn) O ( k n ) 的。最初的式子我们可以看到是 O(kn2) O ( k n 2 ) 的, 现在我们对其进行一些变换:
====∑i=1n∑j=i+1n⟨vi,vj⟩xixj12∑i=1n∑j=1n⟨vi,vj⟩xixj−12∑i=1n⟨vi,vi⟩xixi12(∑i=1n∑j=1n∑f=1kvi,fvj,fxixj−∑i=1n∑f=1kvi,fvi,fxixi)12∑f=1k((∑i=1nvi,fxi)(∑j=1nvj,fxj)−∑i=1nv2i,fx2i)12∑f=1k((∑i=1nvi,fxi)2−∑i=1nv2i,fx2i) ∑ i = 1 n ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j = 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 = 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 ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i , f x i ) ( ∑ j = 1 n v j , f x j ) − ∑ i = 1 n v i , f 2 x i 2 ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i , f x i ) 2 − ∑ i = 1 n v i , f 2 x i 2 )
FFM
FFM模型是在FM特征组合的基础上给特征加上了field属性,于是模型表示为:
ŷ (x):=w0+∑i=1nwixi+∑i=1n∑j=i+1n⟨vi,fj,vj,fi⟩xixj y ^ ( x ) := w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n ⟨ v i , f j , v j , f i ⟩ x i x j
其中
fi f i 表示特征i所属的field,需要训练的V为n×k×f, f为field的个数,由于FFM加入field,使得训练和预测过程参数计算不能简化,复杂度为
O(kn2) O ( k n 2 )