1. 程式人生 > >機器學習:sklearn.svm.SVC 引數說明

機器學習:sklearn.svm.SVC 引數說明

2.sklearn.svm.SVC()引數

引數:

C:C-SVC的懲罰引數C?預設值是1.0

C越大,相當於懲罰鬆弛變數,希望鬆弛變數接近0,即對誤分類的懲罰增大,趨向於對訓練集全分對的情況,這樣對訓練集測試時準確率很高,但泛化能力弱。C值小,對誤分類的懲罰減小,允許容錯,將他們當成噪聲點,泛化能力較強。

l  kernel :核函式,預設是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 

    0 – 線性:u'v

    1 – 多項式:(gamma*u'*v + coef0)^degree

    2 – RBF函式:exp(-gamma|u-v|^2)

    3 –sigmoid:tanh(gamma*u'*v + coef0)

l  degree :多項式poly函式的維度,預設是3,選擇其他核函式時會被忽略。

l  gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函式引數。預設是’auto’,則會選擇1/n_features

l  coef0 :核函式的常數項。對於‘poly’和 ‘sigmoid’有用。

l  probability :是否採用概率估計?.預設為False

l  shrinking :是否採用shrinking heuristic方法,預設為true

l  tol :停止訓練的誤差值大小,預設為1e-3

l  cache_size :核函式cache快取大小,預設為200

l  class_weight :類別的權重,字典形式傳遞。設定第幾類的引數C為weight*C(C-SVC中的C)

l  verbose :允許冗餘輸出?

l  max_iter :最大迭代次數。-1為無限制。

l  decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3

l  random_state :資料洗牌時的種子值,int值

主要調節的引數有:C、kernel、degree、gamma、coef0。

3.sklearn通過OneVsRestClassifier實現svm.SVC的多分類

sklearn中針對多分類其使用了1vs多,decision_function_shape : 'ovo', 'ovr', default='ovr'

import numpy as np
from sklearn.datasets import load_digits
from sklearn.preprocessing import label_binarize
from sklearn.multiclass import OneVsRestClassifier
from sklearn.model_selection import train_test_split


digits = load_digits()

x, y = digits.data, digits.target
y = label_binarize(y, classes=list(range(10)))
x_train, x_test, y_train, y_test = train_test_split(x, y)
model = OneVsRestClassifier(svm.SVC(kernel='linear'))
clf = model.fit(x_train, y_train)

In [236]: clf.score(x_train, y_train)
Out[236]: 0.97475872308834444

In [237]: clf.score(x_test, y_test)
Out[237]: 0.85999999999999999

In [242]: np.argmax(y_test, axis=1)
Out[242]: array([0, 0, 2, ..., 5, 6, 7], dtype=int64)

In [243]: np.argmax(clf.decision_function(x_test), axis=1)
Out[243]: array([0, 0, 2, ..., 5, 6, 7], dtype=int64)