python 實現支持向量機模型

Scikit-learn裡對SVM的算法都包含在sklearn.svm下面,其中SVC類用來進行分類任務,SVR是用來進行數值迴歸任務。

以SVC為例:

先看一個例子:自動生成一個有兩個特徵,兩個類別的數據集,然後用線性核函數進行分類

python 實現支持向量機模型

python 實現支持向量機模型

生成如下:

python 實現支持向量機模型

圖中帶有X標記點的是支持向量

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,可以得到在超參數調優器的使用下,得到的最優模型評分

代碼如下:

python 實現支持向量機模型

通過比較訓練集和測試集的模型評分,來判斷模型是否過擬合

結果如下:

python 實現支持向量機模型

得到最優模型評分:0.944

最優參數gamma:0.0001212121

模型精確率和召回率都在90%以上,


分享到:


相關文章: