SVM是最經常使用的分類器之1,其可以用來做分類,回歸和異常檢測。
其模型定義和學習以下:
原始問題:
對偶問題:
subject to
決策函數:
其中
這3類都能用來做多類分類,SVC 和 NuSVC 類似,但是在1些參數上有所不同,LinearSVC 則是另外1種svm的實現,它是線性核。
SVC, NuSVC 和LinearSVC的輸入訓練數據:[n_samples, n_features] ,標簽數據:[n_samples],標簽可以是整數或是字符串都可以。
#訓練svm:
>>> from sklearn import svm
>>> X = [[0, 0], [1, 1]]
>>> y = [0, 1]
>>> clf = svm.SVC()
>>> clf.fit(X, y) `
#測試svm`
>>> clf.predict([[2., 2.]
由于svm模型只需要用到訓練數據中的1部份,也就是支持向量的部份。
support_vectors_:寄存模型的支持向量。
support_ :寄存模型的支持向量的索引。
n_support: 寄存模型每類的支持向量的數目。
原始的svm只能支持2類的分類,而多類分類是通過量次2分類來實現的,具體有兩種方式,即1對1和1對多兩種方式。
SVC 和 NuSVC是采取1對1的方式,如果 n_class 是總的種別的數目,那末共需要訓練n_class * (n_class - 1) / 2 個不同的2分類器。
#獲得分類器的數目:
X = [[0], [1], [2], [3]]
Y = [0, 1, 2, 3]
clf = svm.SVC()
clf.fit(X, Y)
dec = clf.decision_function([[1]])
print dec.shape[1]
不同的是, LinearSVC 是采取1對多的方式來進行多分類,具體來講,有 n_class 個種別就訓練n_class 個分類器,明顯,在了種別數目比較多的情況下,這樣更節省空間和時間。
SVC實現了不平衡訓練數據集上的處理,通過設置class_weight參數來給每一個種別設置不同的權重,具體的使用還得看文檔。
SVM分類器可以很自然的被擴大用來做回歸,被稱之為支持向量回歸。
SVR跟SVC1樣,模型只斟酌支持向量的數據,那些原理分界邊際的點將被忽視。
跟SVC類似,其也有3個類來顯示它,對應的是: SVR, NuSVR , LinearSVR,
>>> from sklearn import svm
>>> X = [[0, 0], [2, 2]]
>>> y = [0.5, 2.5]
>>> clf = svm.SVR()
>>> clf.fit(X, y)
SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma=0.0,
kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)
>>> clf.predict([[1, 1]])
array([ 1.5])
種別:OneClassSVM 來實現異常檢測,這是1種無監督的方法,它的訓練數據只需要
SVM是1個2次計劃問題(QP問題),其實重訓練數據集合中分離出支持向量的數據點,在基于libsvm的實現中,其復雜度介于:
? 線性核:
? 多項式核:
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
上一篇 文件流程的操作