1. 程式人生 > >sklearn學習筆記(3)svm多分類

sklearn學習筆記(3)svm多分類

SVC、NuSVC、LinearSVC都可以在一個數據集上實現多分類。
SVC和NuSVC方法類似,但是有不同的輸入引數集和不同的數學表述。另一方面,linearSVC是SVC的線上性核的基礎上的另一種實現,所以LinearSVC不能不能接受關鍵字“kernel”,只能是線性。
二分類
和別的分類器一樣,三種分類器需要輸入兩個陣列:X[n樣本][n維特徵](訓練資料集)Y[n個標籤](類標籤)

from sklearn import svm
X = [[00], [11]]
Y = [0, 1]

模型學習之後可以進行預測:

clf = svm.SVC()
clf.fit(X,y)
clf.predict([[2.
,2.]])

SVM的決策函式依賴於訓練資料集的支援向量子集。這些屬性可以通過下面函式進行檢視

#get support vector
clf.support_vectors_
#get indices of support vectors
clf.support_
#get number of support vectors for each class
clf.n_support_

多分類
SVC和NuSVC實現“1v1“的方法進行多分類(Knerr et al,1990)。如果n_class是類別的數量,那麼需要建立n*n/2個分類器,desision_function_shape

選項允許整合“1v1”分類器來刻畫(n_samples,n_features

clf = svm.SVC(decision_function_shape='ovo')
clf.fit(X, Y)
dec = clf.decision_function([[1]])
print dec.shape[1] # 4 classes: 4*3/2 = 6
print clf.predict([[1]])

clf.decision_function_shape = "ovr"
dec = clf.decision_function([[1]])
print dec.shape[1]
print clf.predict([[2.4
]])

同時,LinearSVC也實現了“one vs the rest”多分類策略。

lin_clf = svm.LinearSVC()
lin_clf.fit(X,Y)
dec = lin_clf.decision_function([[3]])
print dec.shape[1]
print lin_clf.predict(2.4)

評分和概率
SVC方法decision_function給每個樣本中的每個類一個評分,當我們將probability設定為True之後,我們可以通過predict_probapredict_log_proba可以對類別概率進行評估。
Wu, Lin and Weng, “Probability estimates for multi-class classification by pairwise coupling”, JMLR 5:975-1005, 2004.
不均衡問題
我們可以通過class_weightsample_weight兩個關鍵字實現對特定類別或者特定樣本的權重調整。