轉自:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
http://blog.csdn.net/google19890102/article/details/45532745
FM原理 =>解決稀疏數據下的特征組合問題,
1) 可用於高度稀疏數據場景;2) 具有線性的計算復雜度
對於categorical(類別)類型特征,需要經過One-Hot Encoding轉換成數值型特征。CTR/CVR預測時,用戶的性別、職業、教育水平、品類偏好,商品的品類等,經過One-Hot編碼轉換后都會導致樣本數據的稀疏性。特別是商品品類這種類型的特征,如商品的末級品類約有550個,采用One-Hot編碼生成550個數值特征,但每個樣本的這550個特征,有且僅有一個是有效的(非零)。由此可見,經過One-Hot編碼之后,大部分樣本數據特征是比較稀疏的(即特定樣本的特征向量很多維度為0),同時導致特征空間大。(對於每一個特征,如果它有m個可能值,那么經過獨熱編碼后,就變成了m個二元特征(取值0或1)。並且,這些特征互斥,每次只有一個激活。因此,數據會變成稀疏的.) sklearn中preprocessing.OneHotEncoder實現該編碼方法。
通過觀察大量的樣本數據可以發現,某些特征經過關聯之后,與label之間的相關性就會提高。例如,“USA”與“Thanksgiving”、“China”與“Chinese New Year”這樣的關聯特征,對用戶的點擊有着正向的影響。換句話說,來自“China”的用戶很可能會在“Chinese New Year”有大量的瀏覽、購買行為,而在“Thanksgiving”卻不會有特別的消費行為。這種關聯特征與label的正向相關性在實際問題中是普遍存在的,如“化妝品”類商品與“女”性,“球類運動配件”的商品與“男”性,“電影票”的商品與“電影”品類偏好等。因此,引入兩個特征的組合是非常有意義的。(我的理解:個性化特征)
一般的線性模型為:
從上面的式子很容易看出,一般的線性模型壓根沒有考慮特征間的關聯(組合)。為了表述特征間的相關性,我們采用多項式模型。在多項式模型中,特征xi與xj的組合用xixj表示。為了簡單起見,我們討論二階多項式模型。具體的模型表達式如下:
上式中,n表示樣本的特征數量,xi表示第i個特征。
與線性模型相比,FM(Factorization Machine)的模型就多了后面特征組合的部分。
從公式(1)可以看出,組合特征的參數一共有 n(n−1)/2 個,任意兩個參數都是獨立的。然而,在數據稀疏性普遍存在的實際應用場景中,二次項參數的訓練是很困難的。其原因是,每個參數 wij 的訓練需要大量 xi 和xj都非零的樣本;由於樣本數據本來就比較稀疏,滿足“xi 和 xj 都非零”的樣本將會非常少。訓練樣本的不足,很容易導致參數 wij 不准確,最終將嚴重影響模型的性能。
如何解決二次項參數的訓練問題呢?矩陣分解提供了一種解決思路。在model-based的協同過濾中,一個rating矩陣可以分解為user矩陣和item矩陣,每個user和item都可以采用一個隱向量表示。我們把每個user表示成一個二維向量,同時把每個item表示成一個二維向量,兩個向量的點積就是矩陣中user對item的打分。
類似地,所有二次項參數W i,j可以組成一個對稱陣W,那么這個矩陣就可以分解為 W=VVT,V的第i行便是第i維特征的隱向量。換句話說,每個參數W i,j = <V i,V j>.
V i表示 X i 的隱向量, V j 表示 X j 的隱向量
為了求出 W i,j, 我們對每一個特征分量 X_i 引入輔助向量

然后,利用 對
進行求解。對輔助向量的維度k值的限定,反映了FM模型的表達能力。
那么ωij組成的矩陣可以表示為:
則FM的模型方程為:

FM算法的求解過程:
我的理解:第一步是一個矩陣(矩陣中所有元素求和)減去對角線部分,然后除以2。多項式部分的計算復雜度是O(kn).即FM可以在線性時間對新樣本作出預測
回歸問題:最小均方誤差(the least square error) 均方(一組數的平方的平均值)
二分類問題:對數損失函數,其中表示的是階躍函數Sigmoid
對數損失是用於最大似然估計的,一組參數在一堆數據下的似然值,等於每一條數據的概率之積,而損失函數一般是每條數據的損失之和,為了把積變為和(我的理解:方便計算),就取了對數。再加個負號是為了讓最大似然值和最小損失對應起來(本來求和最大時對應的參數,加上負號后,求和最小時對應的參數,則等價於求最小損失)。
這個就是標准形式的對數損失函數,將sigmoid函數帶入,符號抵消,即為log(1+exp(-yf(x)))
對於回歸問題:可以理解為SGD,單樣本訓練
對於二分類問題:
<=(由左式可知,Vi,f的訓練只需要樣本的Xi特征非0即可,適合於稀疏數據)
在使用SGD訓練模型時,在每次迭代中,只需計算一次所有f的,就能夠方便得到所有V i,f的梯度,(上述偏導結果求和公式中沒有i,即與i無關,只與f有關)顯然計算所有f的
的復雜度是O(kn),模型參數一共有nk + n + 1個。因此,FM參數訓練的復雜度也是O(kn).綜上可知,FM可以在線性時間訓練和預測,是一種非常高效的模型。
我的理解:正則化系數用於衡量正則項與損失項的比重
總結:FM是一種比較靈活的模型,通過合適的特征變換方式,FM可以模擬二階多項式核的SVM模型、MF模型、SVD++模型等。相比SVM的二階多項式核而言,FM在樣本稀疏的情況下是有優勢的;而且,FM的訓練/預測復雜度是線性的,而二項多項式核SVM需要計算核矩陣,核矩陣復雜度就是N平方。SVD++與MF類似,在特征的擴展性上都不如FM,在此不再贅述。
轉自:
http://blog.csdn.net/itplus/article/details/40534923
http://blog.csdn.net/itplus/article/details/40536025
logistic回歸兩種形式:
第一種形式:label取值為0或1
第二種形式:將label和預測函數放在一起,label取值為1或-1
顯然,,上述兩種形式等價。
第一種形式的分類法則:
第二種形式的分類法則:
第一種形式的損失函數可由極大似然估計推出,對於第二種形式的損失函數(標准的對數損失函數形式,參考https://en.wikipedia.org/wiki/Loss_functions_for_classification 中的logistic loss),
左式將分數倒過來,負號提出來,就得到常見的對數損失函數的形式
其中,
則loss最小化可表示為:
上式最后即為極大似然估計的表示形式,則logistic回歸模型使用的loss函數為對數損失函數,使用極大似然估計的目的是為了使loss函數最小。
參考: https://www.zybuluo.com/frank-shaw/note/143260