机器人与人工智能爱好者论坛

 找回密码
 立即注册
查看: 17505|回复: 4
打印 上一主题 下一主题

手写数字识别的实现-MNIST精彩好文

[复制链接]

285

主题

451

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
13714
跳转到指定楼层
楼主
发表于 2015-12-5 21:50:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 morinson 于 2015-12-5 22:22 编辑

手写数字识别的实现-MNIST精彩好文


摘要:
     手写数字识别是模式识别的应用之一。文中介绍了手写数字的一些主要特征,具体识别方法是通过主成分分析(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个变量构成的p维随机向量为 。设随机向量X的均值为μ,协方差矩阵为Σ。对X进行线性变化,考虑原始变量的线性组合:

主成分是不相关的线性组合 ,并且 的线性组合中方差最大者, 是与 不相关的线性组合中方差最大者,……, 是与 都不相关的线性组合中方差最大者。
2.3 主成分分析法基本步骤
第一步:设估计样本数为n,选取的财务指标数为p,则由估计样本的原始数据可得矩阵 ,其中 表示第 i 家上市公司的第 j 项财务指标数据。  
第二步:为了消除各项财务指标之间在量纲化和数量级上的差别,对指标数据进行标准化,得到标准化矩阵(系统自动生成)。
第三步:根据标准化数据矩阵建立协方差矩阵R,是反映标准化后的数据之间相关关系密切程度的统计指标,值越大,说明有必要对数据进行主成分分析。其中, 为原始变量 的相关系数。R为实对称矩阵(即 ),只需计算其上三角元素或下三角元素即可,其计算公式为:

第四步:根据协方差矩阵R求出特征值、主成分贡献率和累计方差贡献率,确定主成分个数。解特征方程 ,求出特征值 。因为R是正定矩阵,所以其特征值 都为正数,将其按大小顺序排列,即 。特征值是各主成分的方差,它的大小反映了各个主成分的影响力。主成分 的贡献率 ,累计贡献率为 。根据选取主成分个数的原则,特征值要求大于1且累计贡献率达80%-95%的特征值 所对应的1,2,…,m( ),其中整数即为主成分的个数。
第五步:建立初始因子载荷矩阵,解释主成分。因子载荷量是主成分与原始指标 的相关系数 ,揭示了主成分与各财务比率之间的相关程度,利用它可较好地解释主成分的经济意义。
第六步:计算企业财务综合评分函数 ,计算出上市公司的综合值,并进行降序排列:

3. 交叉验证
3.1 概念
交叉验证(CROSs-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。
3.2 目的
用交叉验证的目的是为了得到可靠稳定的模型。在建立PCR 或PLS 模型时,一个很重要的因素是取多少个主成分的问题。用cross validation 校验每个主成分下的PRESS值,选择PRESS值小的主成分数。或PRESS值不再变小时的主成分数。
常用的精度测试方法主要是交叉验证,例如10折交叉验证(10-foldcross validation),将分成十份,轮流将其中9份做训练1份做测试,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10折交叉验证求均值,例如:10次10折交叉验证,以求更精确一点。交叉验证有时也称为交叉比对,如:10折交叉比对

3.3常见的交叉验证形式
Holdout 验证
常识来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。 一般来说,少于原本样本三分之一的数据被选做验证数据。

K-fold cross-validation
K折交叉验证,初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的。

留一验证
正如名称所建议, 留一验证(LOOCV)意指只使用原本样本中的一项来当做验证资料,而剩余的则留下来当做训练资料。 这个步骤一直持续到每个样本都被当做一次验证资料。 事实上,这等同于 K-fold 交叉验证是一样的,其中K为原本样本个数。 在某些情况下是存在有效率的演算法,如使用kernelregression 和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-relatedfeatures”,因为它们需要的是一个绝对的参考系,而不是相对的,避免“循环依赖”现象的出现。即使用到类相关特征,也会受到如下限制:(东阳何生的学习笔记)
① 如果一个类别的定义中用到了最邻近函数,而这个最邻近函数的特征空间中利用了“Class-relatedfeatures”,那么这个类别不能用“Similarity of ”特征;
② 如果一个类别的定义中用到了最邻近函数,而这个最邻近函数的特征空间中利用了“Class-relatedfeatures”,那么这个类别不能有子类。即不能生育或是丁克一族,相当于二叉树中的“叶子节点”,所以这些类别也叫“叶子类别”;
③ 如果一个类别的定义中用到了最邻近函数,而这个最邻近函数的特征空间中利用了“Class-relatedfeatures”,那么“Class-related features”中所参考的类别不能是它自己或其父类。
2、如果在一个Class Hierarchy中用到了SNN或NN,那么,当保存 Class Hierarchy 文件的时候,它们所定义的特征空间也同时被保存在这个类层次结构文件中,但是,用户选择的训练样本并没有被保存,也就是说,如果调入一个dkb文件,以前选的训练样本是不包括在这个文件中的。
3、如果事先定义好了一个Class Hierarchy(父类子类统统定义完毕),然后去选择训练样本,那么,用户选择的子类的训练样本自动也算是其父类的训练样本,当然,用户也可以单独为父类指定其训练样本。
4、用户手册一再建议,分类时先为每一类仅仅选择少量的样本,1-3个足矣,然后分类,出来结果后,再添加错分或漏分的新样本,再分类,再调整……逐步调整,直至得到最佳分类结果。
5. 实验结果
  
            
   
图1:UNIST数据集图像
   
  
        
图2:USPS数据集图像
   
   
   
以上图1是UNIST数据集的实验结果,如图所示:
1.       当数据维数较低时(一般指低于50维),数字测试的精确度比较低,并且随着数据维数的增大而增高。当数据维数达到50左右时,精确度达到最高(92%),此时如果数据维数再增大时,精确度会稍微降低并稳定在91%左右。
2.       同时,我们还可以看出,当数据标准化后,测试精确度在某段维数区间内会稍微提高,但不是很明显,并且在精确度最高点以及维数很大的时候,精确度与数据是否标准化关系不是很大。
因此,我们得出结论:对手写数字的测试,无需标准化,并且数据维数最好控制在50维左右,这样可以得出最精确的结果。
图2 ,可以同样得出类似的结论。
      

手写数字识别的实现.zip (100.59 KB, 下载次数: 88)







我是笨鸟,我先飞!
回复

使用道具 举报

0

主题

5

帖子

15

积分

注册会员

Rank: 2

积分
15
沙发
发表于 2015-12-10 09:39:33 | 只看该作者
解释很详细,和下载内容重复了
回复 支持 反对

使用道具 举报

80

主题

103

帖子

749

积分

高级会员

Rank: 4

积分
749
板凳
发表于 2016-2-28 11:07:53 | 只看该作者
wlmnzf 发表于 2016-2-28 00:51
介绍的比较详细,不过貌似没有跟mnist具体结合

主要讲的是思路。

具体的你可以和tensorflow之类的结合,这些都有具体的MNIST实现代码和例子。
回复 支持 反对

使用道具 举报

0

主题

120

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
地板
发表于 2016-2-28 17:37:13 | 只看该作者
呵呵,看大家评论如何
回复 支持 反对

使用道具 举报

1

主题

73

帖子

170

积分

注册会员

Rank: 2

积分
170
5#
发表于 2016-3-15 10:30:36 | 只看该作者
谢谢楼主,楼主太好人了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|陕ICP备15012670号-1    

GMT+8, 2024-5-3 01:40 , Processed in 0.071472 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表