参考:http://blog.csdn.net/bitcarmanlee/article/details/52143909
http://blog.csdn.net/dream_catcher_10/article/details/50844976
简介
1.FM(factorization machine)模型是一种基于矩阵分解的机器学习模型,对于One-Hot编码引起的稀疏数据具有很好的学习能力;2.FM模型与LR模型的区别在于引进了特征组合,选择合适的K值可提高模型的泛化能力;;
FM算法
普通的线性模型,我们都是将各个特征独立考虑的,并没有考虑到特征与特征之间的相互关系。但实际上,大量的特征之间是有关联的。最简单的以电商为例,一般女性用户看化妆品服装之类的广告比较多,而男性更青睐各种球类装备。那很明显,女性这个特征与化妆品类服装类商品有很大的关联性,男性这个特征与球类装备的关联性更为密切。如果我们能将这些有关联的特征找出来,显然是很有意义的。
一般的线性模型为:
从上面的式子很容易看出,一般的线性模型压根没有考虑特征间的关联。为了表述特征间的相关性,我们采用多项式模型。在多项式模型中,特征 xi 与 xj 的组合用 xixj表示 。为了简单起见,我们讨论二阶多项式模型。具体的模型表达式如下:
上式中,
n
表示样本的特征数量,
xi
表示第
i
个特征。
与线性模型相比,FM的模型就多了后面特征组合的部分。
FM求解
从上面的式子可以很容易看出,组合部分的特征相关参数共有
n(n−1)2 个。但是如第二部分所分析,在数据很稀疏的情况下,满足 xi , xj 都不为0的情况非常少,这样将导致 ωij 无法通过训练得出。
为了求出 ωij ,我们对每一个特征分量 xi 引入辅助向量 Vi=(vi1,vi2,⋯,vik) 。然后,利用 vivTj 对 ωij 进行求解。
那么
ωij
组成的矩阵可以表示为:
上面的表达形式,就对应了一种矩阵的分解。对
k
值的限定,就反应了FM模型的表达能力。
要求出
<vi,vj>
,主要是采用了如公式
((a+b+c)2−a2−b2−c2
求出交叉项。具体过程如下: