Scikit-learn裡對SVM的算法都包含在sklearn.svm下面,其中SVC類用來進行分類任務,SVR是用來進行數值迴歸任務。
以SVC為例:
先看一個例子:自動生成一個有兩個特徵,兩個類別的數據集,然後用線性核函數進行分類
生成如下:
python中支持向量機SVC的接口如下:
class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', random_state=None)
C:相當於懲罰鬆弛變量,希望鬆弛變量接近0,C越大,即對誤分類的懲罰增大,趨向於對訓練集全分對的情況,這樣對訓練集測試時準確率很高,但泛化能力弱。C值小,對誤分類的懲罰減小,允許容錯,將他們當成噪聲點,泛化能力較強。C-SVC的懲罰參數
C默認值是1.0
kernel:核函數,默認是rbf,可以是'linear','poly', 'rbf'
liner 線性核函數
poly多項式核函數
RBF高斯核函數
degree :多項式poly函數的維度,默認是3,選擇其他核函數時會被忽略。
gamma : 'rbf','poly' 和'sigmoid'的核函數參數。默認是'auto',則會選擇1/n_features(比較小時,單個樣本對整個分類超平面的影響比較小,不容易被選擇為支持向量,反之,當γ比較大時,單個樣本對整個分類超平面的影響比較大,更容易被選擇為支持向量,或者說整個模型的支持向量也會多。scikit-learn中默認'auto')
關於選擇核函數:(針對不同的核函數,需要指定不同的參數,
1,線性核函數,只需要指定參數C
2,多項式核函數,除了參數C之外還需要指定degree,
3,高斯核函數,除了參數C,還要指定gamma值,對應核函數中的1/2σ*2也就:γ)
我們先使用默認的高斯核函數,使用GridSearchCV來自動選擇參數gamma,可以得到在超參數調優器的使用下,得到的最優模型評分
代碼如下:
通過比較訓練集和測試集的模型評分,來判斷模型是否過擬合
結果如下:
得到最優模型評分:0.944
最優參數gamma:0.0001212121
模型精確率和召回率都在90%以上,
閱讀更多 愛數據的小司機 的文章