因子分解机-FM和FFM

独热(one-hot)编码的好处

独热编码是将特征离散化的一种方法,在因子分解机FM中非常推荐使用。

对于那些连续化特征,分桶就能实现离散化,但好处不是很明显。

而对于那些本身离散化的特征,即假设0表示北京,1表示南京,2表示上海,那么one-hot编码后则用[1,0,0]表示北京,[0,1,0]表示南京,[0,0,1]表示说上海,这样做最大的一个好处是三个地方之间的距离相同。

因子分解机

  • 好处

很多特征之间是有联系的,有一个trick就是在线性模型中加入一些手工的特征组合来提高模型的精度,比如男性不一定喜欢球鞋,但是如果是某个圈子里的,就很可能非常喜欢了,这就是一个组合特征,通常是两个特征的叉乘来表示。

  • 理论

因子分解机最大的好处就是能自动学习到所有特征的组合,并且在算法复杂度不是很高的情况下,下面是因子分解机的核心公式
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 \hat{y}(\mathbf{x}):=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j} y^(x):=w0+i=1nwixi+i=1nj=i+1nvi,vjxixj
整体上可以将它看成由两部分组成,一个是普通的线性部分 w 0 + ∑ i = 1 n w i x i w_{0}+\sum_{i=1}^{n} w_{i} x_{i} w0+i=1nwixi,另一个是组合特征部分

∑ i = 1 n ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j \sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j} i=1nj=i+1nvi,vjxixj.

这里的vi是一个1✖️k的向量,也就是每个xi都对应一个隐向量,用他们的
⟨ v i , v j ⟩ : = ∑ f = 1 k v i , f ⋅ v j , f \left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle:=\sum_{f=1}^{k} v_{i, f} \cdot v_{j, f} vi,vj:=f=1kvi,fvj,f
点乘来表示组合特征的权重。上面这个k的大小是可以自己设置的。

  • 效率

论文中证明过,上面那个核心公式化简后的计算复杂度为O(kn)

  • 学习算法

论文中使用的是SGD

  • 多分类

将二分类转成三分类,具体就是将每个vi变成3✖️k维, 普通贫困生,特困生,以及不是贫困生。

  • 损失函数

FM输出的是(y0, y1, y2),首先通过softmax使得y0+y1+y2=1。

损失函数是交叉熵:
H Y ( Y ^ ) = − ∑ p Y p log ⁡ ( Y ^ p ) = − ∑ p = 1 N Y p log ⁡ ( Y ^ p ) H_{Y}(\hat{Y})=-\sum_{p} Y_{p} \log \left(\hat{Y}_{p}\right)=-\sum_{p=1}^{N} Y_{p} \log \left(\hat{Y}_{p}\right) HY(Y^)=pYplog(Y^p)=p=1NYplog(Y^p)
假设有一个三分类问题,某个样例的正确答案是(1,0,0)。某模型经过Softmax回归之后的预测答案是(0.5,0,4,0.1),那么这个预测和正确答案直接的交叉熵是:
H ( ( 1 , 0 , 0 ) , ( 0.5 , 0.4 , 0.1 ) ) = − ( 1 × log ⁡ 0.5 + 0 × log ⁡ 0.4 + 0 × log ⁡ 0.1 ) ≈ 0.3 \mathrm{H}((1,0,0),(0.5,0.4,0.1))=-(1 \times \log 0.5+0 \times \log 0.4+0 \times \log 0.1) \approx 0.3 H((1,0,0),(0.5,0.4,0.1))=(1×log0.5+0×log0.4+0×log0.1)0.3
如果另外一个模型的预测是(0.8,0.1,0.1),那么这个预测值和真实值的交叉熵是:
H ( ( 1 , 0 , 0 ) , ( 0.8 , 0.1 , 0.1 ) ) = − ( 1 × log ⁡ 0.8 + 0 × log ⁡ 0.1 + 0 × log ⁡ 0.1 ) ≈ 0.16 \mathrm{H}((1,0,0),(0.8,0.1,0.1))=-(1 \times \log 0.8+0 \times \log 0.1+0 \times \log 0.1) \approx 0.16 H((1,0,0),(0.8,0.1,0.1))=(1×log0.8+0×log0.1+0×log0.1)0.16
从直观上可以很容易知道第二个答案要优于第二个。通过交叉熵计算得到的结果也是一致的(第二个交叉熵的值更小)。

compare with SVM(重点)

SVM的线性模型函数表示为:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i , w 0 ∈ R , w ∈ R n \hat{y}(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}, \quad w_{0} \in \mathbb{R}, \quad \mathbf{w} \in \mathbb{R}^{n} y^(x)=w0+i=1nwixi,w0R,wRn
二次多项式模型函数表示为:
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 \begin{aligned} \hat{y}(\mathbf{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} \end{aligned} y^(x)=w0+2 i=1nwixi+i=1nwi,i(2)xi2+2 i=1nj=i+1nwi,j(2)xixj
SVM和FM的主要区别在于,SVM的二元特征交叉参数是独立的,如wij,而FM的二元特征交叉参数是两个k维的向量vi、vj,这样子的话,<vi,vj>和<vi,vk>就不是独立的,而是相互影响的。

为什么线性SVM在和多项式SVM在稀疏条件下效果会比较差呢?线性svm只有一维特征,不能挖掘深层次的组合特征在实际预测中并没有很好的表现;而多项式svm正如前面提到的,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,这样对于测试集上的case而言这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。

此外,FM和SVM的区别还体现在:

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

Field-aware 因子分解机

场域因子分解机在因子分解机的基础上引入了域的概念,其核心公式如下:
y ^ F F M ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n ⟨ V i , f j , V j , f i ⟩ x i x j = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n w ^ i j x i x j \begin{aligned} \hat{y}_{F F M}(x) &=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n-1} \sum_{j=i+1}^{n}\left\langle V_{i, f_{j}}, V_{j, f_{i}}\right\rangle x_{i} x_{j} \\ &=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} \hat{w}_{i j} x_{i} x_{j} \end{aligned} y^FFM(x)=w0+i=1nwixi+i=1n1j=i+1nVi,fj,Vj,fixixj=w0+i=1nwixi+i=1n1j=i+1nw^ijxixj
上式子的时间复杂度是O(nnk)

在FFM中,每个变量xi和每个域fj对应一个隐向量 V i , f j V_{i, f_{j}} Vi,fj, 因此,隐向量不仅与变量有关,也与域有关,此时隐向量就是连接变量和域的桥梁。

引入了field的概念,核心目标在于,很多时候没有必要衡量任意两个小特征的关系,而只需要衡量小特征和每个field之间的关系,这样能一定程度降低稀疏性,提升隐向量的实际含义和泛化能力,隐向量的个数确实大大缩小,但是field的个数却也有关,因此不好说谁的复杂度高了,和实际问题有关,可以说的是,其实在FFM作者的实验中,FFM的提升相比FM并不多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值