上篇講述的Soft Margin SVM是爲了解決線性不可分的問題,它解決問題的邏輯是通過允許一部分樣本分得不那麼準確(進入“楚河漢界”)甚至錯分,使得在絕大多數樣本能夠正確地線性可分。本篇引入核函數(kernel),從另一個思維角度來解決線性不可分問題。
問題引入
當樣本在某個特徵空間不可分時,可以通過將樣本映射到另一個特徵空間,在該空間中樣本分佈滿足線性可分條件,再使用SVM進行學習分類:
根據cover定理:將複雜模式分類問題非線性映射到高維空間比映射到低維空間更加可能線性可分。這直觀上是很容易理解的,正如上圖所示。
回到我們SVM的問題,對偶問題和判別函數爲:
將目標函數稍微變下形式 ,可以看到 最終只和樣本內積有關,同樣的最終判別函數也只和內積有關。因此在SVM的計算過程中,我們從頭到尾對樣本的使用都是通過內積形式,建模開銷基本上等同於內積運算的開銷。
此時我們考慮在不同空間下內積的計算,當樣本空間爲 維時,計算一次內積運算需要 次乘法、 次加法,時間開銷爲O(n)。在樣本量較大的情況下,將樣本從低維空間映射到高維空間,計算內積增加的開銷是巨大的。有沒有辦法能降低這種開銷呢?答案是核函數。
核函數(kernel)
給出核函數定義如下:
- 給定輸入空間 和映射空間 ,如果存在映射函數 和函數 ,對於任意 ,滿足 ,則我們將 稱爲核函數。
對於給定的核函數,映射空間和映射函數通常是不唯一的。舉例如下:
爲2維空間, ,取樣本 和 ,則有:
當 爲3維空間時,取 、 都能滿足 ;當 爲4維空間時,取 也能滿足要求。
當我們不使用核函數時,若 爲4維空間,直接計算 的內積需要4次乘法和3次加法,而使用核函數只需要3次乘法,1次加法,計算次數顯著下降。當 爲高維空間時,這種技巧能降低巨大的計算開銷。
Kernel SVM
先將線性不可分情況下的樣本映射到高維空間,得到對偶問題和判別函數:
使用核函數轉換,得到:
不論最後 函數映射後的特徵空間維度多高,SVM的求解都在原樣本空間內用核函數進行。
常用的核
由上所述,選擇不同的核函數實際上對應的是不同的映射方式。介紹幾種常用的核函數。
線性核
即SVM中最基本的 ,不進行任何映射變換。在樣本線性可分情況下(實際中一般通過訓練Linear SVM觀察擬合效果來判斷是否線性可分),線性核運算開銷小,通常能達到比較好的效果。
多項式核
多項式覈定義如下:
多項式覈實際中應用比較少,在線性可分情況下性能不如線性核,在線性不可分情況下效果不如高斯核。
高斯核
高斯核(Gaussian Kernel)也稱radial basis function(RBF) kernel,定義如下:
高斯核是最強大、應用最廣泛的核函數。線性不可分情況下能展現出強大的分類能力,但是開銷較大。爲何說高斯核最強大,因爲高斯核可以看做“無窮度數的正則化多項式核”。首先將指數函數進行泰勒展開:
只寫出展開式前幾項,看得更清晰:
與多項式覈定義對比,每一項幾乎都是最簡化版的多項式核。再考慮將上述指數函數進行正則化:
可以看到我們幾乎得到了高斯核,由此可以論證高斯核是“無窮度數的正則化多項式核”,它實際上考慮了常數項、一次項、二次項…一直到無窮多次項,功能強大之處一目瞭然。
在實際中,具體使用哪種核一是靠經驗分析,二是試錯調參。在具體應用中,分析數據進行嘗試,再通過模型結果反過來理解數據,沒有捷徑可走。對核有一定的瞭解能讓調參變得更有跡可循。
本文先闡述了核函數的引入來由,具體講述了核函數的定義和SVM中如何應用核函數來降低計算量,最後列舉了SVM中常用的幾種核函數並給出解釋。