支持向量機算法的基礎是最大間隔分類器,最大間隔分類器雖然很簡單,但不能應用於大部分數據,因為大部分屬是非線性數據,無法用線性分類器進行分類,解決方案是對特徵空間進行核函數映射,然後再運行最大間隔分類器。
本文跳過枯燥乏味的算法推導過程,循序漸進的介紹支持向量機分類原理,並通過四個小項目快速的理解支持向量機的線性分類,非線性分類和參數調參過程。
文末附代碼和數據下載方法,可直接運行
1.最大間隔分類器
最大間隔分類器使用超平面進行分類。
什麼是超平面?
假如特徵空間是 p 維,超平面就是 p-1維,為了可視化超平面,假設特徵空間是3個維度的,那麼超平面是2維的。
超平面表達式如下:
如果數據的特徵滿足上式,那麼該點落在超平面上,若不滿足,則該點處於超平面的兩側。
超平面如下圖:
一般來說,如果數據可以用超平面完美地進行分離,那麼超平面的數量是無限的,因為它可以向上移動、向下移動,或者對該超平面進行小角度的選擇而不與觀測數據接觸。
超平面是無限的,如何選擇最優超平面?
最優超平面是離觀測點最遠的分離超平面,在給定超平面的情況下,我們計算每個訓練數據到超平面的距離,這就是所謂的間隔,最優超平面也就是間隔最大的分類器。如下圖:
正如你所看到的,有三個觀測點到超平面的距離相等,這三個觀測點就是支持向量,若這三個觀測點的位置改變了,超平面也會相應的改變。最大間隔分類器的性能只與這三個點相關,與其他數據不相關,看到這裡,是不是對支持向量機算法有了新的收穫了?
如果數據分佈是非線性的,不能用超平面進行分類,如下圖:
對於這樣的數據分佈,我們將使用核函數映射為新的特徵空間,再運行最大間隔分類器進行分類,這種方法稱為支持向量機。
2.支持向量機
支持向量機的核函數映射是一種擴展特徵空間的方法,核函數的核心思想是計算兩個數據點的相似度。核函數的度沒有限制, 使用度大於1的內核可以得到更靈活的決策邊界,如下圖所示:
為了更好的理解核函數的選擇是如何影響SVM算法,我們在四個不同的場景實現它。
項目1——線性核支持向量機
在開始之前,讓我們導入一些有用的庫:
導入需要訓練和測試的數據路徑:
定義可多次調用的畫圖函數:
散點圖可視化數據:
散點圖如下:
線性核支持向量機對該數據進行分類,其中正則化參數C=1,並使用預測值繪製超平面(hyperplane),如下圖:
由上圖的分類結果可知,當正則化參數等於1時,模型對異常值不敏感。因此,低的正則化參數往往泛化能力更好,測試誤差率大於驗證誤差率。
若增加正則化參數C等於100,那麼模型對異常點異常敏感,分類結果如下圖:
由上圖結果可知:C=100時,異常值能夠正確分類,但是分類超平面與樣本點的距離非常近,可以推斷該模型處於過擬合狀態,泛化能力差。
項目2——高斯核支持向量機
若分類邊界是非線性的,我們常常使用高斯核進行SVM分類。
首先,可視化需要分類的數據:
散點圖:
高斯核用來衡量兩個數據點的相似度,公式如下:
其中參數σ決定相似度指標趨於零的速度。
高斯核支持向量機訓練和預測代碼:
預測結果及分類邊界如下圖:
項目3——支持向量機調參
本節介紹用交叉驗證方法選擇模型最優參數,首先下載數據集:
圖形如下:
使用交叉驗證方法選擇最優參數,代碼如下:
選擇最優參數的模型(C=1,sigma=0.1)來預測和畫出分類邊界:
結果圖:
項目4——用SVM進行垃圾郵件分類
下載數據,並用線性核進行分類,得到訓練準確率和測試準確率。
代碼如下:
得到訓練準確率和測試準確率的結果分別為:99.8%和98.9%。
3.小結
本文介紹了最大間隔分類器的原理,若遇到非線性邊界數據的分類任務,則需要用支持向量機去構建模型。文章通過四個小項目解釋線性核SVM,高斯核SVM,正則化參數C的作用以及如何用交叉驗證方法選擇模型的最優參數。
閱讀更多 sandag 的文章