1. 程式人生 > >FM及FFM演算法

FM及FFM演算法

(作者:陳玓玏)

1. 為什麼要用FM

在計算廣告中使用邏輯迴歸等演算法進行CTR(廣告點選率)、CVR(轉化率)等預估時,有三個重要的問題:
1) 特徵稀疏問題。關於客戶的特徵和關於廣告的特徵都有很多的標稱型特徵,如客戶所在地區、職業、性別,以及廣告的主題等,這些屬性無法比較大小,因此需要經過one-hot編碼處理才能進入模型。但one-hot編碼後會產生大量的0值特徵,這對於邏輯迴歸、SVM等模型的求解都是非常不友好的,會造成預測效能差。
2) 特徵空間非常大的問題。如果原來的標稱特徵有500個可選值,那麼這個特徵經過one-hot編碼就會衍生成500個特徵,那麼對於電影、電商等品類標稱特徵非常多的場景來說,求解會變得困難。
3) 沒有考慮特徵之間的相互關係。但考慮這些是有必要的,因為點選率本身是屬於預測客戶的特徵與廣告特徵之間的一個匹配度,所以必須關注客戶特徵和廣告特徵的關係(比如女性關注美妝),這一點和分類問題是不一樣的。在這種情況下,適合使用的傳統機器學習演算法只有SVM,因為SVM的核方法能夠學習它的交叉特徵,但是SVM不適合稀疏場景。

由於以上三個問題的存在,FM應運而生,那麼FM的特點也很明顯了:適用於特徵稀疏的場景,並且能夠學習特徵之間的關係。

2. FM模型公式

傳統的線性模型的公式如下:
y ( x ) = ω

0 + i = 1 n
ω i x i y(x) = \omega_0+\sum_{i=1}^{n}\omega_ix_i
這個公式中還未包含交叉特徵,那麼現在把所有特徵都做交叉:
y ( x ) = ω 0 + i = 1 n ω i x i + i = 1 n j = i + 1 n ω i j x i x j y(x) = \omega_0+\sum_{i=1}^{n}\omega_ix_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}\omega_{ij}x_ix_j
最後一項即交叉特徵和它們的權值的乘積和,即 ω 12 x 1 x 2 + ω 13 x 1 x 3 + + ω ( n 1 ) n x n 1 x n \omega_{12}x_1x_2+\omega_{13}x_1x_3+…+\omega_{(n-1)n}x_{n-1}x_n 。接下來的問題是, ω i \omega_i 的求解是很簡單的,那怎麼求解 ω i j \omega_{ij} 呢?在SVM中我們是用核方法來求解的,但這裡不行,這裡是借鑑的矩陣分解的思想。

我們首先把交叉特徵的權值矩陣寫出來:
( ω 11 ω 12 ω 13 ω 1 n ω 21 ω 22 ω 23 ω 2 n ω n 1 ω n 2 ω n 3 ω n n ) \begin{pmatrix} \omega_{11} & \omega_{12} & \omega_{13} & \cdots & \omega_{1n} \\ \omega_{21} & \omega_{22} & \omega_{23} & \cdots & \omega_{2n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \omega_{n1} & \omega_{n2} & \omega_{n3} & \cdots & \omega_{nn} \\ \end{pmatrix}
因為我們在實際的模型公式是隻需要計算不重複的值,因此雖然現在寫出來的矩陣中有 n 2 n^2 個值,模型公式中只用到了矩陣中 n ( n 1 ) 2 \frac{n(n-1)}{2} 個值。實際上這個矩陣是一個對稱矩陣,因為本身交叉特徵 x 1 x 2 x_1x_2 x 2 x 1 x_2x_1 就是一樣的,係數自然也一樣。至於對角矩陣,只要它的值能保證矩陣正定,也就是滿足可分解條件即可。那麼 ω \omega 矩陣可以分解為 V T V V^TV 的形式,如下所示:
ω = V T V = ( v 11 v 12 v 13 v 1 k v 21 v 22 v 23 v 2 k v n 1 v n 2 v n 3