機器學習之支持向量機(三):核函數和KKT條件的理解

注:關於支持向量機系列文章是借鑑大神的神做,加以本身的理解寫成的;若對原做者有損請告知,我會及時處理。轉載請標明來源。html

序:

我在支持向量機系列中主要講支持向量機的公式推導,第一部分講到推出拉格朗日對偶函數的對偶因子α;第二部分是SMO算法對於對偶因子的求解;第三部分是核函數的原理與應用,講核函數的推理及經常使用的核函數有哪些;第四部分是支持向量機的應用,按照機器學習實戰的代碼詳細解讀。算法

機器學習之支持向量機(一):支持向量機的公式推導機器學習

機器學習之支持向量機(二):SMO算法函數

機器學習之支持向量機(三):核函數和KKT條件的理解post

機器學習之支持向量機(四):支持向量機的Python語言實現性能

1 核函數

1.1 核函數的定義

設χ是輸入空間(歐氏空間或離散集合),Η爲特徵空間(希爾伯特空間),若是存在一個從χ到Η的映射 學習

φ(x): χ→Η優化

使得對全部的x,z∈χ,函數Κ(x,z)=φ(x)∙φ(z), 則稱Κ(x,z)爲核函數,φ(x)爲映射函數,φ(x)∙φ(z)爲x,z映射到特徵空間上的內積。url

因爲映射函數十分複雜難以計算,在實際中,一般都是使用核函數來求解內積,計算複雜度並無增長,映射函數僅僅做爲一種邏輯映射,表徵着輸入空間到特徵空間的映射關係。至於爲何須要映射後的特徵而不是最初的特徵來參與計算,爲了更好地擬合是其中一個緣由,另外的一個重要緣由是樣例可能存在線性不可分的狀況,而將特徵映射到高維空間後,每每就可分了。spa

1.2 核函數的計算原理

將核函數形式化定義,若是原始特徵內積是clip_image014[4],映射後爲clip_image016[6],那麼定義核函數(Kernel)爲

到這裏,咱們能夠得出結論,若是要實現該節開頭的效果,只需先計算clip_image020[10],而後計算clip_image022[10]便可,然而這種計算方式是很是低效的。好比最初的特徵是n維的,咱們將其映射到clip_image024[6]維,而後再計算,這樣須要clip_image026[6]的時間。那麼咱們能不能想辦法減小計算時間呢?

先看一個例子,假設x和z都是n維的,

展開後,得:

這個時候發現咱們能夠只計算原始特徵x和z內積的平方(時間複雜度是O(n)),就等價與計算映射後特徵的內積。也就是說咱們不須要花clip_image026[7]時間了。

如今看一下映射函數(n=3時),根據上面的公式,獲得

也就是說核函數clip_image033[4]只能在選擇這樣的clip_image004[11]做爲映射函數時纔可以等價於映射後特徵的內積。

再看另一個核函數,高斯核函數:

這時,若是x和z很相近(clip_image044[6]),那麼核函數值爲1,若是x和z相差很大(clip_image046[6]),那麼核函數值約等於0。因爲這個函數相似於高斯分佈,所以稱爲高斯核函數,也叫作徑向基函數(Radial Basis Function 簡稱RBF)。它可以把原始特徵映射到無窮維。

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

注意,使用核函數後,怎麼分類新來的樣本呢?線性的時候咱們使用SVM學習出w和b,新來樣本x的話,咱們使用clip_image050[8]來判斷,若是值大於等於1,那麼是正類,小於等因而負類。在二者之間,認爲沒法肯定。若是使用了核函數後,clip_image050[9]就變成了clip_image052[6],是否先要找到clip_image054[8],而後再預測?答案確定不是了,找clip_image054[9]很麻煩,回想咱們以前說過的。

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

1.3 核函數有效性的斷定

問題:給定一個函數K,咱們可否使用K來替代計算clip_image022[11],也就說,是否可以找出一個clip_image061[12],使得對於全部的x和z,都有clip_image018[9]?即好比給出了clip_image063[8],是否可以認爲K是一個有效的核函數。

下面來解決這個問題,給定m個訓練樣本clip_image065[6],每個clip_image067[8]對應一個特徵向量。那麼,咱們能夠將任意兩個clip_image067[9]clip_image069[6]帶入K中,計算獲得clip_image071[6]。i 能夠從1到m,j 能夠從1到m,這樣能夠計算出m*m的核函數矩陣(Kernel Matrix)。爲了方便,咱們將核函數矩陣和clip_image073[10]都使用K來表示。若是假設K是有效地核函數,那麼根據核函數定義:

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

最後一步和前面計算clip_image063[9]時相似。從這個公式咱們能夠看出,若是K是個有效的核函數(即clip_image073[11]clip_image080[6]等價),那麼,在訓練集上獲得的核函數矩陣K應該是半正定的(clip_image082[6])。這樣咱們獲得一個核函數的必要條件:K是有效的核函數 ==> 核函數矩陣K是對稱半正定的。

 

