核函數與支持向量機入門

原文博客傳送門:核函數與支持向量機入門。


理解支持向量機(Support Vector Machine, SVM)的角度很多。從分類問題入手,由最小化訓練錯誤導出限制條件下的凸優化問題的解,進而由線性可分的硬邊界泛化爲利用鬆弛變量放寬限制條件的軟邊界問題;從一般性的損失函數出發,由線性迴歸的0-1損失函數換成hinge損失函數,進而加上針對模型複雜度的L2懲罰項;亦或是從支持向量的角度,由核函數的一般應用到稀疏核的支持向量,進而分析SVM的核技巧。後者學習曲線相對來說比較大,卻有助於深入理解SVM。

(不知是從哪來的先入爲主,以前提到SVM,腦中總是出現一些非常confusing的概念,什麼最大邊際,Lagrange對偶性,最小最大化一系列公式,本來打印好好的論文,沒看到優化目標函數呢,就放之一旁等着畢業賣廢紙了。山人也覺得沒得治了。好吧,從此篇開始就自稱山人了: (,但當山人看到下面關於一個SVM的段子時,對它的熱情又從新燃起了。)

svm joke
Allaboutinquiry同學是這樣說滴:

關於這個同學舉牌子的典故我知道,我也是CMU的。這是在2009年在Pittsburgh舉行的G20峯會現場外面。很多反對G20的,支持G20的都來湊熱鬧。我們這位同學也來了,魚目混珠的高舉Support Vector Machine的牌子。很多老美就暈了,你說你支持加強控制二氧化碳排放我懂,你支持的的這個Vector Machine是個什麼東西啊?然後這個同學搞笑的目的就達到了。

I- 非線性變換

很多算法在處理輸入空間的樣本時,會把輸入空間的生數據樣本轉換成特徵空間的樣本表達。有時這是一種顯式的的特徵選擇,如去噪或提取更高層表達能力的特徵。有時這是爲了解決樣本在生輸入空間不可分,而進行的高維空間變換,從而把原本不可分的數據變換成在高緯可分的特徵點。而這個映射便是通過非線性變換來實現的。一個直觀的例子:

feature map project feature map interpolation

如上圖所示,原始的二維平面上是遍佈生數據的輸入點,其類別標籤用紅點和藍點來區分。由左圖中平面上點的分佈來看,在輸入的二維空間是線性不可分的。但我們可以通過一個尋找一個特徵映射函數ϕ(.)來把輸入空間的點x,映射爲三維特徵空間中的點ϕ(x),於是這個三維空間中的點便可以通過左圖中一個粉紅色的超平面來分隔。但即使在三維特徵空間可分,我們怎麼把這個三維特徵空間的分隔超平面映射回二維輸入空間去呢?很簡單,我們可以直接把超平面與特徵空間圓錐體的截平面直接投影到二維空間裏去,所形成的橢圓曲線就是二維空間的分隔線。如上面右圖中的白色所示。

II- 核方法

核方法便是基於非線性特徵映射,定義如下:

k(x,x)=ϕ(x)Tϕ(x)(1)
其是在大邊際分類器背景下被重新引入機器學習,進而催生出了SVM。而伴隨着SVM的顯著效果和廣泛引用,越來越多的核方法被引入。通過它,便可以把一些原本在低維不可分的數據集映射到高維可分空間。映射到高維空間後的數據點便可以通過高維空間中的簡單線性計算來達到可分的目的。但是,這個過程可能需要兩步:第一,是找到某種上面所說的非線性變換的映射ϕ(x), 把所有的低維空間的點變換成高維空間的點。第二,是在高維空間中找到一種簡單的線性可分函數來對這些映射後的點進行分類。而其中面臨的一個問題就是映射後的空間維度往往非常的高,其向量點積的運算非常的耗時費力。有些情況下,爲了實現高緯可分,映射後的維度可能是無限維度。而在這麼高緯度的空間進行向量運算變得非常困難。所以說,即使我們能夠想象到這樣一種高維特徵映射的方式,以現代的計算能力來看,成本還是太高了。
核函數恰恰就像連接低維空間和高維空間的蟲洞,我們可以通過它,在低位空間直接計算高維空間。正如時空中的蟲洞由於星體旋轉和引力作用飄忽不定,在算法上使用核函數也是有限制條件的。如上述定義(1)所述,算法必須能表示成兩個變量的非線性映射的點積。
核函數也有其重要的屬性,如連續,對稱,一般情況下需要是半正定的Gram矩陣。而正定核能夠保證是凸優化問題,且有唯一解。

實際應用中可選擇的內核函數有很多,如線性內核,多項式內核,高斯內核,sigmoid內核等。就如內核函數本身一樣,如何根據實際的數據集特徵選擇合適的內核也是非常tricky的事。我們往往需要根據樣本數,特徵數,數據可視化後數據特徵與類別的關係來綜合選擇。
1.線性內核
使用線性內核,其實就等價於沒有內核,特徵映射的過程是簡單的線性變換。公式如下所示:

k(x,y)=xTy+C(2)

常量C便是非線性內核的可選參數。通常情況下,線性內核的適用場景很多,很多線性可分,甚至線性不可分的數據集,使用線性的效果往往比非線性的要好。尤其是在數據集很大,且特徵很多,或是特徵遠大於數據集時,線性內核便往往能夠取得很不錯的效果。且其相對於其他非線性內核,訓練時要快的多。
2.多項式內核
k(x,y)=(αxTy+C)d(3)

當維度d過大時往往容易造成過擬合問題。通常2度的多項式內核在用來特徵選擇的時候非常有用。
3.高斯(RBF)內核
k(x,y)=exp(xy22σ2)(4)
其另外一種表達:
k(x,y)=exp(γxy2)(5)
Where γ > 0。高斯內核屬於經典的RBF內核,線性內核也屬於一種特殊的RBF內核。一般來說,RBF內核是首選,尤其對於那些類別和特徵值呈非線性關係的數據集。相對於多項式內核,RBF超參要少,相對更爲簡單。且0<Ki,j<1,相對於多項式內核可能從0到無限大之間,其數值計算的壓力也會少很多。而sigmoid的Gram矩陣是條件正定的,使用範圍受限。RBF內核則沒有這個問題。但值得一提的是,RBF內核和L2 Regularization類似,傾向於選擇平滑的特徵。在本文分類中,線性內核往往訓練比起更爲高效,且性能相差無幾
4.Sigmoid 內核
k(x,y)=tanh(αxTy+C)(6)
Where α可以視爲一個scaling 參數,常數C則是shifting參數。sigmoid內核起源於神經網絡,activation函數使用的也是sigmoid function,而每個節點的數據向量也是線性權重組合。使用sigmoid內核的SVM模型等價於一個兩層感知機。雖然其是conditionally positive definite, 實際應用發現也能夠有很好的性能。臺大的一篇論文討論過選擇sigmoid內核參數的問題。
sigmoid_parameters關於各個內核的對比,quora上有一篇從parametric和nonparametric角度的問答,相當經典。

III- 從稀疏內核機到SVM

定義(1)中提到的基於非線性映射的內核方法是基於所有xx訓練數據對的。核函數雖然能夠將高維空間的非線性映射特徵直接在原始空間計算,但當訓練樣本過多時,這樣的計算也是費時費力的。有沒有可能做進一步的特徵集選擇,過濾到無關的樣本點。如下圖所示:
support vector
如果我們想正確的劃分出紅點和藍點,我們只要保證分割的線在左邊的兩個綠點和右邊的一個綠點之間便可以,而無需去考慮所有其他的紅點和藍點,因爲他們對於我們能否正確分類,沒有任何決定性作用。那麼我們爲何苦費時費力的計算所有的數據點呢?答案當然是沒有必要。我們在覈方法上進行稀疏特徵選擇便是稀疏內核機。而最大分類邊際便是其特徵選擇方法。

當然哪些特徵點能夠產生最大分類邊際不是我們看到這幅圖就能憑空想出來的。據說最初做SVM分類時,選的也是定義(4)所用的高斯內核。他們沒有直接使用最小化誤分類率的決策平面,而是通過最小化學習到的密度模型的錯誤概率來確定最優超平面。結果發現,當σ2極限於0時,達到最大邊際。即當σ2越接近於0,那些邊上無關的紅點或藍點對於最終錯誤率的影響越小。最終當達到極限時,只有這些綠點對其有貢獻了。而這些綠點便是所說的支持向量。於是SVM的優化目標就成了在正確分類的情況下,最大化分類邊際。這個最大邊際則是一種稀疏特徵選擇。

參考

[1] Kernel Functions for ML Applications.
[2] A Practise Guide to SVM Classification.
[3] Pattern Recognition and Machine Learning.


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