基础推荐模型——传送门:
- 推荐系统 | 基础推荐模型 | 协同过滤 | UserCF与ItemCF的Python实现及优化
- 推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现
- 推荐系统 | 基础推荐模型 | 逻辑回归模型 | LS-PLM | PyTorch实现
- 推荐系统 | 基础推荐模型 | 特征交叉 | FM | FFM | PyTorch实现
- 推荐系统 | 基础推荐模型 | GBDT+LR模型 | Python实现
文章目录
一、因子分解机
因子分解机在传统逻辑回归的基础上,加入了二阶部分,使模型具备了进行特征组合的能力 。更进一步,在因子分解机基础上发展出来的域感知因子分解机( Field-aware Factorization Machine, FFM
) 则通过加入特征域的概念,进一步加强了因子分解机特征交叉的能力。
逻辑回归模型表达能力不强的问题,会不可避免地造成有效信息的损失,仅利用单特征而非交叉特征进行判断的情况下,有时不仅是信息损失的问题,甚至会得出错误的结论,比如:“辛普森悖论”。此时,就需要特征交叉。
1.POLY2——二项特征交叉
针对特征交叉的问题,算法工程师经常采用先手动组合特征,再通过各种分析手段筛选特征的方法,但该方法无疑是低效的。更遗憾的是,人类的经验往往有局限性,程序员的时间和精力也无法支撑其找到最优的特征组合。因此,采用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
进行无选择的特征交叉——原本就非常稀疏的特征向量更加稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛。 - 权重参数的数量由 n n n直接上升到 n 2 n^2 n2 ,极大地增加了训练复杂度。
2.FM 模型一一隐向量特征交叉
为了解决 POLY2
模型的缺陷,提出了FM
模型。
2.1 数理推导
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}<w_{i},w_{j}>x_{i}x_{j} y^(x)=w0+i=1∑nwixi+i=1∑nj=i+1∑n<wi,wj>xixj
这个式子的前两项就是一个简单的线性函数。主要分析二阶部分。
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}<w_{i},w_{j}>x_{i}x_{j} ϕFM(w,x)=i=1∑nj=i+1∑n<wi,wj>xixj
如果直接按照上面这个公式计算的话,复杂度就是 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}<w_{i},w_{j}>x_{i}x_{j}\\=\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}<w_{i},w_{j}>x_{i}x_{j}-\frac{1}{2}\sum_{i=1}^{n}<w_{i},w_{i}>x_{i}x_{i}\\=\frac{1}{2}(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{f=1}^{k}w_{if}w_{jf}x_{i}x_{j}-\sum_{i=1}^{n}\sum_{f=1}^{k}w_{if},w_{if}x_{i}x_{i})\\=\frac{1}{2}\sum_{f=1}^{k}[(\sum_{i=1}^{n}w_{if}x_i)(\sum_{j=1}^{n}w_{jf}x_j)-\sum_{i=1}^{n}w_{if}^{2}x_{i}^{2}]\\=\frac{1}{2}\sum_{f=1}^{k}[(\sum_{i=1}^{n}w_{if}x_i)^2-\sum_{i=1}^{n}w_{if}^{2}x_{i}^{2}] i=1∑nj=i+1∑n<wi,wj>xixj=21i=1∑nj=1∑n<wi,wj>xixj−21i=1∑n<wi,wi>x