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