學習筆記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>

參考連接:https://www.cda.cn/bigdata/27792.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM