1. 程式人生 > >scikit-learn中的SVM使用指南

scikit-learn中的SVM使用指南

本文主要包括以下內容:
1、 sklearn三個SVM分類器(sklearn.svm.LinearSVC,sklearn.svm.SVC,sklearn.svm.NuSVC)的引數詳解
2、SVM演算法調優的一些建議
3、實驗

sklearn.svm.LinearSVC

這裡寫圖片描述

penalty取值說明:
l1-SVM:
這裡寫圖片描述
l2-SVM:

這裡寫圖片描述

關於dual,penalty和loss三個引數的組合:
這裡寫圖片描述

問題:誰能解釋下為什麼有些(dual,penalty,loss)組合不行麼?

問題2:如果合頁損失函式和軟間隔分類(考慮了鬆弛變數)是等價的,那在sklearn中,同時設定了penalty(鬆弛變數累加方式)和loss(合頁函式),到底是求解哪個目標函式呢? (對合頁損失函式不瞭解,可能問題問的不準,希望有人能幫忙解答)


問題3:
這裡寫圖片描述
這什麼意思? 既求解原始優化問題,又求解對偶優化問題? 這是為啥? 兩個都求一遍,選個最好的麼?

sklearn.svm.SVC

這裡寫圖片描述
這裡寫圖片描述

這裡寫圖片描述

我們該使用哪種核函式?
回答:和資料相關。 可以嘗試。嘗試順序一般:先線性核,然後再看通過使用非線性核能否提高。通常,如果資料是高維的,但只有很少的訓練樣本數,非線性核會導致過擬合。
除此之外,感興趣的還可以參考這個:https://stats.stackexchange.com/questions/18030/how-to-select-kernel-for-svm?rq=1
這裡寫圖片描述
圖1 懲罰因子C對分類效果的影響。C越大,越要儘可能的考慮錯誤點(也就是說,儘量不要分錯),導致的結果是,誤分類儘可能越小,但分界距離也變小了。壞處很明顯,若干錯誤的“離群點”會對分介面的位置方向影響很大。

圖2  degree越大,分類器越靈活。太大會出現過擬合
圖2 degree越大,分類器越靈活。太大會出現過擬合

這裡寫圖片描述
圖3 r越大,分類器越靈活。太大會出現過擬合。

sklearn.svm.NuSVC

這裡寫圖片描述
這裡寫圖片描述

下面是自己實驗的一個結果:
資料是文字,類別10個,特徵8千維,樣本130.

LinearSVC效果最好。dual=False,C=10時達到:0.66多。

下面是SVC的效果:
這裡寫圖片描述
這裡寫圖片描述
可以看到核選擇上,選擇線性核是最好的。為什麼其他兩個核表現部署很好呢?
再poly和fdf兩種核時的引數設定,基本可以得出以下結論:
1、degree和r設定稍微大一點,效果就非常非常差了。(儘管設定的小時也不是很好)。因為在樣本數比特徵數遠遠小於的時候,設定degree和r大更加容易導致過擬合。
2、degree和r設定不大,同時C設定的偏大時,效果還可以。