基于MATLAB的手写体数字识别
一、课题介绍
手写数字识别是模式识别领域的一个重要分支,它研究的核心问题是:如何利用计算机自动识别人手写在纸张上的阿拉伯数字。手写体数字识别问题,简而言之就是识别出10个阿拉伯数字,由于数字的清晰程度或者是个人的写字习惯抑或是其他,往往手写体数字的性状、大小、深浅、位置会不大一样。手写体识别一般包括3个阶段:预处理、特征提取、分类识别。
手写数字识别前景广阔,广泛应用于表格中数字的识别、汽车牌照的数字自动识别和成绩单的识别等。实现数字的自动识别能够给人们的工作和生活带来很大的方便。对于该领域的研究具有重要的理论价值:
一方面,阿拉伯数字是唯一的被世界各国通用的符号,对手写数字识别的研究与文化背景无关,这样就为各国、各地区的研究工作者提供了一个自由平等的舞台,大家可以在这一领域施展才智,各抒己见。
另一方面,由于数字识别的类别数较少(只有0到9十个类别),有助于做深入分析及验证一些新的理论。这方面最明显的例子就是人工神经网络,相当一部分的人工神经网络模型都以手写数字识别作为具体的实验平台,验证理论的有效性,评价各种方法的优缺点。
数字识别的算法较多,当前运用较好的主流算法以统计、聚类和分类算法为主,如Bagging算法、支持向量机算法、神经网络等。手写数字识别难度在于:一、数字相似性大,但字形相差不大;二、数字虽然只有10种,但笔划简单,同一个数字写法差别大;三、手写数字存在断笔和毛刺,对识别造成影响。本文选择分类算法中的决策树算法、支持向量机算法、神经网络对MNIST数据集进行数字识别,并对分类效果进行比较分析。
分类算法
分类器识别是实现手写体数字识别的最终关键,基于距离的分类器和神经网络分类器这两大类是目前现有的最主要的分类器。分类是数据挖掘的重要分支,可用于提取、描述重要数据的模型或预测未来的数据趋势[1]。
决策树算法
决策树也称为判定树,是一种有监督的学习方法。决策树代表着决策树的树形结构,可以根据训练集数据构造出决策树。如果该树不能对所有对象给出正确的分类,就选择一些例外加入到训练集数据中。重复该过程,直到形成正确的决策集。决策树方法首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策树对新数据进行分析,本质上是通过一系列规则对数据进行分类的过程。决策树的典型算法有ID3,C4.5,等。根据训练集构建决策树,决策树中的结点逐层展开。每展开一层子结点,并将其设为叶结点,就得到一棵决策树,然后采用测试集对所得决策树的分类性能进行统计。重复上述过程,可以得到决策树在测试集上的学习曲线。根据学习曲线,选择在测试集上性能最佳的决策树为最终的决策树。
2.1.1 ID3算法
J.Ross Quinlan在1986年将信息论引入到决策树算法中,提出了ID3[2]算法,算法思想如下:
设样本集E共有C类训练集,每类样本数为pi,且i=1,2,3,…,C。如果以属性A作为测试属性,属性A的v个不同的值为{v1,v2,…,vv},可以用属性A将E划分成v个子集{E1,E2,…,Ev},假定Ei中含有第j类样本的个数为pij,j=1,2,3,…,C,那么子集Ei的熵为:
![v2-451ee0cc625766dc3d586dcc7ca9193e_b.jpg](https://ss.csdn.net/p?https://pic3.zhimg.com/v2-451ee0cc625766dc3d586dcc7ca9193e_b.jpg)
(1)
属性A的信息熵为:
![v2-514455791fc7bc3fbcb9b38838168a75_b.jpg](https://ss.csdn.net/p?https://pic2.zhimg.com/v2-514455791fc7bc3fbcb9b38838168a75_b.jpg)
(2)
将代入公式(2)后可得:
![v2-8a4c784e582521f770721535b9bb120d_b.jpg](https://ss.csdn.net/p?https://pic2.zhimg.com/v2-8a4c784e582521f770721535b9bb120d_b.jpg)
(3)
一棵决策树对一实例做出正确类别判断所需的信息为:
![v2-41107d613582971dee875af373327f31_b.jpg](https://ss.csdn.net/p?https://pic2.zhimg.com/v2-41107d613582971dee875af373327f31_b.jpg)
(4)
信息增益:
ID3算法存在着属性偏向,对噪声敏感等问题。
2.1.2 C4.5算法
在ID3算法的基础上,Quinlan在1993年提出了一种改进的算法,即C4.5算法[3],信息增益率计算如下:
![v2-d3d04f835b11d109d522b9d9a9637f4d_b.jpg](https://ss.csdn.net/p?https://pic2.zhimg.com/v2-d3d04f835b11d109d522b9d9a9637f4d_b.jpg)
(5)
![v2-4529be99799dc15fbc48e6da1a7844c3_b.jpg](https://ss.csdn.net/p?https://pic4.zhimg.com/v2-4529be99799dc15fbc48e6da1a7844c3_b.jpg)
(6)
C4.5算法克服了ID3算属性偏向的问题,增加了对连续属性的处理,通过剪枝,在一定程度上避免了“过度拟合”的现象。但是该算法将连续属性离散化,需要遍历该属性的所有值,降低了效率;要求训练样本驻留在内存,不适合处理大规模数据集。
2.1.3 CART算法
CART算法可以处理无序的数据,采用基尼系数作为测试属性的选择标准,基尼系数的计算如下:
![v2-c7d6d24013f5e4177fcdb103454c6c17_b.jpg](https://ss.csdn.net/p?https://pic4.zhimg.com/v2-c7d6d24013f5e4177fcdb103454c6c17_b.jpg)
(7)
其中,
![v2-fecdc8b26e640ac766e807ce70455c16_b.jpg](https://ss.csdn.net/p?https://pic3.zhimg.com/v2-fecdc8b26e640ac766e807ce70455c16_b.jpg)
,pi是类别j在T中出现的概率。
CART算法生成的决策树精度较高,但是当其生成的决策树复杂度超过一定程度后,随着复杂度的提高,分类精确度会降低。因此,用该算法建立的决策树不宜太复杂[4]。
2.1.4 SLIQ算法
决策树分类算法研究一直朝着处理大数据集的方向进行,但大部分方法在减少了运算时间的同时也降低了算法的精度。SLIQ的分类精度与其他决策树算法不相上下,但其执行的速度比其他决策树算法快。SLIQ算法对训练样本集的样本数量以及属性的数量没有限制。
SLIQ算法能够处理大规模的训练样本集,具有较好的伸缩性;执行速度快而且能够生成较小的二叉决策树;SLIQ算法允许多个处理器同时处理属性表,从而实现并行性。但是SLIQ算法不能摆脱主存容量的限制。
2.1.5 SPRINT算法
SLIQ算法要求类表驻留内存,当训练集大到类表放不进内存时,SLIQ算法就无法执行。为此,IBM的研究人员提出SPRINT算法,它处理速度快,不受内存的限制。
SPRINT算法可以处理超大规模训练样本集,数据样本集数量越大,SPRINT的执行效率越高,并且可伸缩性更好。但是,SPRINT算法存在着一些缺陷,在SLIQ的类表可以存进内存时,SPRINT算法的执行速度比SLIQ算法慢。
2.1.6 经典决策树算法的比较
基于决策树的分类算法已经有几十种,各种算法在执行速度、可扩展性、输出结果的可理解性、分类预测的准确性方面各有所长。下面就对几种典型的决策树算法进行比较,结果如表2-1所示:
表2-1 典型决策树算法的比较
算法 | 测试属性选择指标 | 连续属性的处理 | 是否需要独立测试样本集 | 运行剪枝时间 | 可伸缩性 | 并行性 | 决策树的结构 |
ID3 | 信息增益 | 离散化 | 是 | 后剪枝 | 差 | 差 | 多叉树 |
C4.5 | 信息增益率 | 预排序 | 否 | 后剪枝 | 差 | 差 | 多叉树 |
CART | GINI系数 | 预排序 | 否 | 后剪枝 | 差 | 差 | 二叉树 |
SLIQ | GINI系数 | 预排序 | 否 | 后剪枝 | 良好 | 良好 | 二叉树 |
SPRINT | GINI系数 | 预排序 | 否 | 后剪枝 | 好 | 好 | 二叉树 |
支持向量机
支持向量机(SVM)方法是通过一个非线性p,把到一个乃至无穷维的特征空间中(Hilbert空间),使得在原来的中非线性可分的问题转化为在特征空间中的线性可分的问题.简单地说,就是升维和线性化。升维,就是把样本向高维空间做映射,一般情况下这会增加计算的复杂性,甚至会引起"",因而人们很少问津.但是作为分类、回归等问题来说,很可能在低维样本空间无法线性处理的样本集,在高维特征空间中却可以通过一个线性超平面实现线性划分(或回归).一般的升维都会带来计算的复杂化,SVM方法巧妙地解决了这个难题:应用的展开定理,就不需要知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,所以与相比,不但几乎不增加计算的复杂性,而且在某种程度上避免了"维数