01.10 支持向量機分類模型預測手寫數字


快遞公司每天都會接收處理大量的快遞,多數的地址郵編都是通過手寫,並且每個人寫的數字都樣式各異,原本這項任務是通過人工來進行,後來人們嘗試用機器代替人工,但是由於沒有統一的形狀規則來進行識別分類,機器也沒有取得很好的效果。隨著機器學習技術的興起,研究人員開始重新考慮這個任務,並且通過大量的研究證明:支持向量機(SVM)對手寫數字有很好的預測效果。


支持向量機分類模型預測手寫數字

什麼是支持向量機

支持向量機(Support Vector Machine),簡而言之,就是通過對向量的進行運算的一種二分類器。百科的含義:是一類按監督學習方式對數據進行二元分類的廣義線性分類器,其決策邊界是對學習樣本求解的最大邊距超平面。具體原理後續抽時間再細說。

支持向量機分類模型預測手寫數字

本文通過sklearn內部集成的數據中獲取手寫數字圖片數據集,並對數據進行建模預測,最後進行性能評估。由於數字從0-9共有10個類別,而召回率、準確率、F1指標只適用於二分類任務,因此本次性能評估需要創造10個二分類。

數據獲取

從sklearn.datasets裡導入手寫數字圖片數據加載器,並將加載器的數據存儲在digits中,獲取數據特徵和數據標籤。


from sklearn.datasets import load_digits

digits = load_digits()

data_x = digits.data

data_y = digits.target

#檢查手寫數據的記錄和維度

data_x.shape (1797, 64)

data_y.shape (1797,)

數據分割並標準化

使用train_test_split模型 將數據 按1:3 的比例進行分割,測試數據佔比25% ,訓練數據 佔比75%。並使用StandardScaler函數進行標準化。


from sklearn.cross_validation import train_test_split

x_train,x_test,y_train,y_test = train_test_split(data_x,data_y,test_size=0.25,random_state=33)

#數據標準化

from sklearn.preprocessing import StandardScaler

#標準化數據

SS= StandardScaler()

x_train=SS.fit_transform(x_train)

x_test=SS.transform(x_test)

支持向量機分類模型建模

使用支持向量機分類算法對上述的訓練數據進行學習,並對測試數據進行預測。


from sklearn.svm import LinearSVC

lsvc = LinearSVC() #初始化模型

lsvc.fit(x_train,y_train) #調用fit函數進行模型訓練

y_predict = lsvc.predict(x_test) #使用predict 函數進行預測

模型性能評估

通過自帶的評估函數對模型結果進行準確性測評,並使用classification_report模塊對預測結果進行詳細的分析。


from sklearn.metrics import classification_report

print("模型得分:%.2f" % (float(lsvc.score(x_test,y_test))*100))

print(classification_report(y_test, y_predict,target_names= digits.target_names.astype('str')))

預測結果如下:


支持向量機分類模型預測手寫數字

針對450個預測進行對比,模型整體平均得分在95分左右,支持向量機對手寫數據的識別效果確實不錯。

支持向量機特點分析

支持向量機精妙的模型假設,適用於數據量建模,但是數據量一大,這些優勢需要付出很大的計算待機(計算時間和CPU的資源)。所以針對大數據,還是要結合實際情況,權衡利弊選擇支持向量機模型。


今天就到這,如有疑惑,歡迎大家關注留言,共同學習,共同進步!

支持向量機分類模型預測手寫數字支持向量機分類模型預測手寫數字


分享到:


相關文章: