1. 程式人生 > >svm常用核函式及選擇核函式的方法

svm常用核函式及選擇核函式的方法

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,...,N minα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+高斯核函式; 如果特徵的數量小,而樣本的數量很大,則需要手工新增一些特徵從而變成第一種情況 本人認為:樣本數量相對於特徵數偏少時,容易線性可分;比如說2*2,那麼兩個維度,兩個樣本,線性可分就非常簡單;如果另外一個極端,即線性可分的概率就會很低;一種方法採用高斯核,另外一種方法增加特徵;說白了本質上就是增加維度;縮小特徵數與樣本數之間的差距,來達到線性可分 ;