模型介紹:如圖所示的數(shù)據(jù)分類問題分歇,我們更有無數(shù)種線性分類邊界可供選擇透葛。
支持向量機分類器,便是根據(jù)訓(xùn)練樣本的分布卿樱,搜索所有的線性分類器中最佳的一個僚害。進一步仔細觀察圖中的紅線,我們會發(fā)現(xiàn)決定其直線位置的樣本并不是所有訓(xùn)練數(shù)據(jù)繁调,而是其中的兩個空間間隔最小的兩個不同類別的數(shù)據(jù)點萨蚕,而我們把這種可以用來真正幫助決策最優(yōu)線性分類模型的數(shù)據(jù)點叫做“支持向量”。
邏輯斯蒂回歸模型在訓(xùn)練過程中由于考慮了所有訓(xùn)練樣本對參數(shù)的影響蹄胰,因此不一定獲得最佳的分類器岳遥。
讀取代碼樣例
from sklearn.datasets import load_digits
#從通過數(shù)據(jù)加載器獲得手寫體數(shù)字的數(shù)碼圖像數(shù)據(jù)并儲存在digits變量中
digits=load_digits()
#檢視數(shù)據(jù)規(guī)模和特征維度
digits.data.shape
(1797, 64)
數(shù)據(jù)圖像數(shù)據(jù)共有1797條,并且每幅圖片是由8*8=64的像素矩陣表示裕寨。
分割代碼樣例
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(digits.data,digits.target,test_size=0.25,random_state=33)
#檢視訓(xùn)練數(shù)據(jù)規(guī)模
y_train.shape
(1347,)
#檢視測試數(shù)據(jù)規(guī)模
y_test.shape
(450,)
1797*0.25=450
使用支持向量機(分類)對手寫體數(shù)字圖像進行識別
from sklearn.preprocessing import StandardScaler
#從仍然需要訓(xùn)練和測試的特征數(shù)據(jù)進行標準化
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
from sklearn.svm import LinearSVC
#初始化線性假設(shè)的支持向量機分類器LinearSVC
lsvc=LinearSVC()
#進行模型訓(xùn)練
lsvc.fit(X_train,y_train)
#利用訓(xùn)練好的模型對測試樣本的數(shù)字類別進行預(yù)測浩蓉,預(yù)測結(jié)果儲存在變量y_predict中。
y_predict=lsvc.predict(X_test)
支持向量機(分類)對手寫體數(shù)字圖像進行識別能力的評估
#使用模型自帶的評估函數(shù)進行準確性測評
print('The Accuracy of LinearSVC is',lsvc.score(X_test,y_test))
The Accuracy of LinearSVC is 0.953333333333
#依然使用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)))
支持向量機(分類)模型的確能提供比較高的手寫體數(shù)字識別性能宾袜。平均而言捻艳,各項指標都在95%上下。
在這里需要進一步指出:召回率庆猫、準確率和F1指標最先適用于二分類任務(wù)认轨;但是在本示例中,我們的分類目標有10個類別月培,即0-9的10個數(shù)字嘁字。因此無法直接計算上述三個指標。通常的做法是杉畜,逐一評估某個類別的這三個性能指標纪蜒。