叶晓波 秦海菲 吕永林
摘 要: 介绍了多元正态分布及边界判别方法,详细阐述了数据降维方法中的主成分分析(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/.