葉曉波 秦海菲 呂永林

摘 要: 介紹了多元正態分布及邊界判別方法,詳細闡述了數據降維方法中的主成分分析(PCA降維),分析了MNIST手寫數字數據庫的數據結構和數據讀取方法,論述了基于多元正態分布的手寫數字識別方法的整個實驗過程。實驗結果顯示,經PCA降維后的手寫數字呈現多元正態分布的特征,使用正態分布的邊界判別方法對手寫數字進行識別運行效率高。
關鍵詞: 手寫數字識別; 主成分分析(PCA); MNIST; 多元正態分布
中圖分類號:TP391.43 文獻標志碼:A 文章編號: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 引言
模式識別是一門以應用為基礎的學科,目的是將對象進行分類[1]。手寫數字識別是研究如何利用計算機自動識別人手寫在紙張上的阿拉伯數字[2],從模式識別角度來看,是將手寫數字進行分類。雖然阿拉伯數字只有10個,但同一個數字的寫法變化多樣[3]。要準確識別手寫數字還是有一定的難度。
目前,對于手寫數字的識別主要采用神經網絡,常用卷積神經網絡、BP神經網絡等。筆者在對手寫數字識別的研究過程中發現,雖然手寫數字的寫法變化多樣,但同一數字的不同寫法在數據分布上應該符合正態分布,即所有手寫的同一數字都具有一定的相似性,如果同一手寫數字在數據分布上符合正態分布,就可以使用正態分布邊界判別法對手寫數字進行識別;基于這一想法,筆者進行了相應的實驗研究,并提出基于多元正態分布的手寫數字識別方法。
1 多元正態分布及邊界判別
在一般的多元正態分布的情況下,待分類樣本的協方差是不同的,設x是一個n維列向量,μ是n維均值向量,∑是n×n的協方差矩陣,|∑|和∑-1分別是其行列式的值和逆,多元正態分布邊界判別函數如下[4]:
假設待分類樣本共有m類,根據公式⑴計算可得m個判別函數結果,待分類樣本xi的分類結果就是:
2 PCA降維
PCA降維是一種數據降維算法,數據降維是指通過線性或非線性映射將樣本從高維空間映射到低維空間,從而獲得高維數據的一個有意義的低維表示的過程[5]。數據降維可解決“維數災難”,即指在涉及到向量的計算的問題中,隨著維數的增加,計算量呈指數倍增長的一種現象[6]。經過降維后的數據相比原始數據更容易處理和使用,還可去除原始數據的噪聲和冗余,降低算法開銷。常見的降維算法有主成分分析(也稱PCA降維)、因子分析和獨立成分分析。
PCA降維是通過對原始變量的相關矩陣或協方差矩陣內部結構的研究,將多個變量轉換為少數幾個綜合變量(即主成分),從而達到降維目的的一種線性降維方法[5]。這些主成分能夠反映原始變量的絕大部分信息,它們通常表示為原始變量的線性組合,通過PCA降維,可實現用較少的數據維度代替較多的原數據點。
本文所論述的實驗使用了目前最流行的MNIST手寫數字數據庫,MNIST手寫數字數據庫共包含60000個訓練樣本數據,10000個測試樣本數據,每一個樣本數據(圖片)大小都是784像素,也就是說:訓練樣本數據(矩陣)的大小是60000*784,測試樣本數據(矩陣)的大小是10000*784,這樣大小的數據在識別計算過程中算法開銷大,因此,在對手寫數字識別之前應該對數據進行降維。
本文所論述的實驗使用Matlab提供的pca函數對訓練樣本數據進行PCA降維,通過pca函數可得到訓練樣本的降維矩陣,使用降維矩陣對訓練樣本和測試樣本數據進行降維處理;用pca函數生成降維矩陣時,根據特征值的累積貢獻率不同可生成不同還原度的降維矩陣,累積貢獻率是指降維后能保持原始數據的真實率,也就是說累積貢獻率越大(值越接近1),則降維后的矩陣數據能更真實的反映原始數據,但貢獻率越大,則數據維度減少的就越少,從而帶來降維效果不明顯的問題;累積貢獻率越小(值越接近0),則矩陣數據維度減少的就越多,但降維后的數據與原始數據偏離會明顯加大。
3 實驗思路及結論
實驗軟件環境為Windows 7(64位)、Matlab 2016b,硬件環境為Intel I5-3570K、8G內存。實驗程序設計均在Matlab 2016b下完成,以下是整個實驗的思路、過程和結論。
3.1 實驗數據詳情
本實驗采用目前手寫數字識別最流行的MNIST手寫數字數據庫(http://yann.lecun.com/exdb/mnist/)。MNIST手寫數字數據庫共包含60000個訓練樣本數據,10000個測試樣本數據,每一個樣本數據(圖片)都是標準化的,即每一張手寫數字圖片大小相同(28*28像素),圖片上的手寫數字都已做了居中處理,MNIST手寫數字數據庫被研究者廣泛用作測試模式識別方法的基準,也被學生用于模式識別、機器學習和統計方面的課堂項目[7]。
MNIST手寫數字數據庫共包含4個數據文件(壓縮包,需解壓使用),每一個文件的名稱及文件包含內容如表1所示。
表1中的樣本數據是指手寫數字圖片,在數據庫文件中依次保存了每一張圖片的像素,標簽數據是指和樣本數據一一對應的每一張圖片的實際數字。MNIST手寫數字數據庫的訓練樣本數據文件和測試樣本數據文件的數據結構完全相同,訓練樣本標簽數據文件和測試樣本標簽數據文件的數據結構完全相同,以下代碼用于讀取訓練樣本數據,讀取測試樣本數據只需在以下代碼上稍做修改即可使用。
⑴ f_train_img=fopen('database\train-images.idx3-ubyte','r','b');
%打開訓練樣本數據文件
⑵ 讀取圖片數量(train_img_num)等數據,初始化訓練樣本
矩陣train_img
⑶ for i=1: train_img_num %循環讀取訓練樣本數據文件
中手寫數字圖片數據
⑷ train_img (:,i)=uint8(fread(f_train_img,784,'uchar'));
⑸ end
以下代碼用于讀取訓練樣本標簽值,讀取測試樣本數據只需在以下代碼上稍做修改即可使用。
⑴ f_train_index=fopen('database\train-labels.idx1-ubyte','r','b');
%打開訓練樣本標簽數據文件
⑵ 讀取標簽數量(train_index_num)等數據,初始化訓練樣本
標簽矩陣train_index
⑶ for i=1: train_index_num %循環讀取訓練樣本數據
對應的真實數字值
⑷ train_index(1,i)=uint8(fread(f_train_index,1,'uchar'));
⑸ end
圖1是訓練樣本數據中的部份手寫數字圖片。
3.2 實驗思路
對MNIST手寫數字數據庫的訓練樣本數據進行PCA降維處理,將降維后的數據按類別進行歸類,即把0至9的手寫數字圖片進行歸類,分析每一類手寫數字圖片每一像素的數據分布情況,如果數據呈現出正態分布,則可用多元正態分布的邊界判別法對手寫數字進行分類(識別)。
3.3 MNIST手寫數字數據庫數據分布
圖2是對MNIST手寫數字數據庫訓練樣本數據進行PCA降維處理后,選擇PCA累積貢獻率為0.82所得到的所有數字1各像素值域的統計圖(降維后數據維度由784下降到49)。
分析圖2可得:經過PCA降維后的手寫數字1的每一像素的數據統計呈現正態分布;本實驗對經過PCA降維后的所有手寫數字都進行了統計分析,發現各類數字的每一像素都呈現出正態分布的特性,因此,可嘗試使用多元正態分布的邊界判別公式對手寫數字進行分類(識別)。
3.4 程序設計
本實驗程序設計步驟描述如下:
⑴ 打開訓練樣本數據文件,讀取訓練樣本矩陣train_img;
⑵ [pc,score,latent,tsquare]=pca(train_img); %獲取PCA降維數據;
⑶ 根據pca函數運行結果,計算累計貢獻率,分別選擇累積貢獻率大于等于0.51到0.99的特征值對應的特征向量,生成降維矩陣pca_matrix;
⑷ 用降維矩陣pca_matrix為訓練樣本數據進行降維處理,得到訓練樣本數據的降維結果矩陣after_pca_train;
⑸ 打開訓練樣本數據文件,讀取訓練樣本標簽值train_index;
⑹ 打開測試樣本數據文件,讀取測試樣本矩陣test_img;
⑺ 用降維矩陣pca_matrix為測試樣本數據進行降維處理,得到測試樣本數據的降維結果矩陣after_pca_test;
⑻ 打開測試樣本數據文件,讀取測試樣本標簽值test_index;
⑼ 定義胞元數組Num_data_gather=cell(1,10),將降維后的訓練樣本數據after_pca_train按數字類別存儲到Num_data_gather中;
⑽ 將各類數字矩陣代入公式⑵、公式⑶、公式⑷分別計算每一類數字的Wi、wi、wi0;
⑾ 將降維后的測試數據矩陣after_pca_test按公式⑴計算出gi(x)(即代入每一類數字的Wi、wi、wi0),最后根據公式⑸可得到測試樣本數據的識別結果;
⑿ 計算測試樣本數據識別正確率。
3.5 實驗結果及分析
圖3是選擇PCA降維累積貢獻率從0.51到0.99,測試樣本數據識別結果正確率的統計圖。
圖4是選擇PCA降維累積貢獻率從0.51到0.99,完成訓練樣本數據的計算和對測試樣本數據進行識別所需時間的統計圖。
分析以上實驗結果,可得出以下結論。
⑴ 隨著PCA降維累積貢獻率的不斷提高,對測試樣本數據的識別率也在不斷提高,識別率最高可達到0.9635(此時所選擇的累積貢獻率是0.75)。
⑵ PCA降維累積貢獻率在0.51到0.87區間時,識別率都在90%以上,但當累積貢獻率超過0.87后,識別率出現了快速下降,說明在使用多元正態邊界判別法對手寫數字識別時,PCA降維的累積貢獻率不能取得太大,建議在0.7到0.8之間進行選擇。
⑶ PCA降維累積貢獻率越大,對訓練樣本數據的計算、測試樣本數據的識別所需要的總時間也在不斷增加,PCA降維累積貢獻率在0.51到0.88之間的任何一個貢獻率,其計算時間都在100秒之內,而神經網絡對MNIST手寫數字數據庫的訓練往往需要十多個小時,因此,與神經網絡方法相比,多元正態邊界判別方法的執行速度是非常快的。
4 結束語
手寫數字識別是模式識別重點研究領域之一,目前大多數手寫數字識別方法主要采用神經網絡,本文選用MNIST手寫數字數據庫,在對手寫數字數據進行PCA降維的基礎上,提出了運用多元正態邊界判別法對手寫數字進行識別的方法,與傳統的神經網絡方法相比,該方法識別率高,運算速度遠遠超過神經網絡,實驗結果對手寫數字識別方面的研究有一定的參考價值。
參考文獻(References):
[1] Sergios Theodoridis, Konstantinos Koutroumbas.Pattern Recognition, Fourth Edition[M]. Academic Press; 4 edition (November 3,2008):1,7-9,14
[2] 田紹興,陳勁杰.基于KNN的手寫數字的識別[J].農業裝備與車輛工程,2017.55(10).
[3] 任丹,陳學峰.手寫數字識別的原理及應用[J].計算機時代,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] 吳曉婷,閆德勤.數據降維方法分析與研究[J].計算機應用研究,2009.26(8).
[6] 吳敬華.主成分分析與二維主成分分析之比較研究[D].云南財經大學,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/.