序
FFM是FM的一个变种算法,通过引入field的概念,FFM把相同性质的特征归于同一个field。不同field之间的隐因子变得不同。用<vi,f(j),vj,f(i)> 代替<vi,vj>,其中f(i) 是特征i所属的field。
为何引入field概念
FM虽然在寻求两辆特征之间的关系,但是其二次项特征之间依旧是相互独立的数字,而FFM引入了field概念后,将不同类型的特征进行了区分,例如下图所示,向量的接近程度代表其之间的相关性。换句话说,FM可以看作是只有一个field的FFM。

FFM原理
FFM模型如下定义;

其中,fj 是第j 个特征所属的field。如果隐向量的长度为k , 那么FFM的二次参数有nfk 个,远多于FM模型的nk 个。此外,由于隐向量与field相关,FFM的二次项不能化简,其预测的复杂度是O(kn^2)
FFM数据的编码格式
若原始数据如下:

该数据可以被编码成5个特征,其中“Genre=Comedy”和“Genre=Drama”属于同一个field,“Price”是数值型,不用One-Hot编码转换。为了方便说明FFM的样本格式,我们将所有的特征和对应的field映射成整数编号。

转为LIBFFM数据格式:
1:1:1 2:2:2 3:3:1 3:4:1 4:5:9.99
其格式对应:field index:feature index:value
针对上面的例子,FFM组合有10项,如下所示:

网友评论