当前位置:文档之家› 手写数字识别的实现

手写数字识别的实现

手写数字识别的实现摘要:手写数字识别是模式识别的应用之一。

文中介绍了手写数字的一些主要特征,具体识别方法是通过主成分分析(PCA)和最近邻方法应用matlab等计算机软件来实现。

关键词:手写数字、主成分分析(PCA)、最近邻方法1. 手写数字的特征分析数字类别不但少,而且笔划简单,尤其是手写数字个个差异大。

数字识别的关键在于能否找到有效的特征,[2] 就给出了数字的多个特征,选取的特征应具有可分辨能力并尽可能的少,分辨能力在应用中而言就是特征能够使得不同类别的个体在特征值上相差大,同类别特征值相差小。

特征值小一方面是为了减少计算量,另一方面也减少了信息冗余。

目前研究的手写数字特征主要有笔画密度特征、粗网格特征、重心以及重心距特征、首个黑点位置特征、投影特征以及空间域变换特征等,除了以上特征,也不断的有新的特征[1]被提出。

1.1 数字的特征1.1.1 单个数字的特征单个数字特征是指特定数字普遍具有的特征。

例如如果数字竖直长度比上横向宽度大于某个值比如 4 ,那么很有可能是数字 1 ,如果数字内有两个封闭的区域则很可能是字8 ,如果只有一个封闭的区域,且封闭区域的重心偏上则很可能是数字9 (同理可判断数字 6 ),以上都是这些数字普遍具有的特征,但因为数字手写的原因,也包含了大量不规则的例子,如图 1 ,则需要进一步借助其他特征进行识别。

单个数字特征可以辨别出那些具有典型数字特征的手写数字,但计算复杂并且在手写数字识别中误差大,但是作为正式识别过程前的预识别可减少运算量和时间。

1.1.2 笔画密度特征笔画密度特征是指不同数字在水平方向、竖直方向以及其他角度方向上笔画密度特征。

如图 2 数字 1 在竖直方向上笔画密度大,而在水平方向上笔画密度小,而数字8 在倾斜方向上笔画密度大。

找到这样的特征我们可以间隔一定行数对样本进行横向和纵向进行扫描,记录下单行黑色像素点个数为特征值,笔画密度特征对数字畸变和抗噪声能力一般。

1.2 手写数据集介绍手写数字数据库THE MNIST DATABASE ,有60000个训练样本数据集和10000个测试用例。

它是NIST 数据库的一个子集。

这些数字图像已经被规范化,将数字置于图像中心,并使图像大小一致。

这对于要尝试自己的学习技术和模式识别方法在真实世界中的效果的人来说,是一个好的数据库,它节省了大量处理和格式化的时间。

2. 数据预处理(PCA )2.1 主成分分析法的基本思想主成分分析(Principal Component Analysis )是利用降维的思想,将多个变量转化为少数几个综合变量(即主成分),其中每个主成分都是原始变量的线性组合,各主成分之间互不相关,从而这些主成分能够反映始变量的绝大部分信息,且所含的信息互不重叠。

[2]采用这种方法可以克服单一的财务指标不能真实反映公司的财务情况的缺点,引进多方面的财务指标,但又将复杂因素归结为几个主成分,使得复杂问题得以简化,同时得到更为科学、准确的财务信息。

2.2 主成分分析法代数模型假设用p 个变量来描述研究对象,分别用p X X X ,,,21 来表示,这p 个变量构成的p 维随机向量为()Tp X X X X ,,,21 =。

设随机向量X 的均值为μ,协方差矩阵为Σ。

对X 进行线性变化,考虑原始变量的线性组合:⎪⎪⎩⎪⎪⎨⎧++=⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯++=++=ppp p p p p p p p X X X Z X X X Z X X X Z μμμμμμμμμ 22112222121212121111 主成分是不相关的线性组合p Z Z Z , ,,21,并且1Z 是p X X X ,,,21 的线性组合中方差最大者,2Z 是与1Z 不相关的线性组合中方差最大者,……,p Z 是与1-21,,p Z Z Z , 都不相关的线性组合中方差最大者。

2.3 主成分分析法基本步骤第一步:设估计样本数为n ,选取的财务指标数为p ,则由估计样本的原始数据可得矩阵()p m ij x X ⨯=,其中ij x 表示第i 家上市公司的第j 项财务指标数据。

第二步:为了消除各项财务指标之间在量纲化和数量级上的差别,对指标数据进行标准化,得到标准化矩阵(系统自动生成)。

第三步:根据标准化数据矩阵建立协方差矩阵R ,是反映标准化后的数据之间相关关系密切程度的统计指标,值越大,说明有必要对数据进行主成分分析。

其中,()p j i R ij ,,2,1, =为原始变量i X 与j X 的相关系数。

R 为实对称矩阵(即ji ij R R =),只需计算其上三角元素或下三角元素即可,其计算公式为: 2211)()()()(j kj nk i kjj kj n k i kj ij X X X X X X X X R -=--=-=∑∑ 第四步:根据协方差矩阵R 求出特征值、主成分贡献率和累计方差贡献率,确定主成分个数。

解特征方程0=-R E λ,求出特征值()p i i ,,2,1 =λ。

因为R 是正定矩阵,所以其特征值i λ都为正数,将其按大小顺序排列,即021≥≥≥≥i λλλ 。

特征值是各主成分的方差,它的大小反映了各个主成分的影响力。

主成分i Z 的贡献率∑==p j j j i W 1λλ,累计贡献率为∑∑==p j j m j j 11λλ。

根据选取主成分个数的原则,特征值要求大于1且累计贡献率达80%-95%的特征值m λλλ,,,21 所对应的1,2,…,m (p m ≤),其中整数m 即为主成分的个数。

第五步:建立初始因子载荷矩阵,解释主成分。

因子载荷量是主成分1Z 与原始指标1X 的相关系数()11,X Z R ,揭示了主成分与各财务比率之间的相关程度,利用它可较好地解释主成分的经济意义。

第六步:计算企业财务综合评分函数m F ,计算出上市公司的综合值,并进行降序排列:i i m Z W Z W Z W F ++=22113. 交叉验证3.1 概念交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。

在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。

这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。

把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。

3.2 目的用交叉验证的目的是为了得到可靠稳定的模型。

在建立PCR 或PLS 模型时,一个很重要的因素是取多少个主成分的问题。

用cross validation 校验每个主成分下的PRESS 值,选择PRESS 值小的主成分数。

或PRESS 值不再变小时的主成分数。

常用的精度测试方法主要是交叉验证,例如10折交叉验证(10-fold cross validation),将分成十份,轮流将其中9份做训练1份做测试,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10折交叉验证求均值,例如:10次10折交叉验证,以求更精确一点。

交叉验证有时也称为交叉比对,如:10折交叉比对3.3常见的交叉验证形式Holdout 验证常识来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。

随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。

一般来说,少于原本样本三分之一的数据被选做验证数据。

K-fold cross-validationK 折交叉验证,初始采样分割成K 个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。

交叉验证重复K 次,每个子样本验证一次,平均K 次的结果或者使用其它结合方式,最终得到一个单一估测。

这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的。

留一验证正如名称所建议, 留一验证(LOOCV )意指只使用原本样本中的一项来当做验证资料,而剩余的则留下来当做训练资料。

这个步骤一直持续到每个样本都被当做一次验证资料。

事实上,这等同于 K-fold 交叉验证是一样的,其中K 为原本样本个数。

在某些情况下是存在有效率的演算法,如使用kernel regression 和Tikhonov regularization。

4. 最近邻分类器4.1分类策略最近邻分类器在eCognition中指需要用户指定训练样本的分类法,与成员函数分类器相区别。

eCognition用“Click and Classify”来形容其操作简便。

用户手册中推荐的针对这种指定训练样本的分类方法的分类策略是:1、先选定少量图斑(对象)作为样本,一开始选定的每一类的样本数为1-3个,选完少量样本后就可以进行第一次分类;2、然后不断重复以下步骤,直到得出满意结果:①、纠正那些被错分的或未被分类的(unclassified)图斑,指定正确类别后,作为样本对象添加到训练样本集中(要小心操作,确保无误);②进行分类。

【注意】:1、有些时候,新的样本对象的加入会显著影响到分类结果,有可能原来正确的分类结果,在调整、纠正加入新的样本对象后,许多图斑反而从正确的分类划归为错误的类别了,这时候也不要担心,还是继续重复上面的步骤,重复操作……这样进行下去以后,就能逐步在特征空间中建立起区分各类别的边界,即使这些类别在特征空间中的分布是不规则的且不连续的(离散的),最近邻函数也能对付。

2、利用Click and Classify的方法,用户可能很快就得到了满意的分类结果,也有可能你达到了所选择的特征空间(注意:特征空间也是用户自己可以定义的)所能区分的极限,再添加新的训练样本也无济于事了,分类结果也不会有显著改善了,这也没有关系,咱们可以利用这个得到的分类结果作为下一步“基于上下文信息的分类”的基础数据,在类别层次结构(Class Hierarchy)里面添加子类,以作进一步的细分。

4.2 关于最近邻函数标准最近邻(SNN)与普通最近邻(NN)的差别:两者的区别在于它们的作用域不同。

Nearest Neighbor的特征空间可以为每个类别单独定义,即“class-specific”,而Standard Nearest Neighbor则不然,整个Project,SNN的特征空间的定义是唯一的,所有用到SNN的类别,它们的SNN的特征空间全是一样的,而且对每一个类别不可能定义一个以上的标准最邻近函数。

SNN和NN的特征空间中一般都不涉及“Class-related features”,因为它们需要的是一个绝对的参考系,而不是相对的,避免“循环依赖”现象的出现。

相关主题