SVM支持向量機分類算法


SVM(Support Vector Machine)支持向量機是建立於統計學習理論上的一種二類分類算法,適合處理具備高維特征的數據集。它對數據的分類有兩種模式,一種是線性可分割,另一種是線性不可分割(即非線性分割)。SVM思想是:通過某種 核函數,將數據在高維空間里 尋找一個最優超平面,能夠 將兩類數據分開。支持向量是距離最優超平面最近的實例,因此有該算法用到的實例數據量相較其他會少巨多的說法,可以研究體會下。
 
針對不同數據集,不同核函數的分類效果可能完全不一樣。可選的核函數有這么幾種:
線性函數:形如K(x,y)=x*y這樣的線性函數;
多項式函數:形如K(x,y)=[(x·y)+1]^d這樣的多項式函數;
徑向基函數:形如K(x,y)=exp(-|x-y|^2/d^2)這樣的指數函數;
Sigmoid函數:......
 
SVM的一般流程
(1)收集數據:可以適用任意方法
(2)准備數據:需要數值型數據
(3)分析數據:有助於可視化分割 超平面
(4)訓練算法:SVM的大部分時間都源自訓練,該過程主要實現兩個參數的調優
(5)測試算法:十分簡單的計算過程就可以實現
(6)使用算法:幾乎所有二類分類問題都可以使用SVM,對多類問題需要對代碼做一些修改
 
 
簡單示例1
import numpy as np
import pylab as pl
from sklearn import svm
 
x = [[1, 1], [2, 5], [5, 5], [2, 4]]
y = [5, 6, 5,6]  #對應x的分類標記
clf = svm.SVC(kernel= 'linear') #線性核函數
clf.fit(x, y)
 
print clf
print clf.support_vectors_  #支持向量
print clf.support_  #支持向量是哪幾個(下標)
print clf.n_support_   #每一類中有幾個支持向量
print clf.predict([[4, 4]])  #測試數據
 
輸出:
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
[[1. 1.]
 [5. 5.]
 [2. 4.]]
[0 2 3]
[2 1]
[5]
 
 
簡單示例2
import numpy as np
import pylab as pl
from sklearn import svm
 
#生成隨機點數據集
np.random.seed(0) 
x = np.r_[np.random.randn(5, 2) - [2, 2], np.random.randn(5, 2) + [2, 2]]
y = [0] *5 +[1] * 5
print x
print y
 
clf2 = svm.SVC(kernel='linear')
clf2.fit(x, y)
print clf2.support_
print clf2.support_vectors_  
 
#畫出散點圖
#畫出支持向量的點,參數:x,y,大小
pl.scatter(clf2.support_vectors_[:, 0],clf2.support_vectors_[:, 1],s=100)
#畫出全部的點,參數:x,y,顏色,colormap,形狀
pl.scatter(x[:, 0],x[:, 1],c=y,cmap=pl.cm.Paired,marker='o')
pl.axis('tight')
pl.savefig('LinearSVC.png')
pl.show()
 
輸出:
LinearSVC.png圖片粘貼失敗,程序運行看吧。
 
 


免責聲明!

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



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