1. 程式人生 > >關於sklearn.svm.SVC與.NuSVC的區別以及引數介紹

關於sklearn.svm.SVC與.NuSVC的區別以及引數介紹

0. 區別

SVC與NuSVC是類似的方法,但是接受稍微不同的引數集合並具有不同的數學公式 ,並且NuSVC可以使用引數來控制支援向量的個數 , 以下程式碼預設的是多分類

1. SVC


# coding:utf-8

from sklearn import svm
from numpy import *

X = array([[0], [1], [2], [3]])
y = array([0, 1, 2, 3])

clf = svm.SVC()
clf.fit(X, y)
print("predict :",clf.predict([4]))
print(clf)
print("support index :"
, clf.support_) print("support Vec :", clf.support_vectors_,'\n','--'*5) print("number in class :", clf.n_support_) print("class label :",clf.classes_) print("len of classes :",len(clf.intercept_)) # 多分類器長度,1v1投票,見後文 # 列印結果 ''' predict : [3] SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) support index : [0 1 2 3] support Vec : [[ 0.] [ 1.] [ 2.] [ 3.]] ---------- number in class : [1 1 1 1] class label : [0 1 2 3] len of classes : 6 '''
# 註釋/解釋 ''' 關於引數 C: 目標函式的懲罰係數C,C越大,對訓練集測試時準確率越高,但泛化能力越弱,C值小,對誤分類的懲罰減小,允許容錯,泛化能力越強...預設1.0 shrinking: 啟發式,還沒解決,有助於計算效果... verbose: 展現細節...就是允許冗餘輸出 coef0: 核函式的常數項,對於poly和sigmoid核函式有用 degree: 多項式poly核函式的維度,預設是3,其他核函式會忽略 gamma: 不清楚,但調參後效果明顯;rbf,poly和sigmoid的核函式引數 tol: 停止訓練的誤差值大小,預設為1e-3 調引數 - 目前調整C與gamma效果不錯(針對kaggle的訓練) '''

百度 : 啟發式

2. NuSVC


# coding:utf-8

from sklearn import svm
from numpy import *

X = array([[0], [1], [2], [3]])
y = array([0, 1, 2, 3])

clf = svm.NuSVC()
clf.fit(X,y)
print("predict :",clf.predict([4]))
print(clf)
print("support index :", clf.support_)
print("support Vec :", clf.support_vectors_,'\n','--'*5)
print("number in class :", clf.n_support_)
print("class label :",clf.classes_)
print("len of classes :",len(clf.intercept_))

# 列印結果
'''
predict : [3]
NuSVC(cache_size=200, class_weight=None, coef0=0.0,
   decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',
   max_iter=-1, nu=0.5, probability=False, random_state=None,
   shrinking=True, tol=0.001, verbose=False)
support index : [0 1 2 3]
support Vec : [[ 0.]
 [ 1.]
 [ 2.]
 [ 3.]] 
 ----------
number in class : [1 1 1 1]
class label : [0 1 2 3]
len of classes : 6
'''
# 註釋解釋
'''
不同的引數:
nu: 官方解釋 An upper bound on the fraction of training errors and a lower bound of the fraction of support vectors. Should be in the interval (0, 1].
調參有效果,可參考
'''

3. 多分類投票

可以參考一下官方文件

SVM演算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合適的多類分類器,主要有1v1,1vN
1. 1v1 一對一法 : 兩兩為一類,一共C2n類,進行投票,Libsvm中的多類分類就是根據這個方法實現的。
2. 1vN 一對多法 : 訓練時依次把某個類別的樣本歸為一類,其餘的就是其他類,這樣就有N類,樣本選擇最大分類函式值的那一類。