svm的學習


1.      概述

支持向量機(supportvector machine,svm)是一種被認爲是效果最好的現成可用的分類算法之一。這個“現成”很重要,因爲他在學術界和工業界都混得很好(而不同於有些算法,在抽象出來的模型裏面很完美,但是在實際問題效果很差。)

2.      間隔(幾何間隔)


對於上面第一個圖,它們已經分的足夠開,因此可以很容易在圖中畫出一條直線將2組數據分開,這組數據被稱爲線性可分數據。在2維空間,這個將數據集分開的是直線;在3維空間,將數據分開的是平面;在高維空間,將數據分開的是超平面,也就是分類決策面

上面提供了3條直線,這3條直線都可以將數據分開。但是哪條直線更好呢?我們希望能用這種方式來構建分類器,即如果數據點離決策邊界越遠,那麼其最後的預測結果越可信。這裏定義點到分割面的距離爲間隔。我們希望間隔儘可能的大,因爲如果訓練樣本局部“擾動”或者在有限數據上訓練分類器的話,我們希望分類器儘可能健壯,即超平面所受影響最小。換言之,這個劃分的超平面所產生的分類結果是最魯棒性的,對未見的例子泛化能力很強。我們怎麼做呢?希望找到離分割超平面最近的點(這就是支持向量,support vector),確保它們離分割超平面儘可能的遠。

 

3.      what? -->構建目標函數,找到分割平面,即確定w和b

首先論述線性可分支持向量機

1).最大化幾何間隔

先從最簡單的點到直線的距離開始


輸入數據會給分類器一個類別標籤,使用類似海維賽得階躍函數(即單位階躍函數)對分割超平面作用f(wTx+b),當wTx+b<0輸出的值是-1,反之則輸出+1,但是海維賽得階躍函數跳變太陡,所以採用sigmoid函數的方式,它連續、比較平滑,是個良好的閾值函數,如下圖。


但是類標籤爲什麼使用-1,+1,而不使用0,1呢?主要是由於-1,+1只差一個符號,只是方便數學上的處理。


Ps:函數間隔=yif(x)=yi(wTx+b)

爲什麼使用的是幾何間隔而不是函數間隔呢?因爲當分割超平面固定以後,我們可以等比例的縮放w和b,這樣的話(wTx+b)可以任意大,即函數間隔可以在分割超平面固定後被取任意大,這不太合理,而幾何間隔d不存在這個問題,因爲除以了這個分母,所以在縮放w和b的時候,d是不會改變的,這是更加合適的一個margin(可以近似理解成歸一化)。

 

 

2.構建的目標函數:



       

在決定分離超平面時只有支持向量起作用,而其他的實例不起作用。如果移動這些支持向量,將改變所求的解,但是如果在間隔邊界以外移動其他的實例點,甚至去掉這些點,則解釋不會改變的。由於支持向量在確定分離超平面中起着決定性作用,所以將這種分類模型稱爲支持向量機。支持向量一般少而重要。

回想w,b與alpha的關係式,可以發現能夠決定w的alpha不能等於0,所以說支持向量的alpha不等於0,而不是支持向量的實例點,其alpha是等於0的。具體可以參見李航博士的統計學習方法P103的例題。

 

3).線性支持向量機

        會發現問題,不一定分類完全正確的超平面就是最好的,如下圖中用實線分類的


但是如果我們放棄最上面的圓點,使用虛線劃分,得到的分割超平面相對來講更好。放棄一個點,使得得到的分割超平面泛化能力更強(保證大多數做的很好)。

        線性可分的支持向量機不是最好的?--->線性支持向量機

(a)原始樣本數據是線性可分的,不想讓它100%正確

(b)原始樣本數據本身線性不可分,去掉數據中的離羣點,剩下大部分的樣本點是線性可分的。

How to solve?


       

C是懲罰因子(超參數),C值小時對誤分類的懲罰小;C值大時對誤分類的懲罰大,如果是無窮大,後半部分起決定性作用,所以必須使=0,等價於線性可分的SVM,可以認爲線性SVM是線性可分的SVM的推廣。

 

如何求呢?

與線性可分SVM相同,求拉格朗日函數,求對偶問題:





對偶函數:


求得最優解alpha*,再帶入,可以得到w*,b*,w*是可以唯一確定的,但是b*存在於一個區間,可以求平均。

 

4)合頁損失函數



C是超參數,需要交叉驗證

5)核函數


如果數據集(見上圖)需要用超曲面才能正確分開,這就是一個非線性可分的問題。非線性問題往往不好求解,所以希望可以用線性分類問題來解決,通常採用的方法是非線性變換,將非線性問題變換爲線性問題,通過解線性變換後的線性問題的方法求解原來的非線性問題

        用線性分類方法求解非線性問題分爲2步:

(a)      使用一個變換將原空間的數據映射到新空間;

(b)      然後在新空間裏使用線性分類學習的方法從訓練數據中學習分類模型

 

最常用的高斯核函數(RBF) ,當然也存在一些問題,比如過擬合,但是通過調節參數sigma,可以靈活地使用。

4.      How?

如何計算得到?-->sequence minimal optimization,SMO

SMO算法是一種啓發式算法,其基本思路是:有多個拉格朗日乘子,每次只選擇其中2個乘子做優化,其他乘子認爲是常數(固定值),針對這2個變量構建一個二次規劃問題。


 

 二變量優化問題




複雜度

  • 1)SVM的空間消耗主要是存儲訓練樣本和核矩陣。
  • 2)時間消耗。《A Tutorial on Support Vector Machines for Pattern Recognition》  1998KluwerAcademicPublishers,Boston,訓練計算複雜度在O(Nsv^3+LNsv^2+d*L*Nsv)和O(d*L^2)之間,其中Nsv是支持向量的個數,L是訓練集樣本的個數,d是每個樣本的維數(原始的維數,沒有經過向高維空間映射之前的維數).總的來講,SVM的SMO算法根據不同的應用場景,其算法複雜度爲~N 到~N^2.2之間,而chunking scale的複雜度爲~N^1.2 到~N^3.4之間。一般SMO比chunking算法有一階的優勢。線性SVM比非線性SVM的smo算法要慢一些。所以,據原著論文的測試,SMO算法,在線性svm上快1000倍,在非線性上快15倍。對於SVM的SMO算法的內存需求時線性的,這使得其能適用比較大的訓練集。    


最後總結一下svm的特點:

1)svm是一種有堅實基礎的小樣本學習方法。它基本不涉及概率測度及大數定律等內容,因此不同於現有的統計方法。從本質上看,它避開了從歸納到演繹的傳統過程,實現了高效的從訓練樣本到預報樣本的“轉導推理”,大大簡化了通常的分類和迴歸等問題。

2)支持向量是svm訓練的結果,在svm分類決策中起決定性作用的是支持向量。

3)svm最終的決策函數只由少數的支持向量所決定,計算的複雜性取決於支持向量的數目,而不是樣本空間的維數。這在某種意義上避免了“維數災難”。

4)對特徵空間劃分的最優超平面是svm的目標,最大化分類邊際的思想是svm方法的核心。

5)非線性映射是svm方法對的理論基礎,svm利用內積核函數代替了向高維空間的非線性映射,相比直接在高維空間計算要簡單的多。

6)少數支持向量決定了最終結果,這不但可以幫助我們抓住關鍵樣本、“剔除”大量的冗餘樣本,而且該方法算法簡單,且具有加好的魯棒性。這種魯棒性主要體現在:

(1)增、刪非支持向量樣本對模型沒有影響

(2)支持向量樣本集具有一定的魯棒性。

(3)在某些應用中,svm方法對核的選取不敏感。


svm的不足:

1)svm算法對大規模訓練樣本難以實施

 由於SVM是藉助二次規劃來求解支持向量,而求解二次規劃將涉及m階矩陣的計算(m爲樣本的個數),當m數目很大時該矩陣的存儲和計算將耗費大量的機器內存和運算時間。如垃圾郵件的分類檢測,沒有使用SVM分類器,而是使用了簡單的naive bayes分類器,或者是使用邏輯迴歸模型分類。針對以上問題的主要改進有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、張學工的CSVM以及O.L.Mangasarian等的SOR算法

2)svm解決多分類問題

有人提到了這個,但是我覺得臺灣大學林智仁教授所寫的Libsvm在多分類的應用還是取得不錯的效果的。

3)核函數的選擇

這個目前還沒有一定的標準,我認爲這不算是一個很大的缺點,因爲一般徑向基核函數都能解決問題,但是如果線性核函數就能解決的問題,我們還使用RBF,就會浪費時間。



 參考文獻:

李航-統計學習方法

周志華-機器學習

http://blog.csdn.net/fengzhizizhizizhizi/article/details/23911699


 

 

 

 

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