關於sklearn.svm.SVC與.NuSVC的區別以及引數介紹
阿新 • • 發佈:2019-02-02
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 一對一法 : 兩兩為一類,一共
2. 1vN 一對多法 : 訓練時依次把某個類別的樣本歸為一類,其餘的就是其他類,這樣就有N類,樣本選擇最大分類函式值的那一類。