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 --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 正則化參數(預設.)
-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懲罰項,是以隻能用于二進制分類問題。
詳細介紹可進美團點評技術團隊 檢視。