1. 程式人生 > >python機器學習案例系列教程——CTR/CVR中的FM、FFM演算法

python機器學習案例系列教程——CTR/CVR中的FM、FFM演算法

全棧工程師開發手冊 (作者:欒鵬)

FM問題來源

CTR/CVR預測時,使用者的性別、職業、教育水平、品類偏好,商品的品類等,經過One-Hot編碼轉換後都會導致樣本資料的稀疏性。特別是商品品類這種型別的特徵,如商品的末級品類約有550個,採用One-Hot編碼生成550個數值特徵,但每個樣本的這550個特徵,有且僅有一個是有效的(非零)。由此可見,資料稀疏性是實際問題中不可避免的挑戰。

One-Hot編碼的另一個特點就是導致特徵空間大。例如,商品品類有550維特徵,一個categorical特徵轉換為550維數值特徵,特徵空間劇增。

同時通過觀察大量的樣本資料可以發現,某些特徵經過關聯之後,與label之間的相關性就會提高。例如,“USA”與“Thanksgiving”、“China”與“Chinese New Year”這樣的關聯特徵,對使用者的點選有著正向的影響。換句話說,來自“China”的使用者很可能會在“Chinese New Year”有大量的瀏覽、購買行為,而在“Thanksgiving”卻不會有特別的消費行為。這種關聯特徵與label的正向相關性在實際問題中是普遍存在的,如“化妝品”類商品與“女”性,“球類運動配件”的商品與“男”性,“電影票”的商品與“電影”品類偏好等。因此,引入兩個特徵的組合是非常有意義的。

FM基本原理

多項式模型是包含特徵組合的最直觀的模型。在多項式模型中,特徵 xixj 的組合採用 xixj表示,即 xixj 都非零時,組合特徵 xixj 才有意義。從對比的角度,本文只討論二階多項式模型。模型的表示式如下

(1)y(x)=w0+i=1nwixi+i=1nj=i+1nwijxixj

其中,n 代表樣本的特徵數量,xi 是第 i 個特徵的值,w0wiwij是模型引數。

從公式(1)可以看出,組合特徵的引數一共有

n(n1)2個,任意兩個引數都是獨立的。然而,在資料稀疏性普遍存在的實際應用場景中,二次項引數的訓練是很困難的。其原因是,每個引數 wij的訓練需要大量 xixj 都非零的樣本;由於樣本資料本來就比較稀疏,滿足“xixj 都非零”的樣本將會非常少。訓練樣本的不足,很容易導致引數 wij 不準確,最終將嚴重影響模型的效能。

係數矩陣分解

那麼,如何解決二次項引數的訓練問題呢?矩陣分解提供了一種解決思路。與在model-based的協同過濾中,一個rating矩陣可以分解為user矩陣和item矩陣。

對於對稱矩陣W,

W=(ω11ω12...ω1nω21ω22...ω2nωn1ωn2...ωnn)n×n

由於直接求解W不方便,因此我們引入隱變數V: