SVM是最經(jīng)常使用的分類器之1,其可以用來做分類,回歸和異常檢測。
其模型定義和學(xué)習(xí)以下:
原始問題:
對偶問題:
subject to
決策函數(shù):
其中
這3類都能用來做多類分類,SVC 和 NuSVC 類似,但是在1些參數(shù)上有所不同,LinearSVC 則是另外1種svm的實(shí)現(xiàn),它是線性核。
SVC, NuSVC 和LinearSVC的輸入訓(xùn)練數(shù)據(jù):[n_samples, n_features] ,標(biāo)簽數(shù)據(jù):[n_samples],標(biāo)簽可以是整數(shù)或是字符串都可以。
#訓(xùn)練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模型只需要用到訓(xùn)練數(shù)據(jù)中的1部份,也就是支持向量的部份。
support_vectors_:寄存模型的支持向量。
support_ :寄存模型的支持向量的索引。
n_support: 寄存模型每類的支持向量的數(shù)目。
原始的svm只能支持2類的分類,而多類分類是通過量次2分類來實(shí)現(xiàn)的,具體有兩種方式,即1對1和1對多兩種方式。
SVC 和 NuSVC是采取1對1的方式,如果 n_class 是總的種別的數(shù)目,那末共需要訓(xùn)練n_class * (n_class - 1) / 2 個(gè)不同的2分類器。
#獲得分類器的數(shù)目:
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對多的方式來進(jìn)行多分類,具體來講,有 n_class 個(gè)種別就訓(xùn)練n_class 個(gè)分類器,明顯,在了種別數(shù)目比較多的情況下,這樣更節(jié)省空間和時(shí)間。
SVC實(shí)現(xiàn)了不平衡訓(xùn)練數(shù)據(jù)集上的處理,通過設(shè)置class_weight參數(shù)來給每一個(gè)種別設(shè)置不同的權(quán)重,具體的使用還得看文檔。
SVM分類器可以很自然的被擴(kuò)大用來做回歸,被稱之為支持向量回歸。
SVR跟SVC1樣,模型只斟酌支持向量的數(shù)據(jù),那些原理分界邊際的點(diǎn)將被忽視。
跟SVC類似,其也有3個(gè)類來顯示它,對應(yīng)的是: 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 來實(shí)現(xiàn)異常檢測,這是1種無監(jiān)督的方法,它的訓(xùn)練數(shù)據(jù)只需要
SVM是1個(gè)2次計(jì)劃問題(QP問題),其實(shí)重訓(xùn)練數(shù)據(jù)集合中分離出支持向量的數(shù)據(jù)點(diǎn),在基于libsvm的實(shí)現(xiàn)中,其復(fù)雜度介于:
? 線性核:
? 多項(xiàng)式核:
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
上一篇 文件流程的操作