核函數與徑向基函數 (Radial Basis Function 簡稱 RBF)詳解

1.核函數


1.1核函數的由來

-----------還記得爲何要選用核函數麼?-----------

對於這個問題,在Jasper's Java Jacal博客《SVM入門(七)爲何需要核函數》中做了很詳細的闡述,另外博主對於SVM德入門學習也是做了很詳細的闡述,有興趣的可以去學習,寫得相當好,特意轉載了過來,留念一下。

如果提供的樣本線性不可分,結果很簡單,線性分類器的求解程序會無限循環,永遠也解不出來。這必然使得它的適用範圍大大縮小,而它的很多優點我們實在不原意放棄,怎麼辦呢?是否有某種方法,讓線性不可分的數據變得線性可分呢?

例子是下面這張圖:


我們把橫軸上端點a和b之間紅色部分裏的所有點定爲正類,兩邊的黑色部分裏的點定爲負類。試問能找到一個線性函數把兩類正確分開麼?不能,因爲二維空間裏的線性函數就是指直線,顯然找不到符合條件的直線。

但我們可以找到一條曲線,例如下面這一條:



顯然通過點在這條曲線的上方還是下方就可以判斷點所屬的類別(你在橫軸上隨便找一點,算算這一點的函數值,會發現負類的點函數值一定比0大,而正類的一定比0小)。這條曲線就是我們熟知的二次曲線,它的函數表達式可以寫爲:


問題只是它不是一個線性函數,但是,下面要注意看了,新建一個向量y和a:


這樣g(x)就可以轉化爲f(y)=<a,y>,你可以把y和a分別迴帶一下,看看等不等於原來的g(x)。用內積的形式寫你可能看不太清楚,實際上f(y)的形式就是:

g(x)=f(y)=ay

在任意維度的空間中,這種形式的函數都是一個線性函數(只不過其中的a和y都是多維向量罷了),因爲自變量y的次數不大於1。


看出妙在哪了麼?原來在二維空間中一個線性不可分的問題,映射到四維空間後,變成了線性可分的!因此這也形成了我們最初想解決線性不可分問題的基本思路——向高維空間轉化,使其變得線性可分。


而轉化最關鍵的部分就在於找到x到y的映射方法。遺憾的是,如何找到這個映射,沒有系統性的方法(也就是說,純靠猜和湊)。具體到我們的文本分類問題,文本被表示爲上千維的向量,即使維數已經如此之高,也常常是線性不可分的,還要向更高的空間轉化。其中的難度可想而知。

小Tips:爲什麼說f(y)=ay是四維空間裏的函數?

大家可能一時沒看明白。回想一下我們二維空間裏的函數定義
g(x)=ax+b
變量x是一維的,爲什麼說它是二維空間裏的函數呢?因爲還有一個變量我們沒寫出來,它的完整形式其實是
y=g(x)=ax+b

y=ax+b
看看,有幾個變量?兩個,二維。
再看看
f(y)=ay
裏面的y是三維的變量,再加上f(y)成爲四維的了。


用一個具體文本分類的例子來看看這種向高維空間映射從而分類的方法如何運作,想象一下,我們文本分類問題的原始空間是1000維的(即每個要被分類的文檔被表示爲一個1000維的向量),在這個維度上問題是線性不可分的。現在我們有一個2000維空間裏的線性函數

f(x)=<w,x>+b

注意向量的右上角有個 ’哦。它能夠將原問題變得可分。式中的 w和x都是2000維的向量,只不過w是定值,而x是變量(好吧,嚴格說來這個函數是2001維的,哈哈),現在我們的輸入呢,是一個1000維的向量x,分類的過程是先把x變換爲2000維的向量x,然後求這個變換後的向量x與向量w的內積,再把這個內積的值和b相加,就得到了結果,看結果大於閾值還是小於閾值就得到了分類結果。

你發現了什麼?我們其實只關心那個高維空間裏內積的值,那個值算出來了,分類結果就算出來了。而從理論上說, x是經由x變換來的,因此廣義上可以把它叫做x的函數(有一個x,就確定了一個x,對吧,確定不出第二個),而w是常量,它是一個低維空間裏的常量w經過變換得到的,所以給了一個w 和x的值,就有一個確定的f(x)值與其對應。這讓我們幻想,是否能有這樣一種函數K(w,x),他接受低維空間的輸入值,卻能算出高維空間的內積值<w,x>?


如果有這樣的函數,那麼當給了一個低維空間的輸入x以後,

g(x)=K(w,x)+b

f(x)=<w,x>+b

這兩個函數的計算結果就完全一樣,我們也就用不着費力找那個映射關係,直接拿低維的輸入往g(x)裏面代就可以了(再次提醒,這回的g(x)就不是線性函數啦,因爲你不能保證K(w,x)這個表達式裏的x次數不高於1哦)。

萬幸的是,這樣的K(w,x)確實存在(發現凡是我們人類能解決的問題,大都是巧得不能再巧,特殊得不能再特殊的問題,總是恰好有些能投機取巧的地方纔能解決,由此感到人類的渺小),它被稱作核函數(核,kernel),而且還不止一個,事實上,只要是滿足了Mercer條件的函數(後面會具體寫出),都可以作爲核函數。核函數的基本作用就是接受兩個低維空間裏的向量,能夠計算出經過某個變換後在高維空間裏的向量內積值。幾個比較常用的核函數,俄,教課書裏都列過,我就不敲了(懶!)。

回想我們上節說的求一個線性分類器,它的形式應該是:


現在這個就是高維空間裏的線性函數(爲了區別低維和高維空間裏的函數和向量,我改了函數的名字,並且給w和x都加上了 ’),我們就可以用一個低維空間裏的函數(再一次的,這個低維空間裏的函數就不再是線性的啦)來代替,


又發現什麼了?f(x’) 和g(x)裏的α,y,b全都是一樣一樣的!這就是說,儘管給的問題是線性不可分的,但是我們就硬當它是線性問題來求解,只不過求解過程中,凡是要求內積 的時候就用你選定的核函數來算。這樣求出來的α再和你選定的核函數一組合,就得到分類器啦!


明白了以上這些,會自然的問接下來兩個問題:

1. 既然有很多的核函數,針對具體問題該怎麼選擇?

2. 如果使用核函數向高維空間映射後,問題仍然是線性不可分的,那怎麼辦?


第一個問題現在就可以回答你:對核函數的選擇,現在還缺乏指導原則!各種實驗的觀察結果(不光是文本分類)的確表明,某些問題用某些核函數效果很 好,用另一些就很差,但是一般來講,徑向基核函數是不會出太大偏差的一種,首選。(我做文本分類系統的時候,使用徑向基核函數,沒有參數調優的情況下,絕 大部分類別的準確和召回都在85%以上,可見。雖然libSVM的作者林智仁認爲文本分類用線性核函數效果更佳,待考證)

對第二個問題的解決則引出了我們下一節的主題:鬆弛變量。

==================

2.核函數的定義及計算複雜度

將核函數形式化定義,如果原始特徵內積是,映射後爲,那麼定義核函數(Kernel)爲:


到這裏,我們可以得出結論,我們計算SVM的分類問題的時候,只需先計算,然後計算即可,然而這種計算方式是非常低效的。比如最初的特徵是n維的,我們將其映射到n^2維,然後再計算,這樣需要的時間。那麼我們能不能想辦法減少計算時間呢? 
先看一個例子,假設x和z都是n維的,

展開後,得

這個時候發現我們可以只計算原始特徵x和z內積的平方(時間複雜度是O(n)),就等價與計算映射後特徵的內積。也就是說我們不需要花時間了。
更一般地,核函數對應的映射後特徵維度爲。(求解方法參見http://zhidao.baidu.com/question/16706714.html)。 
由於計算的是內積,我們可以想到IR中的餘弦相似度,如果x和z向量夾角越小,那麼核函數值越大,反之,越小。
因此,核函數值是的相似度。

2.徑向基函數——Radial Basis Function(RBF)

所謂徑向基函數 (Radial Basis Function 簡稱 RBF), 就是某種沿徑向對稱的標量函數。 通常定義爲空間中任一點x到某
一中心xc之間歐氏距離的單調函數 ,可記作 k(||x-xc||), 其作用往往是局部的 , 即當x遠離xc時函數取值很小。

最常用的徑向基函數是高斯核函數 ,形式爲 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中x_c爲核函數中心,σ爲函數的寬度參數 , 控制了函數的徑向作用範圍。如果x和x_c很相近那麼核函數值爲1,如果x和x_c相差很大那麼核函數值約等於0。由於這個函數類似於高斯分佈,因此稱爲高斯核函數,也叫做徑向基函數(Radial Basis Function 簡稱RBF)。它能夠把原始特徵映射到無窮維。


那麼核函數值約等於0。由於這個函數類似於高斯分佈,因此稱爲高斯核函數,也叫做徑向基函數(Radial Basis

Function 簡稱RBF)。它能夠把原始特徵映射到無窮維。

既然高斯核函數能夠比較x和z的相似度,並映射到0到1,回想logistic迴歸,sigmoid函數可以,因此還有sigmoid核

函數等等。

==================

核函數有很多種,如線性核、多項式核、Sigmoid 核和 RBF(Radial Basis function)核。本文選定 RBF 核爲 SVM 的核函數(RBF 核K(x, y) = exp(-γ || x -y ||的平方),γ > 0)。因爲RBF 核可以將樣本映射到一個更高維的空間,可以處理當類標籤(Class Labels)和特徵之間的關係是非線性時的樣例。Keerthi 等[25]證明了一個有懲罰參數C 的線性核同有參數(C,γ )(其中C 爲懲罰因子,γ 爲核參數)的 RBF 核具有相同的性能。對某些參數,Sigmoid核同 RBF 核具有相似的性能[26]。另外,RBF 核與多項式核相比具有參數少的優點。因爲參數的個數直接影響到模型選擇的複雜性。非常重要的一點是0< Kij ≤1與多項式核相反,核值可能趨向無限(γxi xj + r >1)或者0 < γxi xj + r <1,跨度非常大。而且,必須注意的是Sigmoid 核在某些參數下是不正確的(例如,沒有兩個向量的內積)。

用交叉驗證找到最好的參數 C 和γ 。使用 RBF 核時,要考慮兩個參數 C 和γ 。因爲參數的選擇並沒有一定的先驗知識,必須做某種類型的模型選擇(參數搜索)。目的是確定好的(C,γ)使得分類器能正確的預測未知數據(即測試集數 據),有較高的分類精確率。值得注意的是得到高的訓練正確率即是分類器預測類標籤已知的訓練數據的正確率)不能保證在測試集上具有高的預測精度。因此,通 常採用交叉驗證方法提高預測精度。k 折交叉驗證(k-fold cross validation)

