因子分解機Factorization Machine的提出是對標SVM和矩陣分解,如SVD++、PITF、FPMC模型。
FM集成了SVM的優點,可以應用在任意的實值特征向量上。相比于SVM,FM可以通過分解參數對變量之間的交互建模,因此可以應用于數據稀疏的問題上,來對特征之間的交互進行估計,SVM在這類問題上沒有很好的發揮。FM的計算時間可以優化到線性時間,因此FM可以直接優化。不同于對偶SVM,FM不用對原問題進行對偶求解,模型參數可以直接估計計算,不需要支持向量。
其他的分解方法,如矩陣分解、并行因子分析,或特定模型,如SVD++、PITF、FPMC。這些模型對于更general的問題不能很好的適用,而且對輸入數據有特定的格式要求。而且,它們的求解和優化方法需要根據具體的問題來確定、推導。FM和它們相比,只是在輸入數據上相似,但是更容音應用,而且不需要特定的先驗知識。
FM
公式
對于二階交叉特征來說,FM計算公式為:
vi表示V中由k個元素組成的第i行向量,k是一個決定特征向量維度的超參數;
w0表示全局的偏置;wi表示對應特征的權重參數;wij=<vi, vj>表示第i個、第j個特征的交叉值。FM不是直接用wij,而是用分解來對其進行建模,這正是FM可以用于高稀疏數據場景的關鍵。
優化
對于FM的交叉項來說,如果直接計算時間復雜度為O(knn);但是我們可以對這個計算過程進行進一步的優化,將時間復雜度簡化為O(k*n)。
這個過程相當于完全平方公式,我們只要交叉項,所以<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="26.502ex" height="2.884ex" viewBox="0 -1024.6 11410.7 1241.8" role="img" focusable="false" style="vertical-align: -0.505ex;" class="in-text-selection"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><text font-family="STIXGeneral,'Arial Unicode MS',serif" stroke="none" transform="scale(53.819) matrix(1 0 0 -1 0 0)">(</text><g transform="translate(3018,0)"><text font-family="STIXGeneral,'Arial Unicode MS',serif" stroke="none" transform="scale(53.819) matrix(1 0 0 -1 0 0)">)</text></g></g></svg>?, ?
在知道了FM的表達式之后,其中的參數可以借助于梯度下降方法進行求解。
應用
FM可以用于各種監督學習任務,比如
回歸問題。FM的輸出值作為預測;
二分類問題。FM的輸出正負作為分類結果;
排序問題。根據FM的輸出對x進行排序,使用pair-wise loss作為損失函數。
個人思考
FM的關鍵點在于使用分解向量來對交叉項系數進行建模;每個特征對應一個向量。使用這種方法建模,將xixj的關聯關系打破,原來的建模wij系數的訓練依賴于xixj樣本,但對于非常稀疏的場景中,這樣的數據是非常稀少的,就會導致wij學習不到,始終為0(初始化為0);使用分解建模后,將wij變為vi,vj;而所有與xi發生交叉的特征樣本都可以用來訓練vi,vi能很好地訓練,vj類似;這樣通過<vi, vj>就可以得到wij,提升了模型的泛化能力。
vi、vj本質上也屬于一種embedding方式。
對于推薦系統、計算廣告來說,場景數據非常稀疏;此外,交叉特征對于模型的預測非常有幫助。比如,“男性”+“大學生”,對于“LoL”廣告感興趣的可能性會很大,發生點擊的概率比“女性”+“白領”要大。
自己如何產生合理的idea?