因子分解机(Factorization Machines )知识点总结

最近遇到海量稀疏数据,尝试logistic regression之后发现模型效果不理解,尝试LR的非线性版本——因子分解机,下面记录下FM(Factorization Machines)的知识点~

1、目的、优缺点

目的:在特征稀疏情况下,特征如何组合,如何构建非线性超平面。

优缺点:

(1)特征稀疏时,模型仍能参数估计(SVM会失败)

(2)可以基于原始形式进行优化(需要像SVM一样借助支持向量),复杂度为线性

(3)对于实数型特征,FM均可用

2.1、模型方程

考虑单独特征的影响,同时也考虑特征之间的相互关系。FM的模型方程如下:

\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}
w_{0} \in \mathbb{R}, \quad \mathbf{w} \in \mathbb{R}^{n}, \quad \mathbf{V} \in \mathbb{R}^{n \times k}

\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle :=\sum_{f=1}^{k} v_{i, f} \cdot v_{j, f}

说明:\hat{w}_{i, j} :=\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle称为第i和变量和第j个变量的交叉项。FM通过因子分解的方法求解该交叉项。

2.2、为何使用因子分解

对于任何正定矩阵(positive definite matrix)W,存在W=V.V^t的矩阵分解形式,其中V的秩为k。

一般来说,是希望k足够大,但是挖掘模型通常来说数据量较少,没有充足的数据来评估W,所以选择较小的k,这时较小的k反而会提升模型的泛化能力(因为模型的容量降低了,学习能力下降了,但对于小样本数据集而言,学习能力足够)。

2.3、为何FM的因子分解技术对稀疏数据有效

稀疏数据下,由于没有足够的数据取评估变量之间的直接或间接的交叉项。

FM通过借助因子分解技术,打破了交叉项参数之间的独立性!即一个交叉项可以用于评语相关的交叉项参数!

通俗理解:A和P之间没有交集,但是呢,R和P之间有交集,那么<A、P> 和<A、R>之间可以存在交集。

2.4 技术复杂度

通常是O\left(k n^{2}\right)

但是重构模型方程之后,将复杂度降低到O(k n)

重构模型方程的推导公式:

3、优化算法

回归:均方误差最小化

分类:预测值的sign返回值,采用hinge或logit 损失

排序:\left(\mathbf{x}^{(\mathbf{a})}, \mathbf{x}^{(\mathbf{b})}\right) \in D,pairwise分类loss

FM有线性计算时间的解析解。可以使用梯度下降算法SGD求解。

FM模型的梯度计算公式:

\frac{\partial}{\partial \theta} \hat{y}(\mathbf{x})=\left\{\begin{array}{ll}{1,} & {\text { if } \theta \text { is } w_{0}} \\ {x_{i},} & {\text { if } \theta \text { is } w_{i}} \\ {x_{i} \sum_{i=1}^{n} v_{j, f} x_{j}-v_{i, f} x_{i}^{2},} & {\text { if } \theta \text { is } v_{i, f}}\end{array}\right.

4、拓展到d-way(3个或3个以上变量之间的关系)

\begin{array}{l}{\hat{y}(x) :=w_{0}+\sum_{i=1} w_{i} x_{i}} \\ {+\sum_{l=2}^{d} \sum_{i_{1}=1}^{n} \ldots \sum_{i_{l}=i_{l-1}+1}^{n}\left(\prod_{j=1}^{l} x_{i_{j}}\right)\left(\sum_{f=1}^{k_{i}} \prod_{j=1}^{l} v_{i_{j}, f}^{(l)}\right)}\end{array}

5、源码分析

github源码:

https://github.com/ibayer/fastFM

https://github.com/srendle/libfm

6、使用注意点

(1)对于2分类而言,标签需要是-1或1。

-- 未完待续 --

发布了64 篇原创文章 · 获赞 24 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qm5132/article/details/90349399