葉曉波 秦海菲 呂永林
摘 要: 介紹了多元正態(tài)分布及邊界判別方法,詳細(xì)闡述了數(shù)據(jù)降維方法中的主成分分析(PCA降維),分析了MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)讀取方法,論述了基于多元正態(tài)分布的手寫數(shù)字識(shí)別方法的整個(gè)實(shí)驗(yàn)過(guò)程。實(shí)驗(yàn)結(jié)果顯示,經(jīng)PCA降維后的手寫數(shù)字呈現(xiàn)多元正態(tài)分布的特征,使用正態(tài)分布的邊界判別方法對(duì)手寫數(shù)字進(jìn)行識(shí)別運(yùn)行效率高。
關(guān)鍵詞: 手寫數(shù)字識(shí)別; 主成分分析(PCA); MNIST; 多元正態(tài)分布
中圖分類號(hào):TP391.43 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2018)10-11-04
Abstract: A handwritten digits recognition method based on multivariate normal distribution is proposed and studied experimentally. This paper introduces the multivariate normal distribution and boundary discrimination method, expounds in detail the principal component analysis (PCA) in the data dimension reduction method, and analyzes the data structure and data reading method of the most popular handwritten digits database MNIST. The whole experiment process of handwritten digits recognition method based on multivariate normal distribution is discussed in detail. The experimental results show that the handwritten digits reduced by PCA show the characteristics of multivariate normal publication. The boundary discriminant method based on normal distribution is efficient to recognize handwritten digits.
Key words: handwritten digits recognition; principal component analysis(PCA); MNIST; multivariate normal distribution
0 引言
模式識(shí)別是一門以應(yīng)用為基礎(chǔ)的學(xué)科,目的是將對(duì)象進(jìn)行分類[1]。手寫數(shù)字識(shí)別是研究如何利用計(jì)算機(jī)自動(dòng)識(shí)別人手寫在紙張上的阿拉伯?dāng)?shù)字[2],從模式識(shí)別角度來(lái)看,是將手寫數(shù)字進(jìn)行分類。雖然阿拉伯?dāng)?shù)字只有10個(gè),但同一個(gè)數(shù)字的寫法變化多樣[3]。要準(zhǔn)確識(shí)別手寫數(shù)字還是有一定的難度。
目前,對(duì)于手寫數(shù)字的識(shí)別主要采用神經(jīng)網(wǎng)絡(luò),常用卷積神經(jīng)網(wǎng)絡(luò)、BP神經(jīng)網(wǎng)絡(luò)等。筆者在對(duì)手寫數(shù)字識(shí)別的研究過(guò)程中發(fā)現(xiàn),雖然手寫數(shù)字的寫法變化多樣,但同一數(shù)字的不同寫法在數(shù)據(jù)分布上應(yīng)該符合正態(tài)分布,即所有手寫的同一數(shù)字都具有一定的相似性,如果同一手寫數(shù)字在數(shù)據(jù)分布上符合正態(tài)分布,就可以使用正態(tài)分布邊界判別法對(duì)手寫數(shù)字進(jìn)行識(shí)別;基于這一想法,筆者進(jìn)行了相應(yīng)的實(shí)驗(yàn)研究,并提出基于多元正態(tài)分布的手寫數(shù)字識(shí)別方法。
1 多元正態(tài)分布及邊界判別
在一般的多元正態(tài)分布的情況下,待分類樣本的協(xié)方差是不同的,設(shè)x是一個(gè)n維列向量,μ是n維均值向量,∑是n×n的協(xié)方差矩陣,|∑|和∑-1分別是其行列式的值和逆,多元正態(tài)分布邊界判別函數(shù)如下[4]:
假設(shè)待分類樣本共有m類,根據(jù)公式⑴計(jì)算可得m個(gè)判別函數(shù)結(jié)果,待分類樣本xi的分類結(jié)果就是:
2 PCA降維
PCA降維是一種數(shù)據(jù)降維算法,數(shù)據(jù)降維是指通過(guò)線性或非線性映射將樣本從高維空間映射到低維空間,從而獲得高維數(shù)據(jù)的一個(gè)有意義的低維表示的過(guò)程[5]。數(shù)據(jù)降維可解決“維數(shù)災(zāi)難”,即指在涉及到向量的計(jì)算的問(wèn)題中,隨著維數(shù)的增加,計(jì)算量呈指數(shù)倍增長(zhǎng)的一種現(xiàn)象[6]。經(jīng)過(guò)降維后的數(shù)據(jù)相比原始數(shù)據(jù)更容易處理和使用,還可去除原始數(shù)據(jù)的噪聲和冗余,降低算法開(kāi)銷。常見(jiàn)的降維算法有主成分分析(也稱PCA降維)、因子分析和獨(dú)立成分分析。
PCA降維是通過(guò)對(duì)原始變量的相關(guān)矩陣或協(xié)方差矩陣內(nèi)部結(jié)構(gòu)的研究,將多個(gè)變量轉(zhuǎn)換為少數(shù)幾個(gè)綜合變量(即主成分),從而達(dá)到降維目的的一種線性降維方法[5]。這些主成分能夠反映原始變量的絕大部分信息,它們通常表示為原始變量的線性組合,通過(guò)PCA降維,可實(shí)現(xiàn)用較少的數(shù)據(jù)維度代替較多的原數(shù)據(jù)點(diǎn)。
本文所論述的實(shí)驗(yàn)使用了目前最流行的MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù),MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)共包含60000個(gè)訓(xùn)練樣本數(shù)據(jù),10000個(gè)測(cè)試樣本數(shù)據(jù),每一個(gè)樣本數(shù)據(jù)(圖片)大小都是784像素,也就是說(shuō):訓(xùn)練樣本數(shù)據(jù)(矩陣)的大小是60000*784,測(cè)試樣本數(shù)據(jù)(矩陣)的大小是10000*784,這樣大小的數(shù)據(jù)在識(shí)別計(jì)算過(guò)程中算法開(kāi)銷大,因此,在對(duì)手寫數(shù)字識(shí)別之前應(yīng)該對(duì)數(shù)據(jù)進(jìn)行降維。
本文所論述的實(shí)驗(yàn)使用Matlab提供的pca函數(shù)對(duì)訓(xùn)練樣本數(shù)據(jù)進(jìn)行PCA降維,通過(guò)pca函數(shù)可得到訓(xùn)練樣本的降維矩陣,使用降維矩陣對(duì)訓(xùn)練樣本和測(cè)試樣本數(shù)據(jù)進(jìn)行降維處理;用pca函數(shù)生成降維矩陣時(shí),根據(jù)特征值的累積貢獻(xiàn)率不同可生成不同還原度的降維矩陣,累積貢獻(xiàn)率是指降維后能保持原始數(shù)據(jù)的真實(shí)率,也就是說(shuō)累積貢獻(xiàn)率越大(值越接近1),則降維后的矩陣數(shù)據(jù)能更真實(shí)的反映原始數(shù)據(jù),但貢獻(xiàn)率越大,則數(shù)據(jù)維度減少的就越少,從而帶來(lái)降維效果不明顯的問(wèn)題;累積貢獻(xiàn)率越小(值越接近0),則矩陣數(shù)據(jù)維度減少的就越多,但降維后的數(shù)據(jù)與原始數(shù)據(jù)偏離會(huì)明顯加大。
3 實(shí)驗(yàn)思路及結(jié)論
實(shí)驗(yàn)軟件環(huán)境為Windows 7(64位)、Matlab 2016b,硬件環(huán)境為Intel I5-3570K、8G內(nèi)存。實(shí)驗(yàn)程序設(shè)計(jì)均在Matlab 2016b下完成,以下是整個(gè)實(shí)驗(yàn)的思路、過(guò)程和結(jié)論。
3.1 實(shí)驗(yàn)數(shù)據(jù)詳情
本實(shí)驗(yàn)采用目前手寫數(shù)字識(shí)別最流行的MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)(http://yann.lecun.com/exdb/mnist/)。MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)共包含60000個(gè)訓(xùn)練樣本數(shù)據(jù),10000個(gè)測(cè)試樣本數(shù)據(jù),每一個(gè)樣本數(shù)據(jù)(圖片)都是標(biāo)準(zhǔn)化的,即每一張手寫數(shù)字圖片大小相同(28*28像素),圖片上的手寫數(shù)字都已做了居中處理,MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)被研究者廣泛用作測(cè)試模式識(shí)別方法的基準(zhǔn),也被學(xué)生用于模式識(shí)別、機(jī)器學(xué)習(xí)和統(tǒng)計(jì)方面的課堂項(xiàng)目[7]。
MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)共包含4個(gè)數(shù)據(jù)文件(壓縮包,需解壓使用),每一個(gè)文件的名稱及文件包含內(nèi)容如表1所示。
表1中的樣本數(shù)據(jù)是指手寫數(shù)字圖片,在數(shù)據(jù)庫(kù)文件中依次保存了每一張圖片的像素,標(biāo)簽數(shù)據(jù)是指和樣本數(shù)據(jù)一一對(duì)應(yīng)的每一張圖片的實(shí)際數(shù)字。MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)的訓(xùn)練樣本數(shù)據(jù)文件和測(cè)試樣本數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu)完全相同,訓(xùn)練樣本標(biāo)簽數(shù)據(jù)文件和測(cè)試樣本標(biāo)簽數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu)完全相同,以下代碼用于讀取訓(xùn)練樣本數(shù)據(jù),讀取測(cè)試樣本數(shù)據(jù)只需在以下代碼上稍做修改即可使用。
⑴ f_train_img=fopen('database\train-images.idx3-ubyte','r','b');
%打開(kāi)訓(xùn)練樣本數(shù)據(jù)文件
⑵ 讀取圖片數(shù)量(train_img_num)等數(shù)據(jù),初始化訓(xùn)練樣本
矩陣train_img
⑶ for i=1: train_img_num %循環(huán)讀取訓(xùn)練樣本數(shù)據(jù)文件
中手寫數(shù)字圖片數(shù)據(jù)
⑷ train_img (:,i)=uint8(fread(f_train_img,784,'uchar'));
⑸ end
以下代碼用于讀取訓(xùn)練樣本標(biāo)簽值,讀取測(cè)試樣本數(shù)據(jù)只需在以下代碼上稍做修改即可使用。
⑴ f_train_index=fopen('database\train-labels.idx1-ubyte','r','b');
%打開(kāi)訓(xùn)練樣本標(biāo)簽數(shù)據(jù)文件
⑵ 讀取標(biāo)簽數(shù)量(train_index_num)等數(shù)據(jù),初始化訓(xùn)練樣本
標(biāo)簽矩陣train_index
⑶ for i=1: train_index_num %循環(huán)讀取訓(xùn)練樣本數(shù)據(jù)
對(duì)應(yīng)的真實(shí)數(shù)字值
⑷ train_index(1,i)=uint8(fread(f_train_index,1,'uchar'));
⑸ end
圖1是訓(xùn)練樣本數(shù)據(jù)中的部份手寫數(shù)字圖片。
3.2 實(shí)驗(yàn)思路
對(duì)MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)的訓(xùn)練樣本數(shù)據(jù)進(jìn)行PCA降維處理,將降維后的數(shù)據(jù)按類別進(jìn)行歸類,即把0至9的手寫數(shù)字圖片進(jìn)行歸類,分析每一類手寫數(shù)字圖片每一像素的數(shù)據(jù)分布情況,如果數(shù)據(jù)呈現(xiàn)出正態(tài)分布,則可用多元正態(tài)分布的邊界判別法對(duì)手寫數(shù)字進(jìn)行分類(識(shí)別)。
3.3 MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)數(shù)據(jù)分布
圖2是對(duì)MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)訓(xùn)練樣本數(shù)據(jù)進(jìn)行PCA降維處理后,選擇PCA累積貢獻(xiàn)率為0.82所得到的所有數(shù)字1各像素值域的統(tǒng)計(jì)圖(降維后數(shù)據(jù)維度由784下降到49)。
分析圖2可得:經(jīng)過(guò)PCA降維后的手寫數(shù)字1的每一像素的數(shù)據(jù)統(tǒng)計(jì)呈現(xiàn)正態(tài)分布;本實(shí)驗(yàn)對(duì)經(jīng)過(guò)PCA降維后的所有手寫數(shù)字都進(jìn)行了統(tǒng)計(jì)分析,發(fā)現(xiàn)各類數(shù)字的每一像素都呈現(xiàn)出正態(tài)分布的特性,因此,可嘗試使用多元正態(tài)分布的邊界判別公式對(duì)手寫數(shù)字進(jìn)行分類(識(shí)別)。
3.4 程序設(shè)計(jì)
本實(shí)驗(yàn)程序設(shè)計(jì)步驟描述如下:
⑴ 打開(kāi)訓(xùn)練樣本數(shù)據(jù)文件,讀取訓(xùn)練樣本矩陣train_img;
⑵ [pc,score,latent,tsquare]=pca(train_img); %獲取PCA降維數(shù)據(jù);
⑶ 根據(jù)pca函數(shù)運(yùn)行結(jié)果,計(jì)算累計(jì)貢獻(xiàn)率,分別選擇累積貢獻(xiàn)率大于等于0.51到0.99的特征值對(duì)應(yīng)的特征向量,生成降維矩陣pca_matrix;
⑷ 用降維矩陣pca_matrix為訓(xùn)練樣本數(shù)據(jù)進(jìn)行降維處理,得到訓(xùn)練樣本數(shù)據(jù)的降維結(jié)果矩陣after_pca_train;
⑸ 打開(kāi)訓(xùn)練樣本數(shù)據(jù)文件,讀取訓(xùn)練樣本標(biāo)簽值train_index;
⑹ 打開(kāi)測(cè)試樣本數(shù)據(jù)文件,讀取測(cè)試樣本矩陣test_img;
⑺ 用降維矩陣pca_matrix為測(cè)試樣本數(shù)據(jù)進(jìn)行降維處理,得到測(cè)試樣本數(shù)據(jù)的降維結(jié)果矩陣after_pca_test;
⑻ 打開(kāi)測(cè)試樣本數(shù)據(jù)文件,讀取測(cè)試樣本標(biāo)簽值test_index;
⑼ 定義胞元數(shù)組Num_data_gather=cell(1,10),將降維后的訓(xùn)練樣本數(shù)據(jù)after_pca_train按數(shù)字類別存儲(chǔ)到Num_data_gather中;
⑽ 將各類數(shù)字矩陣代入公式⑵、公式⑶、公式⑷分別計(jì)算每一類數(shù)字的Wi、wi、wi0;
⑾ 將降維后的測(cè)試數(shù)據(jù)矩陣after_pca_test按公式⑴計(jì)算出gi(x)(即代入每一類數(shù)字的Wi、wi、wi0),最后根據(jù)公式⑸可得到測(cè)試樣本數(shù)據(jù)的識(shí)別結(jié)果;
⑿ 計(jì)算測(cè)試樣本數(shù)據(jù)識(shí)別正確率。
3.5 實(shí)驗(yàn)結(jié)果及分析
圖3是選擇PCA降維累積貢獻(xiàn)率從0.51到0.99,測(cè)試樣本數(shù)據(jù)識(shí)別結(jié)果正確率的統(tǒng)計(jì)圖。
圖4是選擇PCA降維累積貢獻(xiàn)率從0.51到0.99,完成訓(xùn)練樣本數(shù)據(jù)的計(jì)算和對(duì)測(cè)試樣本數(shù)據(jù)進(jìn)行識(shí)別所需時(shí)間的統(tǒng)計(jì)圖。
分析以上實(shí)驗(yàn)結(jié)果,可得出以下結(jié)論。
⑴ 隨著PCA降維累積貢獻(xiàn)率的不斷提高,對(duì)測(cè)試樣本數(shù)據(jù)的識(shí)別率也在不斷提高,識(shí)別率最高可達(dá)到0.9635(此時(shí)所選擇的累積貢獻(xiàn)率是0.75)。
⑵ PCA降維累積貢獻(xiàn)率在0.51到0.87區(qū)間時(shí),識(shí)別率都在90%以上,但當(dāng)累積貢獻(xiàn)率超過(guò)0.87后,識(shí)別率出現(xiàn)了快速下降,說(shuō)明在使用多元正態(tài)邊界判別法對(duì)手寫數(shù)字識(shí)別時(shí),PCA降維的累積貢獻(xiàn)率不能取得太大,建議在0.7到0.8之間進(jìn)行選擇。
⑶ PCA降維累積貢獻(xiàn)率越大,對(duì)訓(xùn)練樣本數(shù)據(jù)的計(jì)算、測(cè)試樣本數(shù)據(jù)的識(shí)別所需要的總時(shí)間也在不斷增加,PCA降維累積貢獻(xiàn)率在0.51到0.88之間的任何一個(gè)貢獻(xiàn)率,其計(jì)算時(shí)間都在100秒之內(nèi),而神經(jīng)網(wǎng)絡(luò)對(duì)MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)的訓(xùn)練往往需要十多個(gè)小時(shí),因此,與神經(jīng)網(wǎng)絡(luò)方法相比,多元正態(tài)邊界判別方法的執(zhí)行速度是非常快的。
4 結(jié)束語(yǔ)
手寫數(shù)字識(shí)別是模式識(shí)別重點(diǎn)研究領(lǐng)域之一,目前大多數(shù)手寫數(shù)字識(shí)別方法主要采用神經(jīng)網(wǎng)絡(luò),本文選用MNIST手寫數(shù)字?jǐn)?shù)據(jù)庫(kù),在對(duì)手寫數(shù)字?jǐn)?shù)據(jù)進(jìn)行PCA降維的基礎(chǔ)上,提出了運(yùn)用多元正態(tài)邊界判別法對(duì)手寫數(shù)字進(jìn)行識(shí)別的方法,與傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)方法相比,該方法識(shí)別率高,運(yùn)算速度遠(yuǎn)遠(yuǎn)超過(guò)神經(jīng)網(wǎng)絡(luò),實(shí)驗(yàn)結(jié)果對(duì)手寫數(shù)字識(shí)別方面的研究有一定的參考價(jià)值。
參考文獻(xiàn)(References):
[1] Sergios Theodoridis, Konstantinos Koutroumbas.Pattern Recognition, Fourth Edition[M]. Academic Press; 4 edition (November 3,2008):1,7-9,14
[2] 田紹興,陳勁杰.基于KNN的手寫數(shù)字的識(shí)別[J].農(nóng)業(yè)裝備與車輛工程,2017.55(10).
[3] 任丹,陳學(xué)峰.手寫數(shù)字識(shí)別的原理及應(yīng)用[J].計(jì)算機(jī)時(shí)代,2007.3.
[4] Richard O.Duda, Peter E.Hart, David G.Stork.Pattern Classification (2nd Edition) [M].Wiley-Interscience; 2 edition (October 2000):Chapter 2:3,25.
[5] 吳曉婷,閆德勤.數(shù)據(jù)降維方法分析與研究[J].計(jì)算機(jī)應(yīng)用研究,2009.26(8).
[6] 吳敬華.主成分分析與二維主成分分析之比較研究[D].云南財(cái)經(jīng)大學(xué),2014.
[7] Yann LeCun, Corinna Cortes, Christopher J.C.Burges.THEMNIST DATABASE of handwritten digits[EB/OL].[2018-4-24].http://yann.lecun.com/exdb/mnist/.