SVM核函數的選擇對於其性能的表現有相當重要的做用,尤爲是針對那些線性不可分的數據,所以核函數的選擇在SVM算法中就顯得相當重要。對於核技巧咱們知道,其目的是但願經過將輸入空間內線性不可分的數據映射到一個高緯的特徵空間內使得數據在特徵空間內是可分的,咱們定義這種映射爲ϕ(x)ϕ(x) ,那麼咱們就能夠把求解約束最優化問題變爲算法
minαs.t.αi≥0,12∑Ni=1∑Nj=1αiαjyiyj(ϕi⋅ϕj)−∑Ni=1αi∑Ni=1αiyi=0i=1,2,...,Nminα12∑i=1N∑j=1Nαiαjyiyj(ϕi⋅ϕj)−∑i=1Nαis.t.∑i=1Nαiyi=0αi≥0,i=1,2,...,N
可是因爲從輸入空間到特徵空間的這種映射會使得維度發生爆炸式的增加,所以上述約束問題中內積ϕi⋅ϕjϕi⋅ϕj 的運算會很是的大以致於沒法承受,所以一般咱們會構造一個核函數網絡
κ(xi,xj)=ϕ(xi)⋅ϕ(xj)κ(xi,xj)=ϕ(xi)⋅ϕ(xj)
從而避免了在特徵空間內的運算,只須要在輸入空間內就能夠進行特徵空間的內積運算。經過上面的描述咱們知道要想構造核函數κκ ,咱們首先要肯定輸入空間到特徵空間的映射,可是若是想要知道輸入空間到映射空間的映射,咱們須要明確輸入空間內數據的分佈狀況,但大多數狀況下,咱們並不知道本身所處理的數據的具體分佈,故通常很難構造出徹底符合輸入空間的核函數,所以咱們經常使用以下幾種經常使用的核函數來代替本身構造核函數:函數
- 線性核函數
κ(x,xi)=x⋅xiκ(x,xi)=x⋅xi
線性核,主要用於線性可分的狀況,咱們能夠看到特徵空間到輸入空間的維度是同樣的,其參數少速度快,對於線性可分數據,其分類效果很理想,所以咱們一般首先嚐試用線性核函數來作分類,看看效果如何,若是不行再換別的
- 多項式核函數
κ(x,xi)=((x⋅xi)+1)dκ(x,xi)=((x⋅xi)+1)d
多項式核函數能夠實現將低維的輸入空間映射到高緯的特徵空間,可是多項式核函數的參數多,當多項式的階數比較高的時候,核矩陣的元素值將趨於無窮大或者無窮小,計算複雜度會大到沒法計算。
- 高斯(RBF)核函數
κ(x,xi)=exp(−||x−xi||2δ2)κ(x,xi)=exp(−||x−xi||2δ2)
高斯徑向基函數是一種局部性強的核函數,其能夠將一個樣本映射到一個更高維的空間內,該核函數是應用最廣的一個,不管大樣本仍是小樣本都有比較好的性能,並且其相對於多項式核函數參數要少,所以大多數狀況下在不知道用什麼核函數的時候,優先使用高斯核函數。
- sigmoid核函數
κ(x,xi)=tanh(η<x,xi>+θ)κ(x,xi)=tanh(η<x,xi>+θ)
採用sigmoid核函數,支持向量機實現的就是一種多層神經網絡。
所以,在選用核函數的時候,若是咱們對咱們的數據有必定的先驗知識,就利用先驗來選擇符合數據分佈的核函數;若是不知道的話,一般使用交叉驗證的方法,來試用不一樣的核函數,偏差最下的即爲效果最好的核函數,或者也能夠將多個核函數結合起來,造成混合核函數。在吳恩達的課上,也曾經給出過一系列的選擇核函數的方法:性能
- 若是特徵的數量大到和樣本數量差很少,則選用LR或者線性核的SVM;
- 若是特徵的數量小,樣本的數量正常,則選用SVM+高斯核函數;
- 若是特徵的數量小,而樣本的數量很大,則須要手工添加一些特徵從而變成第一種狀況。