=========================

下面有張圖說明在低維線性不可分時,映射到高維後就可分了,使用高斯核函數。



來自Eric Xing的slides

注意,使用核函數後,怎麼分類新來的樣本呢?線性的時候我們使用SVM學習出w和b,新來樣本x的話,我們使用來判斷,如果值大於等於1,那麼是正類,小於等於是負類。在兩者之間,認爲無法確定。如果使用了核函數後,就變成了,是否先要找到,然後再預測?答案肯定不是了,找很麻煩,回想我們之前說過的


只需將clip_image057[4]替換成,然後值的判斷同上。


建議首選RBF核函數進行高維投影,因爲:

  1. 能夠實現非線性映射;( 線性核函數可以證明是他的一個特例;SIGMOID核函數在某些參數上近似RBF的功能。)
  2. 參數的數量影響模型的複雜程度,多項式核函數參數較多。
  3. the RBF kernel has less numerical difficulties.

3. 核函數有效性判定

問題:給定一個函數K,我們能否使用K來替代計算,也就說,是否能夠找出一個,使得對於所有的x和z,都有
比如給出了,是否能夠認爲K是一個有效的核函數。
下面來解決這個問題,給定m個訓練樣本,每一個對應一個特徵向量。那麼,我們可以將任意兩個帶入K中,計算得到。i可以從1到m,j可以從1到m,這樣可以計算出m*m的核函數矩陣(Kernel Matrix)。爲了方便,我們將核函數矩陣和都使用K來表示。

如果假設K是有效地核函數,那麼根據核函數定義

可見,矩陣K應該是個對稱陣。讓我們得出一個更強的結論,首先使用符號來表示映射函數的第k維屬性值。那麼對於任意向量z,得

最後一步和前面計算時類似。從這個公式我們可以看出,如果K是個有效的核函數(即等價),那麼,在訓練集上得到的核函數矩陣K應該是半正定的(K>=0).

這樣我們得到一個核函數的必要條件

K是有效的核函數 ==> 核函數矩陣K是對稱半正定的。

可幸的是,這個條件也是充分的,由Mercer定理來表達。 

Mercer定理:

如果函數K是上的映射(也就是從兩個n維向量映射到實數域)。那麼如果K是一個有效核函數(也稱爲Mercer核函數),那麼當且僅當對於訓練樣例,其相應的核函數矩陣是對稱半正定的。


Mercer定理表明爲了證明K是有效的核函數,那麼我們不用去尋找,而只需要在訓練集上求出各個,然後判斷矩陣K是否是半正定(使用左上角主子式大於等於零等方法)即可。

許多其他的教科書在Mercer定理證明過程中使用了L^2範數和再生希爾伯特空間等概念,但在特徵是n維的情況下,這裏給出的證明是等價的。

=========================

參考自:

1、互動百科

2、Jasper's Java Jacal--《SVM入門(七)爲何需要核函數》

3、博文:徑向基核函數 (Radial Basis Function)--RBF | 丕子 +http://www.zhizhihu.com/html/y2010/2103.html

4、支撐向量機(三)核函數:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988406.html

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