機器學習-支援向量機SVM
簡介:
支援向量機(SVM)是一種二分類的監督學習模型,他的基本模型是定義在特徵空間上的間隔最大的線性模型。他與感知機的區別是,感知機只要找到可以將資料正確劃分的超平面即可,而SVM需要找到間隔最大的超平面將資料劃分開。所以感知機的超平面可以有無數個,但是SVM的超平面只有一個。此外,SVM在引入核函式之後可以處理非線性問題。
SVM根據資料的不同可以分為以下三種形式:
1.線性可分支援向量機,也叫做硬間隔支援向量機,處理的資料是線性可分的,通過硬間隔最大化來學習一個線性可分的模型。
2.線性支援向量機,也叫做軟間隔支援向量機,當資料近似線性可分時,通過引入鬆弛因子,軟間隔最大化學習一個線性可分的模型。
3.非線性支援向量機,當資料線性不可分時,通過引入核函式將資料對映到高維空間後,學習得到一個非線性支援向量機。
線性可分支援向量機
考慮一個二分類問題,當資料可以在分佈空間中通過一個超平面將正負樣例分割開,一面為正類,一面為負類,我們就稱資料是線性可分,這個分離超平面的方程為:w*x+b=0。而線上性可分資料中存在著無數個超平面可以將資料分割開(參考感知機),我們要找到其中最好的超平面,這個超平面不僅可以將訓練集資料很好的劃分開,還有更好的泛化能力。下圖中很顯然直線B是最好的一條分割線,所以選擇間隔最大的一個超平面作為我們需要的最優的超平面。
![](https://upload-images.jianshu.io/upload_images/3395407-2a103a0d3f03b6e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖1
求解超平面w*x+b=0就是求w和b,以及對應的分類決策函式f(x)=sign(w*x+b),稱之為線性可分支援向量機。
根據點到直線距離公式:
![](https://upload-images.jianshu.io/upload_images/3395407-b624ef4c81d9a11b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖2
其中A為w向量,C為b,因為超平面的y值為0,所以對於支援向量機的點到超平面距離可以寫作:
![](https://upload-images.jianshu.io/upload_images/3395407-4fc7d4dfa5a486a7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖3
又因為w*x+b的邊界為正負1,兩個邊界到超平面的距離和γ等於2倍的r,所以圖3又可以寫作:
![](https://upload-images.jianshu.io/upload_images/3395407-3921a557a85a3f5e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖4
這就是幾何間隔。下圖是支援向量機的各個概念圖:
![](https://upload-images.jianshu.io/upload_images/3395407-ea63ef50a6c17773.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖5
當資料點為正類時,其y=+1,w*x+b>=+1,當資料點為負類時y=-1,w*x+b<=-1,所以y*(w*x+b)始終大於等於1,其中y*(w*x+b)成為函式間隔。
要找到間隔最大的超平面,也就是要找到滿足y*(w*x+b)>=1約束條件的引數w和b,使得γ最大。即:
![](https://upload-images.jianshu.io/upload_images/3395407-8a96e8825080653b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖6
顯然為了最大化間隔,僅需最大化||w||,這等價於最小化||w||的2次方,所以可以重寫為:
![](https://upload-images.jianshu.io/upload_images/3395407-4d43e2cbe7b07157.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖7
其中目標函式和約束函式都是連續可微的凸函式,並且目標函式是二次函式,約束函式是仿射函式,所以該約束問題是一個凸二次規劃問題。
求解凸二次規劃約束問題常用的辦法是引入拉格朗日乘子,通過求解對偶問題得到原始問題的解。這就是線性可分支援向量機的對偶演算法。
首先定義拉格朗日函式,對每個不等式約束引入拉格朗日乘子αi>=0,i=1,2,3....n.拉格朗日函式為:
![](https://upload-images.jianshu.io/upload_images/3395407-89916507165828c8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖8
這樣就把帶有約束問題的求極值問題轉為無約束求極值問題,接下來根據拉格朗日對偶性求解原始問題的對偶問題:
![](https://upload-images.jianshu.io/upload_images/3395407-5675c8508a8e4d25.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖9
以上就是求解線性可分支援向量機的全部過程,求解得到w和b之後就可以得到分類超平面:
![](https://upload-images.jianshu.io/upload_images/3395407-a5974836f03a7179.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖10
以及分類決策函式:
![](https://upload-images.jianshu.io/upload_images/3395407-a7885c80f25d84c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖11
根據圖9中w*和b*的結果可以看出,w*和b*只依賴於αi>0對應的(xi,yi)樣本點,這些樣本點稱為支援向量。
線性支援向量機
當資料近似線性可分時,也就是說資料中存在噪聲點,我們通過引入鬆弛因子,使函式間隔加上鬆弛因子ξ後大於等於1,這樣約束條件就變成:
![](https://upload-images.jianshu.io/upload_images/3395407-d04f9e5060d6a469.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖12
對於每個鬆弛因子ξi需要支付一個代價,所以目標函式也就是代價函式變為:
![](https://upload-images.jianshu.io/upload_images/3395407-5acce3c987d5c264.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖13
其中C>0稱為懲罰引數,是超引數需要我們手動調參,C值越大時對誤分類的懲罰增大,支援向量機的間隔寬度越窄,C值越小時對誤分類的懲罰越小,支援向量機的間隔寬度越寬。而ξ的幾何意義代表著,誤分類資料點離正確分類一側的距離,是幾何距離。
那麼這個鬆弛因子ξ是怎麼來的呢?因為資料是近似可分的存在著許多噪音點,所以當計算代價函式時,這些誤分類點要算入代價函式中去。這些誤分類點的函式間隔y*(w*x+b)<=-1,所以代價函式可以寫成帶有0/1損失函式的集合函式,就是當資料點的函式間隔減去1小於0的話(誤分類點),需要計算入代價函式,資料點的函式間隔減去1大於0的話(正確分類點),不需要計算入代價函式:
![](https://upload-images.jianshu.io/upload_images/3395407-ed59dc2e2ba9a31c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖14
但是0/1損失函式的數學性質不好,非凸非連續性。所以一般使用他的代替損失函式“hinge損失max(0,1-z)”代替它,則代價函式也就是目標函式變為:
![](https://upload-images.jianshu.io/upload_images/3395407-fb6b38c47cd97a11.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖15
用ξ替代max部分,就是ξ<=1-y*(w*x+b),所以帶有約束條件的目標(代價)函式就變為下面的形式:
![](https://upload-images.jianshu.io/upload_images/3395407-b4ce30107c098eeb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖16
所以SVM的損失函式也可以看作是帶有L2正則項(||w||^2)的hinge損失函式。以上就是線性支援向量機的帶有約束條件的優化目標函式,求解w和b的過程與線性可分的方法一致,都是通過引入拉格朗日乘子,這裡不再重複。其中一些列需要滿足的約束條件稱為KKT條件。
非線性支援向量機
當資料樣本非線性可分時,也就是在當前的資料空間內(或者說當前維度內)無法找到一個超平面將資料分割開,那麼需要我們將資料從當前的維度對映到更高維度後,使資料變成線性可分的,而將資料對映到高維的函式稱之為核函式。
為什麼在SVM求解帶有約束條件的最優化問題時我們使用引入拉格朗日乘子方法,一是因為求解簡單,二是可以很方便的引入核函式K(x,z)。
通過引入核函式之後,對偶問題的目標函式就變成:
![](https://upload-images.jianshu.io/upload_images/3395407-e8e2e7a27081d4bc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖17
最後求解出w*和b*之後的決策分類函式:
![](https://upload-images.jianshu.io/upload_images/3395407-8f45db961d5985b3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖18
這樣通過核函式的引入,可以用求解線性支援向量機的方法求解非線性支援向量機。學習是隱式的,不是瞭解核函式是如何計算以及資料到底被對映到哪一維空間的,但是需要我們手動的選擇核函式。常用的核函式有:
多項式核:
![](https://upload-images.jianshu.io/upload_images/3395407-e5b0c9ced4209931.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖19
高斯核(徑向基核):
![](https://upload-images.jianshu.io/upload_images/3395407-23ebe7e76461c914.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
圖20
線性核,sigmoid核以及其他核函式等。通常使用先驗知識或者交叉驗證的方式選擇核函式,但是如果無先驗知識的情況下,一般選擇高斯核。為什麼選擇高斯核呢?因為可以將資料對映到無窮維空間。
SMO序列最小最優化
該學習方法是為了簡單求解SVM中的引數的一個演算法,並不是很重要(調包俠^-^),所以沒有很詳細的看,以後有時間看完再更新到本文中。
待更新。。
參考書籍:
《統計學習方法》李航 著
《機器學習》 周志華 著
《小象學院機器學習課程》 鄒博