因子分解机
因子分解机式在poly2模型上的改进,为了改进计算交叉项参数时,矩阵稀疏的问题而引入。普通线性模型将各个特征独立考虑,没有考虑到特征之间的关系,实际上,这些特征间有一些关联,如果找出这类特征,会更有意义
比如用某条数据表示一个人:(年龄,在北京,在上海,在深圳,男,女)
则一个在北京的20岁男生可以表示为(20, 1, 0, 0, 1, 0)
一个在深圳的22岁女生可以表示为(22, 0, 0, 1, 0, 1)
当进行某个label的预测时,可以每个参数给一个权重,进行LR预测,但是其中两个特征的组合也可能产生其他影响,比如(北京的男生或者深圳的女生),会比单独的(北京的、男生、深圳的、女生)造成更大影响,就可以在设计模型时为其进行组合
注
简单的说就是每个特征xi,不仅有特征本身xi的值,还有一个隐向量表示vi,这样求两个特征x_{i}、x{j}之间的关系的时候,就需要计算<vi,vj>xixj,即两个特征的乘积和其隐向量的点积
公式改写
为了克服矩阵稀疏时,交叉项参数在进行梯度下降时无法更新的问题,需要对FM公式进行改写,使得求解更加顺利,受矩阵分解的启发,对于每个特征xi引入k维的辅助向量Vi,找到一个VVT=W,当k足够大时,对于任意对称正定的实矩阵,均存在实矩阵,使得W=VVT
也就是可以将具有交叉项的LR公式进行改写
y(x)=ω0+Σωixi+Σi=1nΣj=i+1n<vi,vj>xixj
其中<vi,vj>=Σf=1kvi,fvj,f,f从1到k,是维度,计算复杂度从n2降低到kn
Σi=1n−1Σj=i+1n<vi,vj>xixj
=21Σi=1nΣj=1n<vi,vj>xixj−21Σi=1n<vi,vi>xixi
=21(Σi=1nΣj=1nΣf=1kvi,fvj,fxixj−Σi=1nΣf=1kvi,fvi,fxixi)
=21Σf=1k[(Σi=1nvi,fxi)(Σj=1nvj,fxj)−Σi=1nvi,f2xi2]
=21Σf=1k[(Σi=1nvi,fxi)2−Σi=1nvi,f2xi2]
化简解释:原本是一个矩阵对角线的上半部分,将其进行补全,由于上下对称,因此变为原先的一半,减去对角线元素的值(原本没有对角线的值),后续则为正常化简
FM梯度下降
一样使用梯度下降进行参数求解,分别对ω0,ωi,vi求导
∂ω0∂y(x)=1
∂ωi∂y(x)=xi
∂vif∂y(x)=xiΣj=1nvj,fxj−vi,fxi2
前两个时间O(1),计算第三个偏导数时,每次迭代只需要计算一次所有的Σj=1nvjfxj就能求出所有vif的梯度,因此复杂度时O(n),因为v有k维,因此复杂度为O(kn),
可以看出,训练vi,f只需要样本特征xi的特征非0,适合稀疏数据,并且计算复杂度低
优缺点
优点
- 和SVM对比
- FM能很好处理稀疏数据
- 模型只依赖模型参数,SVM还依赖一部分数据
- 可以在原始形式下直接优化(SVM是对偶处理)
- FM的拟合能力不弱于任何多项式核SVM
- 与分解模型对比
- FM是一个通用预测器,可以处理任何真实值向量(分解模型往往只在特定输入数据形式下才能工作)
- 只需要在特征向量中元素进行特定组合
缺点
- 每个特征只引入了一个隐向量,不同特征间没有区分性(后续推出FFM对其进行改进)