非線性SVM--kernel

前面我們知道,SVM本質是一個線性分類器,如果數據本身線性不可分,那SVM就不能直接應用了;雖然不能直接應用,但還是可以先把數據變得基本線性可分再應用SVM;那如何把數據從線性不可分變成基本線性可分的狀態呢?答案便是進行空間轉換,把數據從一個空間轉換到另一個空間;一個最自然的想法便是低維空間到高維空間的轉換,既然在低維空間線性不可分,那便轉換到高維空間,也許就能基本線性可分了;如下圖所示,一維空間中的紅點[-0.6, -0.5, 0.5, 0.6]與藍點[-1.6, -1.5, 1.5, 1.6]線性不可分,通過空間轉換函數\Phi (x) = (x, x^2)將其轉換到二維空間,便線性可分了。

一般實際應用中,數據基本是線性不可分的,所以可先將數據進行空間轉換X \rightarrow \Phi (X)再應用SVM,故此,SVM優化目標

\min_{\alpha}L = \min_{\alpha}\left \| \sum_{i}\alpha_i y_i X_i \right \|^2/2 - \sum_{i}\alpha_i \\ s.t. \;\; 0 \leq \alpha_i \leq C, \; \sum_{i}\alpha_i y_i = 0 \\ KKT: \forall i \left\{\begin{matrix} y_i(W^T X_i + b) \geq 1 &,& \alpha_i = 0 \\ y_i(W^T X_i + b) = 1 &,& 0 < \alpha_i < C \\ y_i(W^T X_i + b) \leq 1 &,& \alpha_i = C \\ W = \sum_{i}\alpha_i y_i X_i \end{matrix}\right.便變成了\min_{\alpha}L = \frac{1}{2} \min_{\alpha}\sum_{i}\sum_{j}\alpha_i \alpha_j y_i y_j \Phi (X_i)^T \Phi(X_j) - \sum_{i}\alpha_i \\ s.t. \;\; 0 \leq \alpha_i \leq C, \; \sum_{i}\alpha_i y_i = 0 \\ KKT: \forall i \left\{\begin{matrix} y_i(\sum_{k}\alpha_k y_k \Phi (X_k)^T\Phi (X_i) + b) \geq 1 &,& \alpha_i = 0 \\ y_i(\sum_{k}\alpha_k y_k \Phi (X_k)^T\Phi (X_i) + b)= 1 &,& 0 < \alpha_i < C \\ y_i(\sum_{k}\alpha_k y_k \Phi (X_k)^T\Phi (X_i) + b) \leq 1 &,& \alpha_i = C \\ \end{matrix}\right.

求解過程會出現\Phi (X_i)^T \Phi (X_j)內積計算,如果空間轉換後的維度很高,那計算量便會很大;

以二階多項式做空間轉換函數爲例,X \rightarrow \Phi (X) = (x_1,x_2,...,x_d,x_1 x_1,x_1 x_2,...,x_1 x_d,x_2x_1,x_2x_2,...,x_2x_d,...,x_dx_d)\Phi (X_i)^T \Phi (X_j)的計算複雜度便是O(d^2)

\Phi (X_i)^T \Phi (X_j)可以看到,這個計算是包含兩步的,先進行空間轉換再進行內積,所以如果能把空間轉換和計算內積這兩個步驟合併起來,即找到一個在原空間計算的函數K (X_i,X_j)使得K(X_i, X_j) = \Phi (X_i)^T \Phi (X_j),計算便會簡化,稱這樣的函數爲核函數,也即kernel

還是以上面的二階多項式爲例,

\Phi (X_i)^T \Phi (X_j) \\ &=& \sum_k{X_{i,k}X_{j,k}} + \sum_k\sum_t{X_{i,k}X_{i,t}X_{j,k}X_{j,t}} \\ &=& X_i^T X_j +{(X_i^T X_j)}^2,可以發現\Phi (X_i)^T \Phi (X_j)計算複雜度變成了O(d),也就是說,以二階多項式做空間轉換函數時有對應的kernel,K(X_i,X_j) = X_i^T X_j +{(X_i^T X_j)}^2

所以雖然理論上,我們可以使用任意空間轉換函數來使得數據基本線性可分,但考慮到實際效率,空間轉換函數的選取往往比較慎重,即選用的空間轉換函數要有對應的kernel

下面講列舉幾個常用的空間轉換函數與其對應的kernel

多項式空間轉換函數

\Phi (X) = (x_1,x_2,...,x_d,x_1 x_1,x_1 x_2,...,x_dx_d,...,x_1x_1x_1,x_1x_1x_2,...,x_dx_dx_d,...,x_d^Q) \\ \rightarrow K(X_i, X_j) = (\zeta + \gamma X_i^TX_j)^Q

Polynomial Kernel的優點是階數Q可以靈活設置,相比linear kernel限制更少,更貼近實際樣本分佈;缺點是當Q很大時,K的數值範圍波動很大,而且參數個數較多,難以選擇合適的值。

高斯空間轉換函數

\Phi (X) = exp(-\gamma \left \| X \right \|^2)(1, \sqrt{2\gamma }X, \sqrt{{(2 \gamma) }^2/2!}X^2,...,\sqrt{(2\gamma )^n/n!}X^n) \\ \rightarrow K(X_i, X_j) = exp(-\gamma \left \| X_i-X_j\right \|^2)

Gaussian Kernel的優點是邊界更加複雜多樣,能最準確地區分數據樣本,數值計算K值波動較小,而且只有一個參數,容易選擇;缺點是由於特徵轉換到無限維度中,w沒有求解出來,計算速度要低於linear kernel,而且可能會發生過擬合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章