Factorization Machine

本文深入探讨了因子分解机(FM)模型,一种由Steffen Rendle提出的基于矩阵分解的机器学习算法,尤其适用于稀疏数据集的学习。文章详细介绍了FM模型的构成,包括其线性部分和考虑特征交互的高阶部分,并讨论了其在回归和二元分类问题中的应用及求解方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久很久没有更新这个博客了,最近想发点东西,先发点以前写的吧

简介

因子分解机(Factorization Machine, FM)是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法。 对于因子分解机FM来说,最大的特点是对于稀疏的数据具有很好的学习能力。

模型

y^:=w0+∑i=1nwixi+∑i=1n−1∑j=i+1n⟨vi,vj⟩xixj\hat{y} := w_{0} + \sum_{i=1}^{n}w_{i}x_{i} + \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\langle v_{i}, v_{j} \rangle x_{i}x_{j}y^:=w0+i=1nwixi+i=1n1j=i+1nvi,vjxixj

其中,参数 w0∈R,W∈Rn,V∈Rn×k.⟨vi,vj⟩w_{0}\in \mathbb{R}, W\in\mathbb{R}^{n}, V\in\mathbb{R}^{n\times k}. \langle v_{i}, v_{j} \ranglew0R,WRn,VRn×k.vi,vj 表示的是两个长度为k额向量的> 点积:
⟨vi,vj⟩:=∑f=1kνi,f⋅νj,f\langle v_{i}, v_{j} \rangle := \sum_{f=1}^{k}\nu_{i,f}\cdot\nu_{j,f}vi,vj:=f=1kνi,fνj,f
其中,viv_{i}vi 表示的是系数矩阵 V 的第 i 维向量,且 vi=(νi,1,νi,2,⋯ ,νi,k),k∈N+v_{i} = (\nu_{i,1},\nu_{i,2},\cdots,\nu_{i,k}), k\in\mathbb{N}^{+}vi=(νi,1,νi,2,,νi,k),kN+ 称为超参数>。在因子分解机FM模型中,前面两部分是传统的线性模型,最后一部分将两个互异特征分量之间的相互关系考虑进来。
因子分解机FM也可以推广到高阶的形式,即将更多互异特征分量之间的相互关系考虑进来。

算法

Regression

在回归问题中,使用 y^\hat{y}y^ 作为预测结果,使用最小均方误差(the least square error)作为优化的标准:
lossR(y^,y)=12∑i=1m(y^(i)−y(i))2loss^{R}(\hat{y}, y) = \frac{1}{2}\sum_{i=1}^{m}(\hat{y}^{(i)} - y^{(i)})^{2}lossR(y^,y)=21i=1m(y^(i)y(i))2

Binary Classification

与Logistic类似,使用logit loss作为优化标准:
lossC(y^,y)=∑i=1m−lnσ(y^(i)y(i))loss^{C}(\hat{y}, y) = \sum_{i=1}^{m}-ln\sigma(\hat{y}^{(i)}y^{(i)})lossC(y^,y)=i=1mlnσ(y^(i)y(i))
其中, σ\sigmaσ 表示的是阶跃函数Sigmoid.

求解

对k值的限定,对FM的表达能力有一定的影响。
对模型最后一项可做如下替换:
∑i=1n−1∑j=i+1n⟨vi,vj⟩xixj\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\langle v_{i},v_{j} \rangle x_{i}x_{j}i=1n1j=i+1nvi,vjxixj

=12∑i=1n∑j=1n⟨vi,vj⟩xixj−12∑i=1n⟨vi,vj⟩xixj= \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\langle v_{i},v_{j} \rangle x_{i}x_{j} - \frac{1}{2}\sum_{i=1}^{n}\langle v_{i},v_{j}\rangle x_{i}x_{j}=21i=1nj=1nvi,vjxixj21i=1nvi,vjxixj

=12(∑i=1n∑j=1n∑f=1kνi,fνj,fxixj−∑i=1n∑f=1kνi,fνi,fxixi)= \frac{1}{2}(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{f=1}^{k}\nu_{i,f}\nu_{j,f}x_{i}x_{j} - \sum_{i=1}^{n}\sum_{f=1}^{k}\nu_{i,f}\nu_{i,f}x_{i}x_{i})=21(i=1nj=1nf=1kνi,fνj,fxixji=1nf=1kνi,fνi,fxixi)

=12∑f=1k((∑i=1nνi,fxi)(∑j=1nνj,fxj)−∑i=1nνi,f2xi2)= \frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}\nu_{i,f}x_{i})(\sum_{j=1}^{n}\nu_{j,f}x_{j}) - \sum_{i=1}^{n}\nu_{i,f}^{2}x_{i}^{2})=21f=1k((i=1nνi,fxi)(j=1nνj,fxj)i=1nνi,f2xi2)

=12∑f=1k((∑i=1nνi,fxi)2−∑i=1nνi,f2xi2)= \frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}\nu_{i,f}x_{i})^{2} - \sum_{i=1}^{n}\nu_{i,f}^{2}x_{i}^{2})=21f=1k((i=1nνi,fxi)2i=1nνi,f2xi2)
使用SGD求解
在这里插入图片描述
对于回归问题

∂lossR(y^,y)∂θ=2(y^−y)∂y^∂θ\frac{\partial loss^{R}(\hat{y},y)}{\partial\theta} = 2(\hat{y} - y)\frac{\partial\hat{y}}{\partial\theta}θlossR(y^,y)=2(y^y)θy^

对于二分类问题

∂lossC(y^,y)∂θ=−1σ(y^y)σ(y^y)⋅[1−σ(y^y)]⋅y⋅∂y^∂θ\frac{\partial loss^{C}(\hat{y}, y)}{\partial\theta} = -\frac{1}{\sigma(\hat{y}y)}\sigma(\hat{y}y)\cdot[1 - \sigma(\hat{y}y)]\cdot y \cdot \frac{\partial\hat{y}}{\partial\theta}θlossC(y^,y)=σ(y^y)1σ(y^y)[1σ(y^y)]yθy^

=[σ(y^y)−1]⋅y⋅∂y^∂θ= [\sigma(\hat{y}y) -1]\cdot y \cdot \frac{\partial\hat{y}}{\partial\theta}=[σ(y^y)1]yθy^

∂y^∂θ={1ifθ=w0xiifθ=wixi∑j=1nνj,fxj−νi,fxi2ifθ=νi,f\frac{\partial\hat{y}}{\partial\theta} = \begin{cases} 1& if \theta = w_{0}\\ x_{i}& if \theta = w_{i}\\ x_{i}\sum_{j=1}^{n}\nu_{j,f}x_{j} - \nu_{i,f}x_{i}^{2}& if \theta = \nu_{i,f} \end{cases}θy^=1xixij=1nνj,fxjνi,fxi2ifθ=w0ifθ=wiifθ=νi,f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值