Factorization Machines
/ 2020-01 Howard Wonanut 推荐算法系列文章(1)
😀人工翻译幷包含部分个人理解,欢迎批评指正,但谢绝转载。
本文介绍因子分解机(FM),这是一种新的模型,它结合了支持向量机(SVM)和因式分解模型的优点。FM是一种通用预测器(与SVM一样),能够处理任何实值数。另外,其使用分解参数模拟变量之间的所有交互(原文:In contrast to SVMs, FMs model all interactions between variables using factorized parameters.)。因此,即使在SVM也无力回天的稀疏性(如推荐系统)问题中,FM模型也能胜任。本文证明了FM的模型方程可以在线性时间内完成计算。
另一方面,有许多不同的因子分解模型,如矩阵分解;并行因子分析或专用模型,如SVD ++,PITF或FPMC。这些模型的缺点是它们不具有普遍适用性,仅适用于特殊输入数据。此外,他们的模型方程和优化算法也是针对特定任务的。FM仅通过指定输入数据(即特征向量)就可以模拟这些模型。这使得即使对于没有分解模型专业知识的用户,FM也很容易使用。
关键词:因子分解机;稀疏数据;张量因子化;支持向量机
1 FM模型基本介绍
SVM分类器是机器学习和数据挖掘领域的翘楚,但是其在协同过滤这样的推荐领域就无法继续称霸了,因为在这个领域的数据往往具有稀疏这个特点,SVM在稀疏数据中往往不能得到一个优秀的分类超平面。因此,FM模型就横空出世了,FM模型中文名叫作因子分解机(Factorization Machines),我看到这个名字是真的不知其意。
FM模型的优点主要有三点:
- FM能够在特征矩阵非常稀疏的情况下使用,完爆SVM
- FM具有线性时间复杂度,可以在原始中进行优化,不用像SVM那样依赖支持向量。
- FM是一种可以与任何实值特征向量一起使用的通用预测器。
- 支持特征组合(我加的)
2 使用稀疏数据做预测
在传统的监督学习问题中,假设给定训练集,其中为标签。如果其为离散值,则常用该数据做分类任务,如果其为数值,则常用该数据做回归任务。同时,在排名问题(如推荐系统)中可以用来给特征向量打分,并且根据分值对其进行排序。
本文中使用的数据是高度稀疏的,给定特征向量中的绝大多数值都是0。做如下定义:
- :特征向量中特征不为0的个数;
- :数据集中的均值,其中任意。
极度稀疏的数据()在现实世界中很常见,如购物应用的推荐系统。如果有很多类别特征,每个类别特征有很多类,那么特征矩阵就会特别稀疏(如购物应用中的商品往往有上千种)。
🐒 举个栗子:
假如现在有一个电影评分系统,该系统记录用户在时间给电影打分为。现给定用户列表和电影列表为:
部分评分操作数据为:S = {(A, TI, 2010-1, 5), (A, NH, 2010-2, 3), (A, SW, 2010-4, 1), (B, SW, 2009-5, 4), (B, ST, 2009-8, 5),(C, TI, 2009-9, 1), (C, SW, 2009-12, 5)}。
针对上面数据的一个简单的预测问题就是:预测某个一个用户在某个时间给某个电影的评分。数据将会被转化为下图所示的矩阵。
每行表示目标与其对应的特征向量 ;蓝色区域表示了用户变量;红色区域表示了电影变量,黄色区域表示了该用户曾经看过的电影,按照其看过的电影数归一化,使得其和为1;绿色区域表示投票月份(从2009年1月开始算);棕色区域表示了用户上一个评分的电影;最右边的区域是评分。
本文将以该数据集为例解释为什么FM比SVM好,到现在你应该明确:相比于SVM,FM是一个更加通用的预测模型,因此FM不仅能用于推荐系统,也能够在其他领域使用。
3 FM模型
3.1 模型推导
在这个部分,我们详细的介绍一下FM模型。普通的线性模型都是将各个特征独立考虑的,并没有考虑到特征之间的相互关系。但是实际上,特征之间可能具有一定的关联,比如男生更喜欢购买电子设备,女生更喜欢购买衣服化妆品。如果能找出这类的特征,是非常有意义的。
3.1.1 模型等式
为了简单起见,这里只考虑二阶交叉的情况(特征两两组合),对应的FM模型为:
其中,n代表样本的特征数量,是第i个特征的值,是模型参数,表示第个变量和第个变量的交互作用(interaction),只有当与都不为0时,交叉才有意义。
由于线代中有如下定义:
如果一个实对称矩阵正定,则与合同,那么存在可逆矩阵,使得
如果矩阵是正定矩阵,那么只要足够大,就存在使得,其中是 的二维矩阵。因此可以将上面的式子转化为:
其中表示维数为的向量的点乘,为超参数,决定因子分解的维度:
表示第个变量的个因子组成的向量。
不过在数据稀疏的情况下,应该选择较小的,因为可能没有足够的数据来估计矩阵。限制的大小能够使得FM模型更加通用,能够提高其泛化能力。
3.1.2 在数据稀疏的情况下进行参数估计
在数据稀疏的情况下,交互作用项对应的特征和的不为0的样本将非常少,当训练样本不足时,很容易导致参数 训练不充分而不准确,最终影响模型的效果。不过,FM模型能够克服这个困难,因为该模型通过分解打破了交互作用参数的独立性。这意味着一个交互作用项也会有助于估计与其相关的交互作用项的参数。
上面的话是真的难懂,基于上面的例子说明一下:
假如现在想要估计Alice(A)和Star Trek(ST) 的交互作用参数,由于训练集中没有实例同时满足和非零,因此会导致这两个特征之间没有交互()。但是如果使用了特征矩阵分解(factorized)获得了矩阵,我们可以通过求解求解。
直接计算上面的公式求解的时间复杂度为,因为所有的特征交叉都需要计算。但是可以通过公式变换,将时间复杂度减少到线性复杂度,如下公式推导:
3.2 使用FM进行预测
FM算法可以应用在多种预测任务中,包括:
- 回归:可以直接作为预测结果;
- 二分类:可以直接作为分类结果,可使用hingle loss或者logit loss进行优化;
- 排名:向量可通过分数进行排序,并且通过pairwise的分类损失来优化成对样本。
在以上的任务中,一般都会使用L2正则防止过拟合。
3.3 参数学习
从上面的描述可以知道FM可以在线性的时间内进行预测。因此模型的参数()可以通过梯度下降的方法(例如随机梯度下降)来学习。FM模型的梯度是:
由于与是独立的,因此可以提前计算其结果(如在计算的时候直顺便算了)。并且每次梯度更新可以在常数时间复杂度内完成,因此FM参数训练的复杂度也是。综上可知,FM可以在线性时间训练和预测,是一种非常高效的模型。
3.4 扩展到d-阶
前面都是针对2阶FM模型进行讨论,这个模型可以直接拓展到d阶:
其中第个交互作用项的参数可以通过PARAFAC模型的参数:
如果直接计算上面公式的时间复杂度为,如果进行优化,其时间复杂度也会是线性的。
4 FM vs. SVM
文章在这里还做了挺多对比的,我就不详细写了,说下大概思路:
4.1 SVM模型公式
SVM分类器进行预测的公式如下:
其中是映射函数,将在空间中的特征映射到更高维的空间中,映射函数与核函数的关系为:
以线性核(Linear kernel)和多项式核(Polynominal kernel)为例,线性核函数为,其对应的映射函数为。因此线性核的SVM预测函数为:
因此线性SVM等价于1-阶FM模型。
而多项式核为:,当d为2时,其映射函数为:
多项式核SVM的模型等式为:
其中
通过对比2-阶多项式核SVM与FM,你会发现,SVMs核FMs的主要区别在于参数化:SVM的所有参数之间都是相互独立的,如与。相反的,FMs的特征矩阵经过分解,因此和并不是相互独立的,他们之间会存在联系,因为存在重叠向量。
4.2 SVM和FM模型对比
为什么线性SVM在和多项式SVM在稀疏条件下效果会比较差呢?
- 线性svm只有一维特征,不能挖掘深层次的组合特征在实际预测中并没有很好的表现;
- 而多项式svn正如前面提到的,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,这样对于测试集上的case而言这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。
而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。
此外,FM和SVM的区别还体现在:
- FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行;
- FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量。
4.3 SVM和FM模型区别总结
- SVM的密集参数化需要直接观察相互作用,而这通常是在稀疏环境中无法获得的。 然而即使在稀疏情况下,FM的参数也可以很好地进行参数估计。
- FM可以直接在原始的模型公式上进行学习,而SVM需要模型推导
- FM模型不依赖于训练集,而SVM依赖于训练集(支持向量和训练集中的数据有关)