丁建 李寧謙



摘要:將費歇(Fisher)分類器中的線性函數替換成非線性的高斯核函數,使用MNIST數據集對Fisher分類器進行訓練,研究了核函數對分類結果的影響以及將算法應用于手寫數字識別。結果表明,替換了高斯核的Fisher分類器,能夠有效地區分非線性數據的類別,同時又保持了線性數據的準確率。
關鍵詞:Fisher;核函數.手寫數字識別;MNIST;模式識別
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2020)01-0176-04
手寫數字識別在很多地方都有應用,例如智能機中的手寫輸入法,公司的稅務局報表、支票數字編碼識別等。被識別對象可以分為手寫體以及印刷體:印刷體相較于手寫體而言,具有字體規則,大小基本一致等特點,識別相對簡單;手寫體,由于個人書寫習慣不同,各具特點,識別相對困難。通過算法自動識別文字、數字、符號、字母,實現信息自動錄入,可以為稅務、金融、文學等工作者節省大量重復不必要工作的時間,加快工作速度,提升工作效率,同時產生一定的經濟效益。
數字的類型有多種,阿拉伯數字、羅馬數字等,目前研究較多的是針對阿拉伯數字似下簡稱數字1的識別。數字對比文字的優點在于字形簡單,缺點在于所含特征信息少。同種數字的多種寫法以及某些數字字形相似等多種特殊情況都給識別系統帶來巨大挑戰。
本文考慮10個類別的數字識別,已不再是簡單的線性分類問題,所以采用帶高斯核函數的Fisher分類器,用MNIST數據集訓練和測試模型。MNIST數據集是屬于美國國家標準與技術研究所(NIST)的子集,由250個不同人手寫的數字構成,其中一半來源于高中學生,剩下一半來自人口普查局的工作人員。
本文組織結構如下,第2章介紹線性Fisher算法,第3章介紹帶核函數的Fisher算法,第4章介紹手寫識別系統的設計、實現與測試,第5章為全文總結。
1Fisher算法
1.1算法簡介
在兩類問題中,已知樣本集合X內有N個d維的樣本,其中Ⅳ。個屬于c,類的樣本記為子集X1,N2個屬于C2類的樣本記為子集X2。
標準線性判別式(決策函數1:
由子集X1和X2的樣本經過投影后得到的對應子集Y1和Y1。因為我們關心的是W的方向,可以令W=1,那么yk就是‰在w方向上的投影。使Y1和Y2最容易分開的w方向正是區分超平面的法線方向。
1.2算法步驟
2使用核函數的Fisher算法
2.1常用核函數
核函數可以將線性空間中的非線性關系映射到非線性空間的變成線性關系,從而可以很好地克服線性方法無法處理非線性問題的不足。
2.2算法步驟
3系統設計、實現與測試
3.1系統流程
圖1給出了本識別系統的詳細流程。在用戶完成一次識別后,系統會給出預測值,當預測值與用戶實際手寫數字不相符時,用戶可以標注好此錯誤識別數字的正確標簽,并將錯誤樣本提交到該系統的數據庫中,以擴充系統的樣本數據,增加模型的識別率。
3.2模型訓練
實驗環境:操作系統Windowsl064位,硬件平臺:Intel-Corei7-6700 3.4GHz,內存16GB,開發環境:MATLABR2016a。
用于訓練的樣本量為60000個,圖片大小28x28像素,訓練總共耗時894秒;用于測試的樣本量為10000個,正確率為92.89%。Fisher屬于二分類的分類器,一次只能訓練2個類別,10個類別總共需要訓練45次。訓練過程如圖2所示。
3.3系統界面介紹
軟件采用MATLABGUI編程,系統界面主要由五大功能區域構成,區域一為顯示功能區,能顯示由用戶通過手寫窗口書寫的數字;區域二為分類器選擇區,可提供多種分類器(本文中只使用Fisher分類器);區域三為預測結果區,該區域不僅可以顯示結果,還可以統計錯誤與正確的個數(需要用戶按對應的按鈕來操作識別正確的個數和識別錯誤的個數),并自動計算出對應的正確率;區域四為增加新樣本區,用戶在本次識別之后,可以選擇將系統識別錯誤的樣本添加到系統的樣本庫中,以增加樣本庫的數據量;區域五為按鈕功能區,提供打開手寫框、導入圖片(支持PNG,JPEG,BMP格式)、啟動識別、系統重置和退出的功能。
系統使用流程:點擊界面上的“OpenDrawPad”按鈕,打開畫板,如圖4所示,進行數字書寫,完成后右擊畫板會自動保存所書寫的數字圖像,并處理為可以被識別的圖像格式。然后再點擊“Recognize”按鈕,進行識別,結果會顯示在界面的綠色區域內。如果預測結果與所寫數字匹配,請點擊“Right”按鈕,否則點擊“Wrong”按鈕。你可以選擇將本次識別的圖像作為新樣本,為訓練下次模型提供樣本。將正確的數字的標號輸入“La-bel”右側的輸入框內,并點擊“Add”按鈕,添加成功會在界面底部狀態欄進行提示,如圖5所示。
3.4系統測試
通過書寫0至9任意數字,對本系統進行測試,測試部分結果如圖6所示。測試共進行100次,每個數字進行10次測試,記錄數字每次的測試結果(表1),并統計對應的正確率與總體的正確率。通過表分析,該系統算法對0、1、2、3、7能夠準確識別,4、5、6、8、9能夠識別,實際100次平均識別率為71%。
4結論
在測試集中識別正確率達92%,但僅限于沒有旋轉的數字,一旦數字發生形變或位置發生偏移,都不能正確的被識別,所以訓練出來的模型局限性還是很大。待改進點一:可以對原始的數字圖片進行平移、旋轉、縮放等操作,以達到數據擴充的目的,增加識別系統的數據量;待改進點二:替換識別算法,利用現在比較先進的深度學習框架,例如GAN網絡、帶殘差塊的神經網絡等;待改進點三:增加系統中分類算法的選擇,此系統采用前后端分離的設計,方便擴展多種分類識別算法,可繼續增加SVM、決策樹、邏輯回歸等算法,來增加此系統識別模塊的魯棒性和識別率。