參考:http://blog.csdn.net/bitcarmanlee/article/details/52143909
http://blog.csdn.net/dream_catcher_10/article/details/50844976
簡介
1.FM(factorization machine)模型是一種基於矩陣分解的機器學習模型,對於One-Hot編碼引起的稀疏數據具有很好的學習能力;2.FM模型與LR模型的區別在於引進了特徵組合,選擇合適的K值可提高模型的泛化能力;;
FM算法
普通的線性模型,我們都是將各個特徵獨立考慮的,並沒有考慮到特徵與特徵之間的相互關係。但實際上,大量的特徵之間是有關聯的。最簡單的以電商爲例,一般女性用戶看化妝品服裝之類的廣告比較多,而男性更青睞各種球類裝備。那很明顯,女性這個特徵與化妝品類服裝類商品有很大的關聯性,男性這個特徵與球類裝備的關聯性更爲密切。如果我們能將這些有關聯的特徵找出來,顯然是很有意義的。
一般的線性模型爲:
從上面的式子很容易看出,一般的線性模型壓根沒有考慮特徵間的關聯。爲了表述特徵間的相關性,我們採用多項式模型。在多項式模型中,特徵xi與xj的組合用xixj表示。爲了簡單起見,我們討論二階多項式模型。具體的模型表達式如下:
上式中,n表示樣本的特徵數量,xi表示第i個特徵。
與線性模型相比,FM的模型就多了後面特徵組合的部分。
FM求解
從上面的式子可以很容易看出,組合部分的特徵相關參數共有
n(n−1)2個。但是如第二部分所分析,在數據很稀疏的情況下,滿足xi,xj都不爲0的情況非常少,這樣將導致ωij無法通過訓練得出。
爲了求出ωij,我們對每一個特徵分量xi引入輔助向量Vi=(vi1,vi2,⋯,vik)。然後,利用vivTj對ωij進行求解。
那麼ωij組成的矩陣可以表示爲:
上面的表達形式,就對應了一種矩陣的分解。對k值的限定,就反應了FM模型的表達能力。
要求出<vi,vj>,主要是採用瞭如公式((a+b+c)2−a2−b2−c2求出交叉項。具體過程如下: