FFM简介
源码使用台湾大学LIBFFM
http://www.csie.ntu.edu.tw/~cjlin/libffm/
LIBFFM是一个解决领域感知分解机的开放源码工具( field-aware factorization machines (FFM))。它已经赢得了最近的两个点击率预测( click-through rate prediction)比赛冠军。
它支持:l2正则化logistics损失函数(l2-regularized logistic loss)。
主要特点:
1)只用SSE结构来加速向量运算
2)使用交叉验证做参数选择
3)在硬盘上学习,比在内存中处理更大的数据
下载:
注意:FFM容易过拟合,在使用之前先阅读README。
下载链接:
zip
tar.gz
github
README
过拟合和早停止
为了避免过拟合,我们推荐提供一个验证集,使用-p参数,可以使用‘–auto-stop’参数,来在程序迭代到最好的验证损失的时候停止。
> ffm-train -p va.ffm -l 0.00002 --auto-stop tr.ffm
安装
要求:LIBFFM 是用C++ 写的,需要C++11和OpenMP运行环境。
数据格式:
LIBFFM的数据格式为:
<label> <field1>:<index1>:<value1> <field2>:<index2>:<value2> ...
.
.
.
field和index都是非负整数。
训练和预测
- `ffm-train'
usage: ffm-train [options] training_set_file [model_file]
options常用参数:
-l 正则化参数(默认0.00002)
-t 迭代次数
-s 线程数
-p 验证集路径
-v 交叉验证分数
--auto-stop 达到最好的验证损失时停止,必须有-p选项
- `ffm-predict'
usage: ffm-predict test_file model_file output_file
使用
Google过程中发现美团点评技术团队,也会用FFM算法做ctr预估,并效果很好,更主要的该团队将技术以博客的形式分享给大家,并讲述的很详细,值得称赞!
美团点评的点击率CTR(click-through rate)和转化率CVR(conversion rate)使用了该模型。
其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果。美团点评技术团队在搭建DSP(Demand Side Platform)的过程中,探索并使用了FM和FFM模型进行CTR和CVR预估,并且取得了不错的效果。
预估CTR/CVR,业界常用的方法有人工特征工程 + LR(Logistic Regression)、GBDT(Gradient Boosting Decision Tree) + LR[1][2][3]、FM(Factorization Machine)[2][7]和FFM(Field-aware Factorization Machine)[9]模型。在这些模型中,FM和FFM近年来表现突出,分别在由Criteo和Avazu举办的CTR预测竞赛中夺得冠军[4][5]。
核心思想:
所有categorical类型的特征,需要经过独热编码(One-Hot Encoding)转换成数值型特征。大部分样本数据特征是比较稀疏的。
多项式模型是包含特征组合的最直观的模型。对于二阶多项式模型,组合特征的参数一共有n*(n-1)/2个,任意两个参数都是独立的。然而,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。
因此,所有二次项参数 wij 可以组成一个对称阵 W(为了方便说明FM的由来,对角元素可以设置为正实数),那么这个矩阵就可以分解为 W=VTV,V 的第 j 列便是第 j 维特征的隐向量。换句话说,每个参数 wij=⟨vi,vj⟩,这就是FM模型的核心思想。
此FFM模型采用logistic loss作为损失函数,和L2惩罚项,因此只能用于二元分类问题。
详细介绍可进美团点评技术团队 查看。