Mercer定理代表爲了證實K是有效的核函數,那麼咱們不用去尋找clip_image061[13],而只須要在訓練集上求出各個clip_image086[6],而後判斷矩陣K是不是半正定(使用左上角主子式大於等於零等方法)便可。

1.4 常見的核函數

1 線性核函數

線性內核是最簡單的內核函數。 它由內積<x,y>加上可選的常數c給出。 使用線性內核的內核算法一般等於它們的非內核對應物,即具備線性內核的KPCA與標準PCA相同。

表達式 :

2 多項式核函數

多項式核是非固定內核。 多項式內核很是適合於全部訓練數據都歸一化的問題。

表達式:k(x,y)=(αx T y + c)d

可調參數是斜率α,常數項c和多項式度d。

3 高斯核函數

高斯核是徑向基函數核的一個例子。

或者,它也可使用來實現

可調參數sigma在內核的性能中起着主要做用,而且應該仔細地調整到手頭的問題。 若是太高估計,指數將幾乎呈線性,高維投影將開始失去其非線性功率。 另外一方面,若是低估,該函數將缺少正則化,而且決策邊界將對訓練數據中的噪聲高度敏感。

 4 指數的內核

指數核與高斯核密切相關,只有正態的平方被忽略。 它也是一個徑向基函數內核。

表達式:

 5 拉普拉斯算子核

拉普拉斯核心徹底等同於指數內核,除了對sigma參數的變化不那麼敏感。 做爲等價的,它也是一個徑向基函數內核。

表達式:

重要的是注意,關於高斯內核的σ參數的觀察也適用於指數和拉普拉斯內核。

 2 KKT 條件

KKT條件是解決最優化問題的時用到的一種方法。咱們這裏提到的最優化問題一般是指對於給定的某一函數,求其在指定做用域上的全局最小值。提到KKT條件通常會附帶的提一下拉格朗日乘子。對學太高等數學的人來講比較拉格朗日乘子應該會有些印象。兩者均是求解最優化問題的方法,不一樣之處在於應用的情形不一樣。有三種狀況:無約束條件,等式約束條件,不等式約束條件。

2.1 無約束條件

這是最簡單的狀況,解決方法一般是函數對變量求導,令求導函數等於0的點多是極值點。將結果帶回原函數進行驗證便可。

2.2 等式約束條件

設目標函數爲f(x),約束條件爲hk(x),l 表示有 l 個約束條件,如:

則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,拉格朗日法這裏在提一下,由於後面提到的KKT條件是對拉格朗日乘子法的一種泛化。

定義拉格朗日函數F(x) :

其中λk是各個約束條件的待定係數。

而後解變量的偏導方程:

2.3 不等式約束條件

 設目標函數f(x),不等式約束爲g(x),添加上等式約束條件h(x)。此時的約束優化問題描述以下:

 則咱們定義不等式約束下的拉格朗日函數L,則L表達式爲:

 其中 f(x) 是原目標函數,hj(x) 是第j個等式約束條件,λ是對應的約束係數,g是不等式約束,u是對應的約束係數。

  此時若要求解上述優化問題,必須知足下述條件(也是咱們的求解條件):

 這些求解條件就是KKT條件。(1)是對拉格朗日函數取極值時候帶來的一個必要條件,(2)是拉格朗日系數約束(同等式狀況),(3)是不等式約束狀況,(4)是互補鬆弛條件,(5)、(6)是原約束條件。

      對於通常的任意問題而言,KKT條件是使一組解成爲最優解的必要條件,當原問題是凸問題的時候,KKT條件也是充分條件。

2.4 舉例說明

 現有以下不等式約束優化問題:

此時引入鬆弛變量能夠將不等式約束變成等式約束。設a1和b1爲兩個鬆弛變量,則上述的不等式約束可寫爲:

則該問題的拉格朗日函數爲:

根據拉格朗日乘子法,求解方程組:

一樣 μ2b1=0,來分析g2(x)起做用和不起做用約束。

因而推出條件:

搞了一天把支持向量機的前三篇寫完了,確定是寫的不足,鑑於SVM難度大和本人的水平有限,只能作到這樣了。不足的地方請各位博友多多指教,第四部分的支持向量機的應用,是根據機器學習實戰一步步實現,會給出詳細的代碼介紹。

機器學習之支持向量機(一):支持向量機的公式推導

機器學習之支持向量機(二):SMO算法

機器學習之支持向量機(三):核函數和KKT條件的理解

機器學習之支持向量機(四):支持向量機的Python語言實現

參考:

1  支持向量機(三)核函數 https://www.cnblogs.com/jerrylead/archive/2011/03/18/1988406.html

2  機器學習---核函數  https://www.cnblogs.com/xiaohuahua108/p/6146118.html

3 理解支持向量機(二)核函數  http://blog.csdn.net/shijing_0214/article/details/51000845

4  KKT條件介紹  http://blog.csdn.net/johnnyconstantine/article/details/46335763

相關文章
相關標籤/搜索