注:關於支持向量機系列文章是借鑑大神的神做,加以本身的理解寫成的;若對原做者有損請告知,我會及時處理。轉載請標明來源。html
我在支持向量機系列中主要講支持向量機的公式推導,第一部分講到推出拉格朗日對偶函數的對偶因子α;第二部分是SMO算法對於對偶因子的求解;第三部分是核函數的原理與應用,講核函數的推理及經常使用的核函數有哪些;第四部分是支持向量機的應用,按照機器學習實戰的代碼詳細解讀。算法
機器學習之支持向量機(三):核函數和KKT條件的理解post
機器學習之支持向量機(四):支持向量機的Python語言實現性能
設χ是輸入空間(歐氏空間或離散集合),Η爲特徵空間(希爾伯特空間),若是存在一個從χ到Η的映射 學習
φ(x): χ→Η優化
使得對全部的x,z∈χ,函數Κ(x,z)=φ(x)∙φ(z), 則稱Κ(x,z)爲核函數,φ(x)爲映射函數,φ(x)∙φ(z)爲x,z映射到特徵空間上的內積。url
因爲映射函數十分複雜難以計算,在實際中,一般都是使用核函數來求解內積,計算複雜度並無增長,映射函數僅僅做爲一種邏輯映射,表徵着輸入空間到特徵空間的映射關係。至於爲何須要映射後的特徵而不是最初的特徵來參與計算,爲了更好地擬合是其中一個緣由,另外的一個重要緣由是樣例可能存在線性不可分的狀況,而將特徵映射到高維空間後,每每就可分了。spa
將核函數形式化定義,若是原始特徵內積是,映射後爲,那麼定義核函數(Kernel)爲
到這裏,咱們能夠得出結論,若是要實現該節開頭的效果,只需先計算,而後計算便可,然而這種計算方式是很是低效的。好比最初的特徵是n維的,咱們將其映射到維,而後再計算,這樣須要的時間。那麼咱們能不能想辦法減小計算時間呢?
先看一個例子,假設x和z都是n維的,
展開後,得:
這個時候發現咱們能夠只計算原始特徵x和z內積的平方(時間複雜度是O(n)),就等價與計算映射後特徵的內積。也就是說咱們不須要花時間了。
如今看一下映射函數(n=3時),根據上面的公式,獲得
也就是說核函數只能在選擇這樣的做爲映射函數時纔可以等價於映射後特徵的內積。
再看另一個核函數,高斯核函數:
這時,若是x和z很相近(),那麼核函數值爲1,若是x和z相差很大(),那麼核函數值約等於0。因爲這個函數相似於高斯分佈,所以稱爲高斯核函數,也叫作徑向基函數(Radial Basis Function 簡稱RBF)。它可以把原始特徵映射到無窮維。
下面有張圖說明在低維線性不可分時,映射到高維後就可分了,使用高斯核函數。
注意,使用核函數後,怎麼分類新來的樣本呢?線性的時候咱們使用SVM學習出w和b,新來樣本x的話,咱們使用來判斷,若是值大於等於1,那麼是正類,小於等因而負類。在二者之間,認爲沒法肯定。若是使用了核函數後,就變成了,是否先要找到,而後再預測?答案確定不是了,找很麻煩,回想咱們以前說過的。
問題:給定一個函數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是有效的核函數 ==> 核函數矩陣K是對稱半正定的。
Mercer定理代表爲了證實K是有效的核函數,那麼咱們不用去尋找,而只須要在訓練集上求出各個,而後判斷矩陣K是不是半正定(使用左上角主子式大於等於零等方法)便可。
1 線性核函數
線性內核是最簡單的內核函數。 它由內積<x,y>加上可選的常數c給出。 使用線性內核的內核算法一般等於它們的非內核對應物,即具備線性內核的KPCA與標準PCA相同。
表達式 :
2 多項式核函數
多項式核是非固定內核。 多項式內核很是適合於全部訓練數據都歸一化的問題。
表達式:k(x,y)=(αx T y + c)d
可調參數是斜率α,常數項c和多項式度d。
3 高斯核函數
高斯核是徑向基函數核的一個例子。
或者,它也可使用來實現
可調參數sigma在內核的性能中起着主要做用,而且應該仔細地調整到手頭的問題。 若是太高估計,指數將幾乎呈線性,高維投影將開始失去其非線性功率。 另外一方面,若是低估,該函數將缺少正則化,而且決策邊界將對訓練數據中的噪聲高度敏感。
4 指數的內核
指數核與高斯核密切相關,只有正態的平方被忽略。 它也是一個徑向基函數內核。
表達式:
5 拉普拉斯算子核
拉普拉斯核心徹底等同於指數內核,除了對sigma參數的變化不那麼敏感。 做爲等價的,它也是一個徑向基函數內核。
表達式:
重要的是注意,關於高斯內核的σ參數的觀察也適用於指數和拉普拉斯內核。
KKT條件是解決最優化問題的時用到的一種方法。咱們這裏提到的最優化問題一般是指對於給定的某一函數,求其在指定做用域上的全局最小值。提到KKT條件通常會附帶的提一下拉格朗日乘子。對學太高等數學的人來講比較拉格朗日乘子應該會有些印象。兩者均是求解最優化問題的方法,不一樣之處在於應用的情形不一樣。有三種狀況:無約束條件,等式約束條件,不等式約束條件。
這是最簡單的狀況,解決方法一般是函數對變量求導,令求導函數等於0的點多是極值點。將結果帶回原函數進行驗證便可。
設目標函數爲f(x),約束條件爲hk(x),l 表示有 l 個約束條件,如:
則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,拉格朗日法這裏在提一下,由於後面提到的KKT條件是對拉格朗日乘子法的一種泛化。
定義拉格朗日函數F(x) :
其中λk是各個約束條件的待定係數。
而後解變量的偏導方程:
設目標函數f(x),不等式約束爲g(x),添加上等式約束條件h(x)。此時的約束優化問題描述以下:
則咱們定義不等式約束下的拉格朗日函數L,則L表達式爲:
其中 f(x) 是原目標函數,hj(x) 是第j個等式約束條件,λj 是對應的約束係數,gk 是不等式約束,uk 是對應的約束係數。
此時若要求解上述優化問題,必須知足下述條件(也是咱們的求解條件):
這些求解條件就是KKT條件。(1)是對拉格朗日函數取極值時候帶來的一個必要條件,(2)是拉格朗日系數約束(同等式狀況),(3)是不等式約束狀況,(4)是互補鬆弛條件,(5)、(6)是原約束條件。
對於通常的任意問題而言,KKT條件是使一組解成爲最優解的必要條件,當原問題是凸問題的時候,KKT條件也是充分條件。
現有以下不等式約束優化問題:
此時引入鬆弛變量能夠將不等式約束變成等式約束。設a1和b1爲兩個鬆弛變量,則上述的不等式約束可寫爲:
則該問題的拉格朗日函數爲:
根據拉格朗日乘子法,求解方程組:
一樣 μ2b1=0,來分析g2(x)起做用和不起做用約束。
因而推出條件:
搞了一天把支持向量機的前三篇寫完了,確定是寫的不足,鑑於SVM難度大和本人的水平有限,只能作到這樣了。不足的地方請各位博友多多指教,第四部分的支持向量機的應用,是根據機器學習實戰一步步實現,會給出詳細的代碼介紹。
機器學習之支持向量機(四):支持向量機的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