基础推荐模型——传送门:
因子分解机在传统逻辑回归的基础上,加入了二阶部分,使模型具备了进行特征组合的能力 。更进一步,在因子分解机基础上发展出来的域感知因子分解机( Field-aware Factorization Machine, FFM) 则通过加入特征域的概念,进一步加强了因子分解机特征交叉的能力。

逻辑回归模型表达能力不强的问题,会不可避免地造成有效信息的损失,仅利用单特征而非交叉特征进行判断的情况下,有时不仅是信息损失的问题,甚至会得出错误的结论,比如:“辛普森悖论”。此时,就需要特征交叉。
针对特征交叉的问题,算法工程师经常采用先手动组合特征,再通过各种分析手段筛选特征的方法,但该方法无疑是低效的。更遗憾的是,人类的经验往往有局限性,程序员的时间和精力也无法支撑其找到最优的特征组合。因此,采用POLY2 模型进行特征的"暴力"组合成了可行的选择。
POLY2 模型的数学形式如下:
ϕ P O L Y 2 ( w , x ) = ∑ j 1 = 1 n ∑ j 2 = j 1 + 1 n w h ( j 1 , j 2 ) x j 1 x j 2 \phi{POLY2}(w,x)=\sum_{j_1=1}^{n}\sum_{j_2=j_1+1}^{n}w_{h_(j_1,j_2)}x_{j_1}x_{j_2} ϕPOLY2(w,x)=j1=1∑nj2=j1+1∑nwh(j1,j2)xj1xj2
可以看到,该模型对所有特征进行了两两交叉(特征 x j 1 x j 2 x_{j_1}x_{j_2} xj1xj2),并对所有的特征组合赋予权重 w h ( j 1 , j 2 ) w_{h_(j_1,j_2)} wh(j1,j2)。POLY2 通过暴力组合特征的方式,在一定程度上解决了特征组合的问题。POLY2 模型本质上仍是线性模型,其训练方法与逻辑回归并无区别,因此便于工程上的兼容。
POLY2 模型存在两个缺陷:
one-hot 编码的方法处理类别型数据,致使特征向量极度稀疏, POLY2 进行无选择的特征交叉——原本就非常稀疏的特征向量更加稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛。 为了解决 POLY2 模型的缺陷,提出了FM模型。
FM的原始模型方程为:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < w i , w j > x i x j \hat{y}(x)=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}
这个式子的前两项就是一个简单的线性函数。主要分析二阶部分。
FM的二阶部分学习形式为:
ϕ F M ( w , x ) = ∑ i = 1 n ∑ j = i + 1 n < w i , w j > x i x j \phi{FM(w,x)}=\sum_{i=1}^{n}\sum_{j=i+1}^{n}
如果直接按照上面这个公式计算的话,复杂度就是 O ( n 2 ) O(n^2) O(n2)。可以对其进行化解,优化成复杂度为 O ( k n ) O(kn) O(kn)的线性复杂度,推导过程如下:
∑ i = 1 n ∑ j = i + 1 n < w i , w j > x i x j = 1 2 ∑ i = 1 n ∑ j = 1 n < w i , w j > x i x j − 1 2 ∑ i = 1 n < w i , w i > x i x i = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k w i f w j f x i x j − ∑ i = 1 n ∑ f = 1 k w i f , w i f x i x i ) = 1 2 ∑ f = 1 k [ ( ∑ i = 1 n w i f x i ) ( ∑ j = 1 n w j f x j ) − ∑ i = 1 n w i f 2 x i 2 ] = 1 2 ∑ f = 1 k [ ( ∑ i = 1 n w i f x i ) 2 − ∑ i = 1 n w i f 2 x i 2 ] \sum_{i=1}^{n}\sum_{j=i+1}^{n}