RS因子分解机FM
Posted guangluwutu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RS因子分解机FM相关的知识,希望对你有一定的参考价值。
2020.2.22.从本篇开始,所有文章使用markdown编辑
为什么使用FM?
机器学习的通常模式为学习输入到输出的变换,比如最常见的线性回归模型,对于特征向量
(X=left(x_{1}, x_{2}, ldots, x_{n}
ight)^{T})
我们有目标预估函数
(egin{aligned} hat{y}(x) &=w_{0}+w_{1} x_{1}+w_{2} x_{2}+ldots w_{n} x_{n} \ &=w_{0}+sum_{i=1}^{n} w_{n} x_{n} end{aligned})
线性回归是最简单的线性模型,是基于各个特征独立同分布的假设,只能捕捉到一阶线性关系。
事实上,各个特征并不是相互对立的,有些特征是相互影响的,此时就有了二阶特征表达式,考虑了两个特征变量之间的交互影响。
(widehat{y}(x)=w_{0}+sum_{i=1}^{n} w_{n} x_{n}+sum_{i=1}^{n} sum_{j=i+1}^{n} w_{i j} x_{i} x_{j})
这里每俩个特征就有一个参数(W_{1 j})需要学习。但是这里有一个问题,对于二项式回归来说,如果有n个特征,那么就要学习到俩俩之间的关系,那么就有n(n-1)/2个参数需要学习,参数数量特别多。
既然每一个参数(W_{1 j})都是二阶特征,我们可以把对于(W_{1 j})的估计,转换成为矩阵分解MF问题:
(hat{y}(x)=w_{0}+sum_{i=1}^{n} w_{n} x_{n}+sum_{i=1}^{n} sum_{j=i+1}^{n} w_{i j} x_{i} x_{j})
(hat{y}(x)=w_{0}+sum_{i=1}^{n} w_{n} x_{n}+sum_{i=1}^{n} sum_{j=i+1}^{n}leftlangle V_{i}, V_{j}
ight
angle x_{i} x_{j})
(leftlangle V_{i}, V_{j}
ight
angle:=sum_{f=1}^{k} v_{i, f} cdot v_{j, f})
如果直接计算,如图所示,复杂度为(Oleft(k^{*} n^{2}
ight)),n是特征个数,K是特征的embedding size。虽然复杂度很高,但是可以优化。
如果训练的输入数据有n个特征,设i,j俩个特征的相互关系可以用参数(W_{1 j})表示,那么(w_{i, j}=w_{j, i}),这样所有w的参数值会形成一个对称的矩阵如下。
none (w_{1,2} w_{1,3} w_{1,4} ldots w_{1, n})
(w_{2,1}) none (w_{2,3} w_{2,4} ldots w_{2, n})
(w_{n, 1} w_{n, 2} w_{n, 3} dots w_{n, n-1}) none
这个矩阵没有对角线,而且我们只要这个矩阵的一半即可。
(sum_{i=1}^{n} sum_{j=i+1}^{n}leftlangle V_{i}, V_{j}
ight
angle x_{i} x_{j})
(=frac{1}{2} sum_{i=1}^{n} sum_{j=1}^{n}leftlangle V_{i}, V_{j}
ight
angle x_{i} x_{j}-frac{1}{2} sum_{i=1}^{n}leftlangle V_{i}, V_{i}
ight
angle x_{i} x_{i})
(=frac{1}{2}left(sum_{i=1}^{n} sum_{j=1}^{n} sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{j}-sum_{i=1}^{n} sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{i}
ight))
(=frac{1}{2} sum_{f=1}^{k}left(left(sum_{i=1}^{n} v_{i, f} x_{i}
ight)left(sum_{j=1}^{n} v_{j, f} x_{j}
ight)-sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}
ight))
(=frac{1}{2} sum_{f=1}^{k}left(left(sum_{i=1}^{n} v_{i, f} x_{i}
ight)^{2}-sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}
ight))、
从而复杂度变为(Oleft(k^{*} n^{2}
ight)=>Oleft(k^{*} n
ight)),而且基于矩阵分解的思想,将以上矩阵分解为俩个低阶矩阵的乘积,那么在分解过程中,减少了数据存储的复杂度。
以上是关于RS因子分解机FM的主要内容,如果未能解决你的问题,请参考以下文章
因子分解机(Factorization machine,FM),DIFM模型