FM算法及FFM算法


轉自: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的正向相關性在實際問題中是普遍存在的,如“化妝品”類商品與“女”性,“球類運動配件”的商品與“男”性,“電影票”的商品與“電影”品類偏好等。因此,引入兩個特征的組合是非常有意義的。(我的理解:個性化特征)

一般的線性模型為:

從上面的式子很容易看出,一般的線性模型壓根沒有考慮特征間的關聯(組合)。為了表述特征間的相關性,我們采用多項式模型。在多項式模型中,特征xixj的組合用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的模型方程為:

則二次項的參數數量減少為kn個,遠少於多項式模型的參數數量. 我覺得上式應該是w i,j = <vi,vTj>,但是上面的寫法才是對的,因為是點乘,兩向量得是相同維度。還有i的取值為1到n-1,j的取值是i+1到n,因為特征不可能自己和自己組合

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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM