8 Support vector machine(3)

本學習筆記參考自Andrew的機器學習課程(點此打開), 內容來自視頻以及其講義, 部分內容引用網友的學習筆記,會特別註明


本集內容


1. 核函數(kernels)
2. 軟間隔(Soft Margin)
3. SMO算法


核函數


特徵映射


首先在前面第三節內容中,有一個面積—房價關係的例子,如果只考慮面積一個特徵,那麼我們用線性規劃得到的結果是一條直線,但事實上這條直線的表現是欠擬合的。更符合實際情況的或許是一個二次曲線,那麼要從一個特徵通過線性規劃得到一個迴歸結果爲二次曲線的話,我們需要對這一個特徵x(x表示面積)映射到更高維的(x, x^2),這樣去擬合就能得到二次曲線。這說明一個學習問題有時候爲了得到更好的擬合效果,我們需要將原始特徵映射到更高緯度上,原始特徵稱作問題的屬性,映射後的向量才叫做特徵。這舉一個簡單例子,x表示一個問題的屬性,是一維的,用φ表示特徵映射,映射得到三維特徵向量:


所以在上一節推導出來的對偶優化的結果需要把所有的x替換爲φ(x),所有內積 <x,z>變成<φ(x),φ(z)>。事實上需要特徵映射不只是爲了更好的擬合模型,後面會介紹到很多原始問題是線性不可分的,但往往經過高緯映射後就線性可分了(即存在一個超平面能夠把正負樣本分開)。

核函數定義以及舉例


爲什麼有核函數,是因爲映射後的向量往往維度過高,甚至是無限維,計算效率非常低,引入核函數可以能夠漂亮的解決高緯度向量內積計算效率問題。核函數定義如下:

也就是x和z的內積<x,z>可以替換爲K(x, z)。核函數爲什麼能夠高效率的解決高緯度向量內積?我們先看一個核函數的例子,假設:


把裏面給展開得到:

根據前面核函數定義K(x,z) = φ(x) T φ(z),先假設假設x,z是3維的,即n = 3,我們對比得出特徵映射:

現在我們整體來看一下計算效率的問題,如果我們直接計算映射到高緯向量的內積,即φ(x) T φ(z),可以看到時間複雜度是O(n^2),但是如果我們直接計算核函數 (x T z)^2 我們能夠得到同樣的計算結果,但是時間複雜度爲O(n)。再舉例一個核函數:

仍然假設n = 3,那麼對比得到的特徵映射爲:

可以看到現在有二階項,一階項,並且有c可以控制一階項和二階項的相對權重。更一般的,對核函數,所對應的特徵映射有維(這個一直不太清楚怎麼回事,因爲對於上面的例子n=3,d=2,按這個結果特徵映射應該是c(5,2) = 10纔對,沒弄明白),如果計算映射後向量的內積則需要O(n^d),而計算核函數只需要O(n)時間,通過核函數,我們甚至不需要去顯示的表示出映射後的高緯度向量,就能以很高的效率計算到了高緯度的向量內積。

現在考慮另一類核函數,我們先直觀性的瞭解一下該核函數。很多時候我們認爲兩個特徵向量 φ(x) ,φ(z)相似的話(按照角度度量即向量夾角很小,也可按照距離度量),就把它們分爲一類,它們對應的內積值也很大。如果不相似的話,兩個向量夾角比較大,或者距離比較小,內積值就小。也就是當特徵向量相似,我們把核函數K(x,z) = φ(x) T φ(z)值設計的很大;當特徵向量不相似,我們把該核函數值設計的很小,按照這個直觀的理解,我們有如下核函數,可以兩個向量的距離來衡量相似性:

當x,z相似時,K(x, z)接近1,當不相似時,K(x, z)接近0。這個核函數成爲高斯核函數,它所對應的特徵映射是無限維的。

核函數的有效性


前面舉了若干個核函數的例子,我們只定義了它們,並不知道是否能夠作爲核函數。一個核函數是否有效這個問題可以等價於對於一個核函數,是否能夠找到一個特徵映射使得集合K(x,z) = φ(x) T φ(z)。下面討論這個問題。
先定義核矩陣,假設由m個訓練樣本,即,定義一個m*m的矩陣K,令



這個矩陣叫做核矩陣。如果核函數是有效的話,我們看到K是對稱的


在看一個性質,對任意的向量z有:

這說明核矩陣K是半正定的,上面的過程說明:
核函數是有效的 => 核函數所對應的核矩陣是對稱半正定的
核矩陣K是對稱半正定的是一個必要條件,但事實上,它也是一個充分條件,通過Mercer定理可以得到:
核函數所對應的核矩陣是對稱半正定的 => 核函數是有效的
Mercer定理:
函數K是R n × R n → R,如果K是有效的核函數,當且僅當對於所有訓練樣本,所對應的核矩陣是對稱半正定的。
這樣通過Mercer定理,我們不需要去尋找是否存在一個特徵映射 φ來證明某個核函數是有效的,我們只需要遍歷所有樣本,求得對應的核矩陣,並判斷是否爲對稱半正定矩陣即可。到此,我們可以看到核函數在SVM中是非常重要的,它提高了樣本的線性可分性,決定了SVM非線性分類的處理能力!事實上,核函數不止在SVM中很重要,在其他地方,如果出現了向量的內積,都可以用上這一方法,將原有向量映射到更高維,然後用核方法計算內積。


規則化和不可分情況


在前面的討論中,一直都是假設所有樣本是線性可分的,但實際情況即便我們將原問題屬性映射到了高維特徵向量上的確提高了樣本的線性可分性,但不能完全確保就一定線性可分。先看一個例子:

左邊的是一個最優的間隔分類器,當在樣本中添加一個異常的樣本值如右圖,按照算法的求解得到最優間隔分類器會旋轉一個角度,但我們並不想因爲這樣一個不可信的樣本就使得超平面旋轉這樣一個角度,並且當該異常的樣本點落在更上面的話,該問題就非線性可分的了。下面要討論改進的模型以解決非線性可分的樣本和噪聲敏感問題。模型改進如下(使用 L1規則化):


該模型所得到的結果算法也叫做L1 norm軟間隔SVM(Soft Margin SVM)。ξ i稱爲鬆弛變量,從約束條件看,函數間隔可以取負數,但在前面介紹過知道函數間隔取負數表示分類不正確(即誤分樣本點),所以通過令 某些ξ i大於1,使的函數間隔小於0,就能允許該算法對一些樣本進行錯誤分類。從目標函數看,現包括距離函數和鬆弛變量誤差,對於函數間隔爲負數或者小於1的(這表明ξ i不爲0)會使目標函數增加一個懲罰項,使目標函數增大。而權重C用來調和距離函數和鬆弛變量誤差,如果容忍噪聲的話,就下調C,這樣讓噪聲在目標函數中所佔權重變小。如果需要嚴格、噪聲小的模型,就調大C。通過對C進行控制,可以實現對模型的控制。這裏我的理解,用上面最右邊的圖舉例說明:沒有噪聲時,我們得到的結果是圖中的虛線,當出現了一個噪聲時,我們通過模型會得到噪聲樣本點的函數間隔小於1,它對應的鬆弛變量ξ i不爲0,這個時候如果C值調整的足夠小,假設極端情況爲0,那麼噪聲在目標函數中所提供的值爲0,也就是目標函數與沒有噪聲時沒有變化,爲了得到幾何間隔最大的超平面,我們不得不得到實線的結果,這表明我們考慮了噪聲的存在,允許它對模型造成改變,即下調C,我們容忍了噪聲。那麼考慮增大C,我們最後的目標函數會增大,記得目標函數越小代表着幾何間隔越大,也就是現在求出的幾何間隔會比原來算法執行得到的結果較小,原來算法執行的結果是實線,即在支持向量中距離超平面的距離已經最大化了,現在得到的幾何間隔,通過合適的C,可以使結果爲虛線,因爲虛線肯定沒有實線對應的幾何間隔大,這樣看起來我們像忽略了噪聲點,不允許它對模型造成任何影響,即增大C,我們得到了噪聲小、較嚴格的模型。並且該優化問題也是一個凸優化問題。
現在我們和以前一樣,爲了求解該模型,我們需要找到一般化的拉格朗日函數,並找到拉個朗日對偶優化問題(這樣能幫助我們求解模型參數)一般化的拉格朗日函數:

這裏 α i ,r i 是拉格朗日乘數,下面要找其對偶優化,我們是先在w, b上求得L(w,b,ξ,α,r)的最小值,即關於α的函數,這需要我們分別對w, b求偏導,並令其爲0。然後將w, b帶入L(w,b,ξ,α,r)得到:

我們看到與沒有規則化之前的相比,多了α i≤C,這裏b*求值公式也發生了變化,下面會再介紹,KKT中對偶互補條件變化如下:


下面就只差了求解最後的對偶優化問題了。



座標上升法


下面考慮這樣一個問題:

這裏的α i沒有任何約束,座標上升法可以求解這個問題,描述如下:

其基本思想是每次循環只把某一個參數當做變量,使其他參數都固定,求解函數值最大對應時的參數,內部相當於一個一元函數,執行起來非常高效。就按照這種方式知道收斂。下面舉例說明該過程:

該圖是某個二次函數的各個等高線,座標軸表示兩個參數,起始點是(2, -2),先固定橫軸變量,對縱軸變量進行調整,使函數獲得最大值,相應的縱軸所在的參數從-2變化爲1,然後又固定縱軸變量,調整橫軸變量,使橫軸從2變化0.5,這樣反覆執行,直到收斂。



SMO算法


現在考慮最後那個對偶優化的求參數的問題,由於存在約束條件,我們會將座標上升進行一些調整應用到SVM中。我們要優化的問題是這樣的:

我們先直接照搬座標上升,假設選取α 1進行調整,固定其他所有參數,但是我們發現第二個約束條件可變化爲:

這樣當固定其他參數時,α 1就已經固定了,如果調整α 1,那麼結果所有參數肯定不滿足約束條件,爲此需要修改算法,考慮一次調整兩個變量。SMO算法簡要步驟如下:

由於內部參數調整十分高效,所以整個SMO算法是高效的,下面簡要推導內部是如何進行調整的。舉例調整α 1 ,α 2,由於約束條件,我們變化如下:

由於y^(i)要麼取值爲1要麼爲-1,所以α1,α2的關係是線性的,又由於約束條件0 ≤ α i ≤ C ,α1,α2會落在一個矩形區域內,關於α1,α2二維簡圖如下:

圖表明α1,α2既要落在矩形裏面,又要在直線上。以圖中的直線爲例,α1在[0,C]的範圍時,α2是有更嚴格的限制的,從圖中看到,L ≤ α 2 ≤ H,這樣才能保證α1,α2既要落在矩形裏面,又要在直線上。即不論直線是什麼樣的,α1在[0,C]的範圍時都會存在一個L,H來限制α2(L ≤ α 2 ≤ H),使得點落在矩形內又在直線上。
我們在上面的方程兩邊同時乘以y^(1)可以得到如下:

然後帶入到函數W得到:

事實上,經過推導,發現這是一個關於α 2的一元二次方程,即方程最終形式可以化爲。如果不考慮L ≤ α 2 ≤ H,直接求解出該最優參數是非常快的,所以這是SMO算法高效的一個原因。最後加上α 2的約束條件(不滿足約束時,下面進行了裁剪),我們得到解:


這一節沒有介紹如何選取α1,α2的方法,以及對b*的推導,有興趣的以後可以看看 Platt的論文,名字叫Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines,也可以在網上搜一搜JerryLead的學習筆記,他寫的特別詳細,讓人佩服啊

到此SVM全部就講完了,有時間來總結一下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章