天天看點

學習筆記231—SVC,NuSVC,LinearSVC有什麼差別

相信大家在機器學習​中,一定常見到;SVC​,NvSVC​,LinearSVC,今天我們就來看看這三者的差別。

一、SVC(C-Support Vector Classification):

支援向量分類,基于libsvm實作的,資料拟合的時間複雜度是資料樣本的二次方,這使得他很難擴充到10000個資料集,當輸入是多類别時(SVM最初是處理二分類問題的),通過一對一的方案解決,例如:

SVC參數解釋
(1)C: 目标函數的懲罰系數C,用來平衡分類間隔margin和錯分樣本的,default C = 1.0;
(2)kernel:參數選擇有RBF, Linear, Poly, Sigmoid, 預設的是"RBF";
(3)degree:if you choose 'Poly' in param 2, this is effective, degree決定了多項式的最高次幂;
(4)gamma:核函數的系數('Poly', 'RBF' and 'Sigmoid'), 預設是gamma = 1 / n_features;
(5)coef0:核函數中的獨立項,'RBF' and 'Poly'有效;
(6)probablity: 可能性估計是否使用(true or false);
(7)shrinking:是否進行啟發式;
(8)tol(default = 1e - 3): svm結束标準的精度;
(9)cache_size: 制定訓練所需要的記憶體(以MB為機關);
(10)class_weight: 每個類所占據的權重,不同的類設定不同的懲罰參數C, 預設的話自适應;
(11)verbose: 跟多線程有關,不大明白啥意思具體;
(12)max_iter: 最大疊代次數,default = 1, if max_iter = -1, no limited;
(13)decision_function_shape : ‘ovo’ 一對一, ‘ovr’ 多對多  or None 無, default=None
(14)random_state :用于機率估計的資料重排時的僞随機數生成器的種子。
 ps:7,8,9一般不考慮。
 
from sklearn.svm import SVC
import numpy as np
X= np.array([[-1,-1],[-2,-1],[1,1],[2,1]])
y = np.array([1,1,2,2])
 
clf = SVC()
clf.fit(X,y)
print clf.fit(X,y)
print clf.predict([[-0.8,-1]])      

二、NuSVC(Nu-Support Vector Classification.):

核支援向量分類,和SVC類似,也是基于libsvm實作的,但不同的是通過一個參數空值支援向量的個數

NuSVC參數
nu:訓練誤差的一個上界和支援向量的分數的下界。應在間隔(0,1 ]。
其餘同SVC
'''
import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import NuSVC
clf = NuSVC()
clf.fit(X, y) 
print clf.fit(X,y)
print(clf.predict([[-0.8, -1]]))      

三、LinearSVC(Linear Support Vector Classification):

線性支援向量分類,類似于SVC​,但是其使用的核函數是”linear“上邊介紹的兩種是按照brf(徑向基函數計算的,其實作也不是基于LIBSVM​,是以它具有更大的靈活性在選擇處罰和損失函數時,而且可以适應更大的資料集,它支援密集和稀疏的輸入是通過一對一的方式解決的

LinearSVC​ 參數解釋C:目标函數的懲罰系數C,用來平衡分類間隔margin和錯分樣本的,default C = 1.0;loss :指定​損失函數​penalty :dual :選擇算法來解決對偶或原始優化問題。當n_samples > n_features 時dual=false。

tol :(default = 1e - 3): svm結束标準的精度;

multi_class:如果y輸出類别包含多類,用來确定多類政策, ovr表示一對多,“crammer_singer”優化所有類别的一個共同的目标

如果選擇“crammer_singer”,損失、懲罰和優化将會被被忽略。

fit_intercept :

intercept_scaling :

class_weight :對于每一個類别i設定懲罰系數C = class_weight[i]*C,如果不給出,權重自動調整為 n_samples / (n_classes * np.bincount(y))

verbose:跟多線程有關,不大明白啥意思具體

from sklearn.svm import LinearSVC 
X=[[0],[1],[2],[3]]
Y = [0,1,2,3]
 
clf = LinearSVC(decision_function_shape='ovo') #ovo為一對一
clf.fit(X,Y)
print clf.fit(X,Y)
 
dec = clf.decision_function([[1]])    #傳回的是樣本距離超平面的距離
print dec
 
clf.decision_function_shape = "ovr"
dec =clf.decision_function([1]) #傳回的是樣本距離超平面的距離
print dec
 
#預測
print clf.predict([1])</span>