1. 程式人生 > >分類演算法SVM(支援向量機)

分類演算法SVM(支援向量機)

支援向量機(Support Vector Machine ,SVM)的主要思想是:建立一個最優決策超平面,使得該平面兩側距離該平面最近的兩類樣本之間的距離最大化,從而對分類問題提供良好的泛化能力。對於一個多維的樣本集,系統隨機產生一個超平面並不斷移動,對樣本進行分類,直到訓練樣本中屬於不同類別的樣本點正好位於該超平面的兩側,滿足該條件的超平面可能有很多個,SVM正式在保證分類精度的同時,尋找到這樣一個超平面,使得超平面兩側的空白區域最大化,從而實現對線性可分樣本的最優分類。

支援向量機中的支援向量(Support Vector)是指訓練樣本集中的某些訓練點,這些點最靠近分類決策面,是最難分類的資料點。SVM中最優分類標準就是這些點距離分類超平面的距離達到最大值;“機”(Machine)是機器學習領域對一些演算法的統稱,常把演算法看做一個機器,或者學習函式。SVM是一種有監督的學習方法,主要針對小樣本資料進行學習、分類和預測,類似的根據樣本進行學習的方法還有決策樹歸納演算法等。

SVM的優點:
1、不需要很多樣本,不需要有很多樣本並不意味著訓練樣本的絕對量很少,而是說相對於其他訓練分類演算法比起來,同樣的問題複雜度下,SVM需求的樣本相對是較少的。並且由於SVM引入了核函式,所以對於高維的樣本,SVM也能輕鬆應對。
2、結構風險最小。這種風險是指分類器對問題真實模型的逼近與問題真實解之間的累積誤差。
3、非線性,是指SVM擅長應付樣本資料線性不可分的情況,主要通過鬆弛變數(也叫懲罰變數)和核函式技術來實現,這一部分也正是SVM的精髓所在。

一、線性分類

對於最簡單的情況,在一個二維空間中,要求把下圖所示的白色的點和黑色的點集分類,顯然,下圖中的這條直線可以滿足我們的要求,並且這樣的直線並不是唯一的。


SVM的作用就是要查詢到最合適的決策直線所在的位置。其他可行的直線可以如下所示:


那麼哪條直線才是最優的呢?就是分類兩側距離決策直線距離最近的點離該直線綜合最遠的那條直線,即分割的間隙越大越好,這樣分出來的特徵的精確性更高,容錯空間也越大。這個過程在SVM中被稱為最大間隔(Maximum Marginal)。下圖紅色和藍色直線之間的間隙就是要最大化的間隔,顯然在這種情況下,分類直線位於中間位置時可以使得最大間隔達到最大值。


二、 線性不可分

現實情況中基於上文中線性分類的情況並不具有代表性,更多情況下樣本資料的分散式雜亂無章的,這種情況下,基於線性分類的直線分割面就無法準確完成分割。如下圖,在黑色點集中摻雜有白色點,白色點集中摻雜有黑色點的情況:


對於這種非線性的情況,一種方法是使用一條曲線去完美分割樣品集,如下圖:


從二維空間擴充套件到多維,可以使用某種非線性的方法,讓空間從原本的線性空間轉換到另一個維度更高的空間,在這個高維的線性空間中,再用一個超平面對樣本進行劃分,這種情況下,相當於增加了不同樣本間的區分度和區分條件。在這個過程中,核函式發揮了至關重要的作用,核函式的作用就是在保證不增加演算法複雜度的情況下將完全不可分問題轉化為可分或達到近似可分的狀態。


上圖左側紅色和綠色的點在二維空間中,綠色的點被紅色點包圍,線性不可分,但是擴充套件到三維(多維)空間後,可以看到,紅綠色點間Z方向的距離有明顯差別,同種類別間的點集有一個共同特徵就是他們基本都在一個面上,所以借用這個區分,可以使用一個超平面對這兩類樣本進行分類,如上圖中黃色的平面。

線性不可分對映到高維空間,可能導致很高的維度,特殊情況下可能達到無窮多維,這種情況下會導致計算複雜,伴隨產生驚人的計算量。但是在SVM中,核函式的存在,使得運算仍然是在低維空間進行的,避免了在高維空間中複雜運算的時間消耗。

SVM另一個巧妙之處是加入了一個鬆弛變數來處理樣本資料可能存在的噪聲問題,如下圖所示:


SVM允許資料點在一定程度上對超平面有所偏離,這個偏移量就是SVM演算法中可以設定的outlier值,對應於上圖中黑色實現的長度。鬆弛變數的加入使得SVM並非僅僅是追求區域性效果最優,而是從樣本資料分佈的全域性出發,統籌考量,正所謂成大事者不拘小節。