機器學習:sklearn.svm.SVC 引數說明
2.sklearn.svm.SVC()引數
引數:
l 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)