當前位置:
首頁 > 最新 > Scikit-learn筆記8 線性支持向量機

Scikit-learn筆記8 線性支持向量機

支持向量機(SVMSupport vector machine)起源於上世紀90年代,作為曾今風靡一時的「大殺器」在Scikit-learn中有著多種實現,如下:

SVC是對支持向量分類的實現,而SVR則是支持向量回歸。本文介紹最基本的線性支持支持向量分類器LinearSVC。線性支持向量機的模型如下圖所示。

圖中有3條相互平行的直線,兩條虛線將空心和實心兩類樣本點隔開,兩條虛線之間的區域稱為隔離地帶,支持向量機要使兩條虛線間的距離達到最大(原始問題)從而求出一個分離(超)平面(圖中實線)作為分類決策邊界。

剛好經過虛線的樣本點稱為支持向量,支持向量機就是要從樣本中找出支持向量從而確定隔離地帶。上圖中隔離地帶將兩類樣本點完全分開的情況叫線性可分,如果有些點跑到隔離地帶中去了,則為線性不可分。

進入python導入包如下:

線性支持向量機各超參數的解釋如下

C:鬆弛因子,解決線性不可分問題。C越大越容易過擬合訓練樣本。

class_weight:標籤類別的權重,如為『balanced』,則類別權重與類別出現的次數成反比。對改善類別不平衡有幫助;也可以傳入一個字典自定義類別權重。

dual:是否對偶化,默認為True。將上述原始問題調整為對偶問題,用凸優化的方法求解模型。當樣本數>特徵數,傾向於用False。

fit_intercept:是否擬合截距項,如果沒做中心化處理,一般需要擬合。

intercept_scaling:0-1的浮點數。當擬合截距項時,相當於人造了一個特徵,該特徵恆為1,權重為b。計算正則化項時,該人造特徵也被考慮了。為了降低人造特徵的影響,調整為intercept_scaling*b。

loss:默認為合頁損失的平方,還可以取合頁損失hinge。

multi_class:多分類策略,默認為One vs Rest。

penalty:正則化項,默認為L2,也可以是L1,但L1的損失函數不能是hinge。

random_state:隨機種子,和前面保持一致,取10。

tol:迭代停止條件,兩次迭代精度之差小於tol則停止。

verbose:列印輸出信息。

下面還是用泰坦尼克數據集演示線性支持向量機的效果。如下:

鬆弛因子C是線性支持向量機最重要的一個參數。如上,當C=0.5時交叉驗證的表現最好,f1=0.73。當C繼續增大時效果明顯下降。此處由於訓練集的類別是不平衡的,把class_weight設為balanced會有所改善。

上面的參數解釋提到,當樣本數大於特徵數時,建議dual=False。可以看到如下演示結果,f1=0.72,略低於默認True時的0.73,沒有什麼效果。

再來看損失函數,將默認的hinge平方改成hinge,f1下降嚴重,只有0.67。因此損失函數默認不變。

正則化項將L2調整為L1,並未改善效果。我們用最終的c=0.5的模型來擬合訓練集,得到的分數為0.81。由於Kaggle測試集沒有標籤,無法查看測試得分。

訓練好了模型,可以拿到線性SVM的分類超平面的係數和截距,如下:

最後仍然使用上節同樣的樣本作出預測,結果此人獲救。如下:

ok,下文接著介紹非線性支持向量機。

歷史文章回顧


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 挖挖機ML 的精彩文章:

Scikit-learn筆記3 邏輯回歸

TAG:挖挖機ML |