張來君
(西南大學商貿(mào)學院 重慶市 402460)
手寫數(shù)字識別是模式識別學科的一個傳統(tǒng)研究領域。由于數(shù)字類別只有10個,其識別率較其他字符高,可用于驗證新的理論。
王娜等人使用客觀聚類算法對手寫數(shù)字識別進行研究[1],解決了噪聲以及圖像結構敏感導致的識別準確度下降的問題,用簡單易行的方法有效地提高了識別準確度;王愛麗等人將條件生成對抗網(wǎng)絡應用于手寫數(shù)字識別中[2],解決了訓練樣本不足時出現(xiàn)的訓練不穩(wěn)定、識別準確度較低等問題,為條件生成對抗網(wǎng)絡在圖像識別領域提供了參考;陳虹州基于SVM對手寫數(shù)字識別進行了深入研究[3],解決了在小樣本空間中傳統(tǒng)學習方法出現(xiàn)的過擬合問題并深入分析了SVM的核函數(shù)以及分類策略對數(shù)字識別的影響,為其它研究人員提供了參考。支持向量機的出現(xiàn)為小容量樣本集的統(tǒng)計識別提供了新的工具,其表現(xiàn)在某些方面更是優(yōu)于已知的一些傳統(tǒng)方法。
如圖1所示,使用SVM實現(xiàn)手寫數(shù)字識別的流程分為數(shù)據(jù)集劃分、圖像預處理、訓練模型與測試、分類等步驟。
圖1:基于SVM的手寫數(shù)字識別流程圖
支持向量機(support vector machines, SVM)是定義在特征空間使得分類間隔最大的線性分類器[4],其目標是找出能夠實現(xiàn)上述要求的最優(yōu)分類面。在線性可分的情況下,若給定的樣本集有m個樣本,即:
其中xi表示特征空間中的第i個樣本,yi表示其分類結果。支持向量機的核心就是在樣本集T的特征空間中找到一個最優(yōu)分類面w*x+b=0。該分類面應該使得分類間隔最大,即距離該平面最近的樣本(即支持向量)到該平面的距離最大。求解最優(yōu)分類面的過程實質上是解決一個二次凸規(guī)劃問題,即需要找到滿足yi(w*x+b)≥1條件的w和b,還需要使分類間隔最大。在線性不可分的情況下,引入一個松弛項ξ,即滿足yi(w*x+b)+ξ≥1條件的問題可以繼續(xù)使用最優(yōu)分類面進行近似的線性劃分,這樣便可得到廣義的最優(yōu)分類面;在非線性的情況下,則可以將其轉化為某個高維空間的線性問題,然后再求最優(yōu)分類面。但這種轉換和求解通常比較復雜,不容易實現(xiàn),所以SVM中又引入了一個非常重要的概念——核函數(shù)。核函數(shù)可以將樣本空間映射到高維空間,并且不增加計算的復雜度。有了核函數(shù)的加入,支持向量機最終趨于完善。
MNIST是機器學習領域一個經(jīng)典數(shù)據(jù)集[5],該數(shù)據(jù)集的每一個樣本均為28×28像素的灰度手寫數(shù)字圖像。它主要分為兩部分。一部分是包含六萬張手寫數(shù)字圖片的訓練集,另一部分是一萬張的測試集。對數(shù)據(jù)集進行劃分可以有效避免在訓練過程中出現(xiàn)過擬合問題。
圖像預處理主要是為了清除圖像中的無用信息,保留關鍵信息。這樣可以方便識別,同時也有利于改進圖像特征抽取可靠性。對MNIST中的圖像進行預處理主要包括歸一化和二值化。歸一化主要是對圖像進行裁剪以及縮放,統(tǒng)一圖像規(guī)格。二值化則是對圖像數(shù)據(jù)進行灰度化處理,將灰度值映射到0-1的范圍內,并對映射后的灰度值取值0或1,將圖像用二值矩陣表示。
SVM的核函數(shù)以及分類策略的選擇對識別準確度有著重要影響。本方案選用三種不同的核函數(shù)以及兩種不同的分類策略分別訓練出不同類型的SVM模型,并通過實驗結果的比較挑選出最優(yōu)的SVM模型。
目前較為常見的核函數(shù)有線性核函數(shù)、Sigmoid核函數(shù)、高斯核函數(shù)以及多項式核函數(shù)等[6]。本方案主要使用前三種核函數(shù)進行實驗。由于支持向量機是一個二值分類器,主要針對二分類問題。所以要使SVM實現(xiàn)多分類,選擇一種合適的分類策略是必需的。常用的分類策略有兩種,分別是一對一策略(OVO)和一對多策略(OVR)。
因為三種核函數(shù)和兩種分類策略共有六種組合,所以在訓練模型時,通過調整核參數(shù)等措施分別訓練六種不同類型的SVM模型,使各自的SVM模型都能夠達到理想的識別準確度,并記錄下各自的訓練時間。之后再用訓練好的SVM模型對測試數(shù)據(jù)集中的樣本進行測試,并記錄下各自的測試時間以及識別準確率。經(jīng)過多次測試,求出SVM模型各自的平均準確率。通過綜合比較,挑選出最優(yōu)SVM模型。
本實驗首先需要準備好訓練數(shù)據(jù)。在對圖像進行預處理之后,每張圖像都轉化為一個二值矩陣,再用numpy向量表示該二值矩陣。接著將每個類別下的所有實例都分別用一個numpy向量表示,同時記錄每張圖像所屬的類別,最后將所有的numpy向量整合成一個矩陣。至此,就將MNIST中的所有圖像都轉換為一個灰度值二元化的矩陣。該二值矩陣的每一個行向量都是一張圖像灰度值二元化的結果,矩陣的行向量的個數(shù)就是MNIST數(shù)據(jù)集圖像的個數(shù)。其次就是構造SVM模型。通過調用sklearn庫中的SVC函數(shù)來實現(xiàn)對SVM模型的構造。通過修改SVM函數(shù)中的kernel參數(shù)選擇不同的核函數(shù),比如線性核函數(shù)(linner),高斯核函數(shù)(rbf),以及sigmoid核函數(shù)(sigmoid)。通過修改decision_function_shape參數(shù)選擇不同的分類策略,比如一對一策略(ovo)、一對多策略(ovr)。然后對不同的SVM模型分別進行訓練。通過調整SVC函數(shù)中的懲罰系數(shù)、核函數(shù)系數(shù)等,使得不同類別SVM模型的識別準確度分別達到理想效果。并記錄下各自的訓練時間。再用訓練好的SVM模型對測試集中的圖像數(shù)據(jù)進行識別,分別記錄每一類別數(shù)字的識別準確度。進行多次測試,記錄每種SVM模型的平均識別準確率以及測試所花費的時間。通過對比分析,挑選出最優(yōu)的SVM模型。最終使用最優(yōu)的SVM模型對樣本進行分類。
經(jīng)過多次試驗,得到的實驗結果如圖2、圖3所示。
圖2:不同SVM模型的訓練時間和測試時間
圖3:不同SVM模型的平均識別準確率
對比圖2的數(shù)據(jù)可以得知,無論是采用OVO策略還是采用OVR策略,使用高斯核函數(shù)的SVM模型在訓練以及測試上花費的時間均為最短,其次是線性核函數(shù),sigmoid核函數(shù)最長。兩種分類策略對SVM模型的影響相似,差別不大,但采用了OVO方法的SVM模型在訓練和測試上花費的時間總體略小于采用了OVR方法的SVM模型。從圖3可以看到采用相同的核函數(shù)而采用不同的分類策略的SVM模型的平均識別準確率一樣。其中,采用了高斯核函數(shù)的SVM模型識別率最高,其次是線性核函數(shù),最后是sigmoid核函數(shù)。造成以上情況發(fā)生的原因如下:
(1)線性核函數(shù)主要是針對線性可分問題,而數(shù)字的書寫靈活多變、復雜多樣,很難線性劃分。因此使用線性核函數(shù)的SVM模型識別效果最差。
(2)OVO方法是在任意兩個類之間尋找最優(yōu)分類面,所以理論上需要訓練N×(N-1)/2個二值分類器。而OVR方法只需訓練N個分類器,所以一般情況下OVR的額外開銷時間更少。當樣本集數(shù)量偏大時,由于OVR分類器每次需要訓練N-1個類的樣本,而OVO分類器只需要訓練兩類樣本,所以此時OVO訓練時間有可能和OVR持平或者少于。
綜上,對于數(shù)據(jù)集MNIS,使用高斯核函數(shù)或者sigmoid核函數(shù)的SVM模型識別效果總體較好,而使用線性核函數(shù)的效果最差。OVO方法和OVR方法產(chǎn)生的分類效果相近。
本文簡單地介紹了支持向量機的基本原理,并使用SVM模型實現(xiàn)了對手寫數(shù)字圖像的識別。本文選用三種核函數(shù)以及兩種分類策略構成的六種不同類型的SVM模型對數(shù)據(jù)集進行訓練和測試,最終確定高斯核函數(shù)和sigmoid核函數(shù)比較適用于手寫數(shù)字識別,而線性核函數(shù)則不適合。在樣本容量不足夠大時,一對一和一對多分類策略對SVM模型訓練和測試時間的影響相似,幾乎具有同等效果。可見,兩種分類策略對SVM模型識別準確度的影響具有同等地位。采用高斯核函數(shù)的SVM模型的識別準確率雖然達到了97.7%,但并未達到理想識別準確度,仍有很大的提升空間。如何繼續(xù)提高支持向量機識別準確率、減少誤識率、縮短識別時間仍然是未來研究的重要課題。