在前面兩篇我們講到了線性可分SVM的硬間隔最大化和軟間隔最大化的算法,它們對線性可分的數據有很好的處理,但是對完全線性不可分的數據沒有辦法。本文我們就來探討SVM如何處理線性不可分的數據,重點講述核函數在SVM中處理線性不可分數據的作用。
1. 回顧多項式回歸
在線性回歸原理小結中,我們講到了如何將多項式回歸轉化為線性回歸。
比如一個只有兩個特征的p次方多項式回歸的模型:$$h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_1^{2} + \theta_{4}x_2^{2} + \theta_{5}x_{1}x_2$$
我們令\(x_0 = 1, x_1 = x_1, x_2 = x_2, x_3 =x_1^{2}, x_4 = x_2^{2}, x_5 = x_{1}x_2\) ,這樣我們就得到了下式:$$h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_3 + \theta_{4}x_4 + \theta_{5}x_5$$
可以發現,我們又重新回到了線性回歸,這是一個五元線性回歸,可以用線性回歸的方法來完成算法。對於每個二元樣本特征\((x_1,x_2)\),我們得到一個五元樣本特征\((1, x_1, x_2, x_{1}^2, x_{2}^2, x_{1}x_2)\),通過這個改進的五元樣本特征,我們重新把不是線性回歸的函數變回線性回歸。
也就是說,對於二維的不是線性的數據,我們將其映射到了五維以后,就變成了線性的數據。
這給了我們啟發,也就是說對於在低維線性不可分的數據,在映射到了高維以后,就變成線性可分的了。這個思想我們同樣可以運用到SVM的線性不可分數據上。也就是說,對於SVM線性不可分的低維特征數據,我們可以將其映射到高維,就能線性可分,此時就可以運用前兩篇的線性可分SVM的算法思想了。
2. 核函數的引入
上一節我們講到線性不可分的低維特征數據,我們可以將其映射到高維,就能線性可分。現在我們將它運用到我們的SVM的算法上。回顧線性可分SVM的優化目標函數:$$ \underbrace{ min }_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i \bullet 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$$
注意到上式低維特征僅僅以內積$x_i \bullet x_j $的形式出現,如果我們定義一個低維特征空間到高維特征空間的映射$\phi$(比如上一節2維到5維的映射),將所有特征映射到一個更高的維度,讓數據線性可分,我們就可以繼續按前兩篇的方法來優化目標函數,求出分離超平面和分類決策函數了。也就是說現在的SVM的優化目標函數變成:$$ \underbrace{ min }_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_j\phi(x_i) \bullet \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的優化目標函數的區別僅僅是將內積$x_i \bullet x_j $替換為$\phi(x_i) \bullet \phi(x_j)$。
看起來似乎這樣我們就已經完美解決了線性不可分SVM的問題了,但是事實是不是這樣呢?我們看看,假如是一個2維特征的數據,我們可以將其映射到5維來做特征的內積,如果原始空間是三維,可以映射到到19維空間,似乎還可以處理。但是如果我們的低維特征是100個維度,1000個維度呢?那么我們要將其映射到超級高的維度來計算特征的內積。這時候映射成的高維維度是爆炸性增長的,這個計算量實在是太大了,而且如果遇到無窮維的情況,就根本無從計算了。
怎么辦?似乎我們剛提出了一種好的解決線性不可分的辦法,接着就把自己否決了。
好吧,核函數該隆重出場了!
假設$\phi$是一個從低維的輸入空間$\chi$(歐式空間的子集或者離散集合)到高維的希爾伯特空間的$\mathcal{H}$映射。那么如果存在函數$K(x,z)$,對於任意$x, z \in \chi$,都有:$$K(x, z) = \phi(x) \bullet \phi(z)$$
那么我們就稱$K(x, z)$為核函數。
從上面的式子乍一看還是不明白核函數怎么幫我們解決線性不可分的問題的。仔細觀察上式可以發現,$K(x, z)$的計算是在低維特征空間來計算的,它避免了在剛才我們提到了在高維維度空間計算內積的恐怖計算量。也就是說,我們可以好好享受在高維特征空間線性可分的紅利,卻避免了高維特征空間恐怖的內積計算量。
至此,我們總結下線性不可分時核函數的引入過程:
我們遇到線性不可分的樣例時,常用做法是把樣例特征映射到高維空間中去(如上一節的多項式回歸)但是遇到線性不可分的樣例,一律映射到高維空間,那么這個維度大小是會高到令人恐怖的。此時,核函數就體現出它的價值了,核函數的價值在於它雖然也是將特征進行從低維到高維的轉換,但核函數好在它在低維上進行計算,而將實質上的分類效果(利用了內積)表現在了高維上,這樣避免了直接在高維空間中的復雜計算,真正解決了SVM線性不可分的問題。
3. 核函數的介紹
事實上,核函數的研究非常的早,要比SVM出現早得多,當然,將它引入SVM中是最近二十多年的事情。對於從低維到高維的映射,核函數不止一個。那么什么樣的函數才可以當做核函數呢?這是一個有些復雜的數學問題。這里不多介紹。由於一般我們說的核函數都是正定核函數,這里我們直說明正定核函數的充分必要條件。一個函數要想成為正定核函數,必須滿足他里面任何點的集合形成的Gram矩陣是半正定的。也就是說,對於任意的$x_i \in \chi , i=1,2,3...m $, $K(x_i,x_j)$對應的Gram矩陣$K = \bigg[ K(x_i, x_j )\bigg] $ 是半正定矩陣,則$K(x,z)$是正定核函數。
從上面的定理看,它要求任意的集合都滿足Gram矩陣半正定,所以自己去找一個核函數還是很難的,怎么辦呢?還好牛人們已經幫我們找到了很多的核函數,而常用的核函數也僅僅只有那么幾個。下面我們來看看常見的核函數, 選擇這幾個核函數介紹是因為scikit-learn中默認可選的就是下面幾個核函數。
3.1 線性核函數
線性核函數(Linear Kernel)其實就是我們前兩篇的線性可分SVM,表達式為:$$K(x, z) = x \bullet z $$
也就是說,線性可分SVM我們可以和線性不可分SVM歸為一類,區別僅僅在於線性可分SVM用的是線性核函數。
3.2 多項式核函數
多項式核函數(Polynomial Kernel)是線性不可分SVM常用的核函數之一,表達式為:$$K(x, z) = (\gamma x \bullet z + r)^d$$
其中,$\gamma, r, d$都需要自己調參定義。
3.3 高斯核函數
高斯核函數(Gaussian Kernel),在SVM中也稱為徑向基核函數(Radial Basis Function,RBF),它是非線性分類SVM最主流的核函數。libsvm默認的核函數就是它。表達式為:$$K(x, z) = exp(-\gamma||x-z||^2)$$
其中,$\gamma$大於0,需要自己調參定義。
3.4 Sigmoid核函數
Sigmoid核函數(Sigmoid Kernel)也是線性不可分SVM常用的核函數之一,表達式為:$$K(x, z) = tanh(\gamma x \bullet z + r)$$
其中,$\gamma, r$都需要自己調參定義。
4. 分類SVM的算法小結
引入了核函數后,我們的SVM算法才算是比較完整了。現在我們對分類SVM的算法過程做一個總結。不再區別是否線性可分。
輸入是m個樣本${(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}$,其中x為n維特征向量。y為二元輸出,值為1,或者-1.
輸出是分離超平面的參數$w^{*}和b^{*}$和分類決策函數。
算法過程如下:
1)選擇適當的核函數$K(x,z)$和一個懲罰系數$C>0$, 構造約束優化問題$$ \underbrace{ min }_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jK(x_i,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$$
2)用SMO算法求出上式最小時對應的$\alpha$向量的值$\alpha^{*}$向量.
3) 得到$w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_i\phi(x_i)$,此處可以不直接顯式的計算$w^{*}$。
4) 找出所有的S個支持向量,即滿足$0 < \alpha_s < C$對應的樣本$(x_s,y_s)$,通過 $y_s(\sum\limits_{i=1}^{m}\alpha_iy_iK(x_i,x_s)+b) = 1$,計算出每個支持向量$(x_s, y_s)$對應的$b_s^{*}$,計算出這些$b_s^{*} = y_s - \sum\limits_{i=1}^{m}\alpha_iy_iK(x_i,x_s)$. 所有的$b_s^{*}$對應的平均值即為最終的$b^{*} = \frac{1}{S}\sum\limits_{i=1}^{S}b_s^{*}$
這樣最終的分類超平面為:$\sum\limits_{i=1}^{m}\alpha_i^{*}y_iK(x, x_i)+ b^{*} = 0 $,最終的分類決策函數為:$f(x) = sign(\sum\limits_{i=1}^{m}\alpha_i^{*}y_iK(x, x_i)+ b^{*})$
至此,我們的分類SVM算是總結完畢,唯一的漏網之魚是SMO算法,這個算法關系到,我們如何求出優化函數極小化時候的$\alpha^{*}$,進而求出$w,b$,我們將在下一篇討論這個問題。
(歡迎轉載,轉載請注明出處。歡迎溝通交流: liujianping-ok@163.com)
