1. 程式人生 > >3. 支援向量機(SVM)核函式

3. 支援向量機(SVM)核函式

1. 前言

之前介紹了SVM的原理和SVM的軟間隔,它們已經可以很好的解決有異常點的線性迴歸問題,但是如果本身是非線性的問題,目前來看SVM還是無法很好的解決的。所以本文介紹SVM的核函式技術,能夠順利的解決非線性的問題。

2. 多項式迴歸

線性迴歸一節中我們有介紹線性迴歸解決非線性的一個方法就是多項式迴歸。它的原理是對於二維的不是線性的資料,我們將其對映到了五維以後,就變成了線性的資料,然後套用線性迴歸,達到了最終對非線性分類的目的。

image

3. 核函式原理

多項式的原理和核函式的原理如出一轍,也就是說對於在低維線性不可分的資料,在對映到了高維以後,就變成線性可分的了。也就是說,對於SVM線性不可分的低維特徵資料,我們可以將其對映到高維,就能線性可分,此時就可以運用前兩篇的線性可分SVM的演算法思想了。

我們首先回顧下SVM軟間隔的模型公式:

\[ \underbrace{ max }_{\alpha}\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j - \sum\limits_{i=1}^{m}\alpha_i \]
\[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]
\[ 0 \leq \alpha_i \leq C \]
注意到上式低維特徵僅僅以內積\(x_i^Tx_j\)的形式出現,如果我們定義一個低維特徵空間到高維特徵空間的對映\(\phi\),將所有特徵對映到一個更高的維度,讓資料線性可分,我們就可以繼續按前兩篇的方法來優化目標函式,求出分離超平面和分類決策函數了。也就是說現在的SVM的優化目標函式變成:

\[ \underbrace{ max }_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_j\phi(x_i)^T\phi(x_j) - \sum\limits_{i=1}^{m}\alpha_i \]
\[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]
\[ 0 \leq \alpha_i \leq C \]

看起來似乎這樣我們就已經完美解決了線性不可分SVM的問題了,但是事實是不是這樣呢?我們看看,假如是一個2維特徵的資料,我們可以將其對映到5維來做特徵的內積,如果原始空間是三維,可以對映到到19維空間,似乎還可以處理。但是如果我們的低維特徵是100個維度,1000個維度呢?那麼我們要將其對映到超級高的維度來計算特徵的內積。這時候對映成的高維維度是爆炸性增長的,這個計算量實在是太大了,而且如果遇到無窮維的情況,就根本無從計算了。

怎麼辦?似乎我們剛提出了一種好的解決線性不可分的辦法,接著就把自己否決了。

好吧,核函式該隆重出場了!

假設\(\phi\)是一個從低維的輸入空間\(\chi\)(歐式空間的子集或者離散集合)到高維的希爾伯特空間的對映。那麼如果存在函式\(K(x,z)\),對於任意\(x,z\in\chi\),都有:

\[ K(x, z) = \phi(x_i)^T\phi(z_j) \]
\[ K(x, z) = (x^Tz)^2=(\sum_{i=1}^mx_iz_i)(\sum_{j=1}^mx_jz_j)=\sum_{i=1}^m\sum_{j=1}^mx_ix_jz_iz_j \]

\[ \phi(x_i)=\sum_{i=1}^mx_ix_j \]
\[ \phi(z_j)=\sum_{j=1}^mz_iz_j \]

\[ \phi(x_i)^T\phi(z_j)=\sum_{i=1}^mx_ix_j\sum_{j=1}^mz_iz_j=\sum_{i=1}^m\sum_{j=1}^mx_ix_jz_iz_j=K(x, z) \]

仔細觀察上面公式可以發現,\(K(x,z)\)的計算是在低維特徵空間來計算的,它避免了在剛才我們提到了在高維維度空間計算內積的恐怖計算量。也就是說,我們可以好好享受在高維特徵空間線性可分的紅利,卻避免了高維特徵空間恐怖的內積計算量。

至此,我們總結下線性不可分時核函式的引入過程:

我們遇到線性不可分的樣例時,常用做法是把樣例特徵對映到高維空間中去(如多項式迴歸)但是遇到線性不可分的樣例,一律對映到高維空間,那麼這個維度大小是會高到令人恐怖的。此時,核函式就體現出它的價值了,核函式的價值在於它雖然也是將特徵進行從低維到高維的轉換,但核函式好在它在低維上進行計算,而將實質上的分類效果(利用了內積)表現在了高維上,這樣避免了直接在高維空間中的複雜計算,真正解決了SVM線性不可分的問題。

4. 核函式的介紹

4.1 線性核函式

線性核函式(Linear Kernel)其實就是我們前兩篇的線性可分SVM,也就是說,線性可分SVM我們可以和線性不可分SVM歸為一類,區別僅僅在於線性可分SVM用的是線性核函式。
\[ K(x, z) = x^Tz \]

4.2 多項式核函式

多項式核函式(Polynomial Kernel)是線性不可分SVM常用的核函式之一,表示式為:

\[ K(x,z) = (\gamma x^Tz+r)^d \]

4.3 高斯核函式

高斯核函式(Gaussian Kernel),在SVM中也稱為徑向基核函式(Radial Basis Function,RBF),它是非線性分類SVM最主流的核函式。libsvm預設的核函式就是它。表示式為:

\[ K(x, z) = exp(-\gamma||x-z||^2) \]

4.4 Sigmoid核函式

Sigmoid核函式(Sigmoid Kernel)也是線性不可分SVM常用的核函式之一,公式如下:

\[ K(x,z) = tanh(\gamma x^Tz+r) \]

5. 總結

在真實的環境中,非線性問題比線性問題要多的多,如果SVM只能處理線性問題,那大大侷限了它的使用範圍。核函式就是這麼一把利器,能夠把SVM線上性迴歸裡面的整套邏輯無縫的運用到非線性問題上,並且更好的是計算量並沒有太多的提升。值得一提的是核函式並不是SVM模型發明出來的,它是一套數學的簡化計算的方法原理,只要符合它的使用條件,都可以運用核函式的方式簡化運算。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]