支持向量機(support vector machine)是一種分類算法,通過尋求結(jié)構(gòu)化風(fēng)險最小來提高學(xué)習(xí)機泛化能力,實現(xiàn)經(jīng)驗風(fēng)險和置信范圍的最小化,從而達到在統(tǒng)計樣本量較少的情況下,亦能獲得良好統(tǒng)計規(guī)律的目的。通俗來講,它是一種二類分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器,即支持向量機的學(xué)習(xí)策略便是間隔最大化,最終可轉(zhuǎn)化為一個凸二次規(guī)劃問題的求解。
原理
具體原理:
- 在n維空間中找到一個分類超平面,將空間上的點分類。
- 一般而言,一個點距離超平面的遠(yuǎn)近可以表示為分類預(yù)測的確信或準(zhǔn)確程度。SVM就是要最大化這個間隔值。
- 把樣例特征映射到高維空間中去。線性不可分映射到高維空間,可能會導(dǎo)致維度大小高到可怕的(19維乃至無窮維的例子),導(dǎo)致計算復(fù)雜。核函數(shù)的價值在于它雖然也是講特征進行從低維到高維的轉(zhuǎn)換,但核函數(shù)絕就絕在它事先在低維上進行計算,而將實質(zhì)上的分類效果表現(xiàn)在了高維上,也就如上文所說的避免了直接在高維空間中的復(fù)雜計算。
4.使用松弛變量處理數(shù)據(jù)噪音
具體原理就不講了,下面代碼是利用支持向量機來訓(xùn)練手寫識別的
from sklearn.datasets import load_digits
#從sklearn.datasets導(dǎo)入手寫數(shù)字加載器
#把加載的數(shù)據(jù)存儲到digits變量中
digits=load_digits()
#檢查數(shù)據(jù)的規(guī)模和特征維度
print(digits.data.shape)
#導(dǎo)入train_text_split用于數(shù)據(jù)分割
from sklearn.cross_validation import train_test_split
#分割數(shù)據(jù)25%用于測試,75%用于訓(xùn)練
X_train,X_test,Y_train,Y_test=train_test_split(digits.data,digits.target,test_size=0.25,random_state=33)
#查看數(shù)據(jù)分布
print(Y_train.shape)
print(Y_test.shape)
#導(dǎo)入數(shù)據(jù)標(biāo)準(zhǔn)化模塊
from sklearn.preprocessing import StandardScaler
#導(dǎo)入支持向量機分類器LinearSVC
from sklearn.svm import LinearSVC
#對數(shù)據(jù)進行標(biāo)準(zhǔn)化
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
#初始化支持向量機LinearSVC
lsvc=LinearSVC()
#進行模型訓(xùn)練
lsvc.fit(X_train,Y_train)
#使用訓(xùn)練好的模型進行預(yù)測
y_predict=lsvc.predict(X_test)
#使用模型自帶的評估函數(shù)進行準(zhǔn)確性評測
print('The Accuracy of Linear SVC is',lsvc.score(X_test,Y_test))
#使用sklearn.metrics里面的classification_report模塊對預(yù)測結(jié)果做性能分析
from sklearn.metrics import classification_report
print(classification_report(Y_test,y_predict,target_names=digits.target_names.astype(str)))
結(jié)果如下所示:

結(jié)果.png