相信大家在機器學習中,一定常見到;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