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