基于MATLAB手写体数字识别程序设计

基于MATLAB手写体数字识别程序设计

手写体识别由于其实用性,一直处于研究进步的阶段,本文主要针对的是对0-9十个手写数字体脱机识别,在Matlab中对样本部分为进行16特征的提取,分别采用最小距离法,最近邻法,KNN法以及BP神经网络算法进行0-9十个数字进行识别,得到每类的分类结果以及各种方法的识别准确率,比较各种方法的优缺点,最后分析比较结果,得出分类结论。

一、课题介绍

本文先是以统计学的方法进行数字识别。识别的数字是从0到9并利用图象处理软件把这些数字处理成相同大小32*32的二值图。将图像转换为文本格式存储,文档中只包含0和1,共计1934个样本,每类样本数目大致200个,测试样本共计946个。读取txt文档后,从生成的矩阵中提取16个特征,然后先用统计学的理论,用最小距离法,最近邻法和KNN法,在Matlab中编写相关程序,得出相关的分类结果和错误率。然后再使用BP神经网络,确定输入,输出节点数和隐藏层节点数,对0-9的样本特征进行训练,得到训练后的网络进行样本测试。将基于BP神经网络的识别结果和错误率和基于统计学的方法的结果进行比较,最终得出分类的结论

参考源码:MATLAB手写数字识别GUI设计.zip-专业指导文档类资源-CSDN下载

二、算法流程

本文是对手写数字识别,即对0-9十个数字进行识别,我们将存储0-9十个数字的图片利用图像处理软件处理成大小相同的(32*32)的二值图,然后将图像转化成文本格式。总共有1934个训练样本,946个测试样本。对每个样本提取特征,这儿我们选用提取了16个特征,然后应用最小距离法,KNN在K=1,K=3,K=5时, 以及神经网络,在Matlab环境下,编程分别对训练样本进行训练, 测试样本进行测试识别,得到分类结果和错误率,然后对每种结果进行对比,分析错误率和分类结果,比较几种方法的优点和缺点, 最终得出结论。

2.1 字符特征选择与提取

特征提取是为了去除信息中对分类没有帮助的部分,将信息集中到有代表性的几个特征上来的过程。选择稳定的、有代表性的特征往往是一个识别系统成功的关键。按照统计的观点,好的特征提取方法必须满足三个条件:一是提取的特征组相互独立或者互不相关;二是特征具有较小的类内差异,而具有较大的类间差异;三是特征向量的维数尽量小。而在实际应用中,寻找满足这三点要求的特征提取方法是一项富有挑战性的工作。

本次手写数字识别中,样本为图片,因此我们可以先将图片二值化,此时图片中的每个点像素不是0和1,然后我

基于MATLAB手写体数字识别程序设计_第1张图片

们将图片n 等分,统计每份中1的个数,以每份中1的个数为特征,得到n个特征,组成n维的特征向量,这里我们选取n=16,然后用最小距离, 紧邻法等方法进行训练,计算识别准确率。

2.2 手写数字0-9识别

最小距离法,KNN近邻法以及神经网络的原理以及如何在Mat-lab下编写相应的算法实现对0-9十个数字的识别,统计相关方法的识别结果和错误率,得出相应的结论。

最小距离法

8d67dc0a1ea9ad9e6c1467b521f0c1e1.png

设总共有M个类别:

f075fd6e68da0b0771a156220cf5b799.png

。每类存在有

8639bb3b8be7015cf8c43972bcef91e3.png

个样本,例如wi类,可表示为

0bfbbfdd90b008fc50a5d53284f631fe.png

,对于任意待识别的样本

18a089aaa8873f69bea8705ce5a9a2f6.png

,计算距离

eacdb07543cd14ac29bed6d973a79673.png

,其中

c8ff03aa637c5f15a63d377e1a6ae8ba.png

为第i类的类中心,比较X的到各类的类中心的距离以及类中心点满足式:

753a6cbcf5b95cacc4472af2d017ba49.png

,则X∈wi。

本论文中使用的最小距离法也是这个原理,先将训练样本中0-9十个数字,进行特征提取,每个样本16个特征,找出每类每个特征的中心点找出来,这儿以每类的平均值代替该类特征值的类中心点,然后从测试样本中选取一个进行公示计算后比较测试样本与每一类的距离,与哪一类距离最小则进行标记,从而确定属于某一类,最后统计样本正确分类的数量,从而计算出错误率。

2.2.2 KNN最近邻法

KNN(K-Nearest-Neighbor)算法是最邻近规则算法,应用于对未知事物的判别,判断思想是基于欧几里得定理,判断未知事物的特征和哪一类已知的的事物特征最接近。该方法思路是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。下图为

KNN算法的一种实现,简单来说,KNN算法就是有那么一堆已知分类的数据,这里是训练数据,然后当一个新的数据(来自测试数据)进入的时候,与训练数据每个点求取欧氏距离,然后挑选出训练数据最近的K个点,每个距离为di,看看这几个点是属于哪一类的,然后依据少数服从多数原则进行判断新的样本属于哪一类。

本文中采用KNN法,分别取K为1,3,5。分别用训练数据和测试数据进行KNN算法校验,得到K=1,3,5时的分类结果和错误率。从结果可以看出,K=1时识别率为93.97%,K=3时识别率为93.87%,

K=5时识别率为93.97%,经过进一步计算,会发现一个错误率最小的K的值。K=5时错误率小。

基于MATLAB手写体数字识别程序设计_第2张图片

基于MATLAB手写体数字识别程序设计_第3张图片

2.2.3 神经网络

(1)bp神经网络

BP神经网络,又名反向传播网络,是一种具有三层或三层以上的多层神经网络,每一层有若跟个神经元组成,BP神经网络按有教师学习方式进行训练,当一对学习模式提供给网络后,其神经元的激活值从输入层经各隐含层向输出层传播,然后按减少希望输出与实际输出误差的原则,从输出层经各隐含层,最后回到输入层逐层修正各连接权。

基于MATLAB手写体数字识别程序设计_第4张图片

(2)BP神经网络分类器的设计

本文中设计一个的BP网络,包括一个输入层,一个隐藏层, 一个输出层,提取特征为16个,每个特征样本数为1934,输入为16*1934;隐藏层神经元个数太大,BP网络越精确,但会使收敛速度较慢,较少训练不够充分,导致训练结果与期望结果相差较远。本文中取输入节点和输出节点个数乘积开根号,即

36154311165f8f53a138bfa67d29eb22.png

,应取8个神经元,最后取10个神经元作为隐含层神经元个数,由于0-9总共为10类,采用8421码进行编码,输出层神经元个数为4。文中调用了matlab神经网络工具箱中“newff”函数,“train”函数, “sim”函数,进行不断的训练,测试。

基于MATLAB手写体数字识别程序设计_第5张图片

三、结论

在手写体数字识别中,提取了16个特征作为训练特征,分别采用了最小距离法,KNN法,BP神经网络算法,这些算法中,KNN 算法识别率最高,有93.97%,BP神经网络算法其次,有85.2%,最低的是最小距离法,为84.35%,总体来说,取16个特征还是比较少,当特征数量逐渐增加以后,识别率有所提高,但特征数量的选取也要适量,否则容易造成过拟合,导致训练已经很好,但加入测试数据反而错误率会相当高。三个算法中,KNN法随着K的取值不同识别率也不尽相同,存在一个K使得错误率最小;神经网络算法在特征前期处理,参数设置优化等方面做的不好,导致识别率较低,不能凸显其优势,其还有很大的优化空间,在后续工作中还将不断探索。随着国家信息化,科技化战略额不断实施,不仅仅手写数字识别,手写汉字识别,手写字母识别会有更加广阔的应用空间,对算法的要求也将进一步提高。因此我们在算法上要进一步优化,尽量减少算法运行时间,提高识别率,另一方面,我们要提高算法的兼容性,我们现在是纯软件编写算法,在硬件上实施效果尤未可知,因此,算法能够写入硬件实现其功能也是我们需要探索的一个问题。

表1 结果比对表

算法 最小距离 KNN_k=1
识别率 84.35% 93.97%
KNN_k=3 KNN_k=5 神经网络
93.87% 93.97% 85.20%

你可能感兴趣的:(算法,神经网络,python,机器学习,人工智能)