黃金海
(桂林電子科技大學(xué) 信息科技學(xué)院,廣西 桂林 541004)
在模式識(shí)別領(lǐng)域,對(duì)手寫體數(shù)字的識(shí)別,是許多從事圖像處理、機(jī)器學(xué)習(xí)研究人員的入門練習(xí)。其實(shí)現(xiàn)方法已經(jīng)有許多成功的案例,王一木等[1]提出自組織映射簡(jiǎn)化算法在硬件電路上以并行運(yùn)算實(shí)現(xiàn)的手寫數(shù)字識(shí)別。邵虹等[2]提出基于投影定位及數(shù)字結(jié)構(gòu)特征的方法識(shí)別發(fā)票印刷體數(shù)字。幸堅(jiān)炬等[3]提出概率神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)mnist數(shù)據(jù)集數(shù)字的識(shí)別,并有較高的準(zhǔn)確率。李瓊等[4]提出在特征空間中確定SVM最優(yōu)核方法實(shí)現(xiàn)手寫數(shù)字的識(shí)別。以上實(shí)現(xiàn)方法都采用不同的算法實(shí)現(xiàn),本文以成功識(shí)別手寫數(shù)字為出發(fā)點(diǎn),提出在pyqt5環(huán)境中以K-最近鄰(K-Nearest Neighbor,KNN)分類器算法實(shí)現(xiàn)手寫體數(shù)字的識(shí)別。
在機(jī)器學(xué)習(xí)分類方法中,KNN是無(wú)監(jiān)督學(xué)習(xí)中最簡(jiǎn)單、易理解的分類算法。該思想是Cover和Hart在1968年的研究工作中提出的,它根據(jù)距離函數(shù)計(jì)算待分類樣本X和每個(gè)訓(xùn)練樣本間的距離(作為相似度),選擇與待分類樣本距離最小的K個(gè)樣本作為X的K個(gè)最近鄰,最后以X的K個(gè)最近鄰中的大多數(shù)樣本所屬的類別作為X的類別[5]。
KNN算法大致包括如下3個(gè)步驟。
(1)算距離:給定測(cè)試對(duì)象,計(jì)算它與訓(xùn)練集中的每個(gè)對(duì)象的距離。
(2)找鄰居:圈定距離最近的K個(gè)訓(xùn)練對(duì)象,作為測(cè)試對(duì)象的近鄰。
(3)做分類:根據(jù)這K個(gè)近鄰歸屬的主要類別,來(lái)對(duì)測(cè)試對(duì)象分類。
因此,最為關(guān)鍵的就是距離的計(jì)算。一般而言,定義一個(gè)距離函數(shù)d(x,y),需要滿足以下幾個(gè)準(zhǔn)則。
d(x,y)=0
d(x,y)≥0
d(x,y)=d(y,x)
d(x,k)+d(k,y)≥d(x,y)
距離計(jì)算有很多方法,本文以歐幾里得距離(Euclidean distance)實(shí)現(xiàn)手寫體數(shù)字的識(shí)別。其計(jì)算公式如下:
手寫數(shù)字的原始圖像,可以有多種獲取方法,本文以畫圖面板寫出任意0~9的數(shù)字,并按順序以jpg格式命名數(shù)字圖像作為手寫體數(shù)字的初始樣本圖像。圖1中列舉了每個(gè)數(shù)字的兩種手寫體樣本。
當(dāng)讀入數(shù)字樣本圖片時(shí),首先對(duì)數(shù)字樣本進(jìn)行圖像預(yù)處理,預(yù)處理過(guò)程包括將圖片灰度化、縮放為與訓(xùn)練集同等尺寸大小32×32格式、將32×32圖片二值化并保存為txt文件。接著K值取3對(duì)新保存的txt樣本訓(xùn)練;訓(xùn)練完成后根據(jù)KNN多數(shù)分類法則識(shí)別顯示。流程如圖2所示。
圖2 識(shí)別流程
樣本的數(shù)據(jù)處理包含數(shù)字的訓(xùn)練和識(shí)別兩部分。數(shù)字的訓(xùn)練集和測(cè)試集分別是常用的trainingDigits和testDigits。由于數(shù)據(jù)集是已經(jīng)二值化的txt文本格式,需要將32×32的測(cè)試集與訓(xùn)練集分別轉(zhuǎn)換為1×1 024的一維向量,把測(cè)試集中每一個(gè)樣本分別與訓(xùn)練中每個(gè)樣本進(jìn)行歐幾里得距離計(jì)算,計(jì)算結(jié)果按KNN原理分類提取各個(gè)樣本標(biāo)簽,分別完成預(yù)測(cè)數(shù)字和真實(shí)數(shù)字的比較。當(dāng)K值分別取3,5,7,9時(shí),其運(yùn)算的正確率如表1所示。
表1 不同K值正確率
從表1中可知,當(dāng)K取3時(shí),正確率最高,達(dá)到98.99%。K取取值越大,正確率均略有下降。
經(jīng)過(guò)上述數(shù)據(jù)處理分析,測(cè)試集與訓(xùn)練集的比較結(jié)果有高達(dá)97%以上的正確率,那么輸入前文所述的20個(gè)測(cè)試樣本,以pyqt5作為顯示界面,與訓(xùn)練集中的所有樣本進(jìn)行KNN運(yùn)算,其測(cè)試結(jié)果如圖3所示。
圖3 KNN手寫體數(shù)字測(cè)試圖
由圖3可知,手寫體數(shù)字的KNN算法識(shí)別準(zhǔn)確率與測(cè)試集的準(zhǔn)確率有較大差距,20個(gè)樣本中15個(gè)正確,錯(cuò)誤率高達(dá)25%。這表明,KNN算法在手寫體數(shù)字識(shí)別中的應(yīng)用研究仍有待提高。
手寫體數(shù)字的KNN算法執(zhí)行效率并不高,識(shí)別準(zhǔn)確率的提高需要更多訓(xùn)練樣本集,如mnist數(shù)據(jù)集。但是,數(shù)據(jù)樣本集越多,運(yùn)算的時(shí)間就會(huì)越長(zhǎng),其效率也會(huì)越低。工程應(yīng)用中人們都希望識(shí)別能力既高效準(zhǔn)確率又高,技術(shù)人員可以嘗試其他算法模型來(lái)完善識(shí)別效果。