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