1. 介绍
在进行CTR(click through rate)预估时,除了单个特征外,通常要进行特征组合,FM算法是进行特征组合时的常见算法。
2. one-hot的问题
FM主要是为了解决数据稀疏的情况下,特征组合问题。一般categories特征经过one-hot编码以后,样本数据会变得很稀疏,假设有10万个item,如果对item的这个维度进行one-hot编码,这个维度的数据稀疏性就是十万分之一,所以数据的稀疏性是,是实际应用中常见的挑战。
one-hot编码的另一个问题是特征空间变大,上面的10万个item,编码后样本空间有一个categories会变成10万维,特征空间会暴增。
3. 特征组合
普通的线性模型,各个特征都是独立考虑的,没有考虑到特征之间的相关性,如果能找出有关联的特征,会有很大的帮助。一般的线性模型为:
从上面公式中看出,一般的线性模型是不考虑特征间的关联的,为了描述特征间的多样性,我们采用多项式模型。在多项式中,特征 和 的组合用 表示,现在讨论二阶多项式模型。
其中,n表示样本的特征数量, 表示第i个特征。公式的第三项就是加入了特征组合的部分。
4. FM求解
从上面的多项式可以看出,特征组合的部分,特征相关参数有 个。但是在数据很稀疏的情况下, 都不为0的情况非常少,这样使得 无法通过训练得出。
为了求出 , 对每一个特征分量 引入隐向量 。将每个 用隐向量的内积<> 表示,然后利用 对 进行矩阵求解。
那么 可以表示为:
具体过程:
5. FM总结
-
FM降低了特征组合项学习不充分的影响。
参数学习有之前学习 的过程,变成了学习n个单特征对应的k维隐向量的过程。
-
FM提高了预估能力。
由于FM学习的参数为单特征的隐向量,所以训练集中没有出现的特征组合的样本,FM模型依然可以用来预估。
-
FM提高了参数学习效率,
参数个数由 变成了 个,模型复杂的由 变为,m为训练样本数。
FM是一个可以表示特征之间关系的函数表达式,可以推广到更高阶,将多个特征之间的关联信息考虑进来。
参考资料
http://www.52caml.com/head_first_ml/ml-chapter9-factorization-family/