基于核函数的Fisher手写数字识别系统研究
来源:用户上传
作者:丁建 李宁谦
摘要:将费歇(Fisher)分类器中的线性函数替换成非线性的高斯核函数,使用MNIST数据集对Fisher分类器进行训练,研究了核函数对分类结果的影响以及将算法应用于手写数字识别。结果表明,替换了高斯核的Fisher分类器,能够有效地区分非线性数据的类别,同时又保持了线性数据的准确率。
关键词:Fisher;核函数.手写数字识别;MNIST;模式识别
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2020)01-0176-04
手写数字识别在很多地方都有应用,例如智能机中的手写输入法,公司的税务局报表、支票数字编码识别等。被识别对象可以分为手写体以及印刷体:印刷体相较于手写体而言,具有字体规则,大小基本一致等特点,识别相对简单;手写体,由于个人书写习惯不同,各具特点,识别相对困难。通过算法自动识别文字、数字、符号、字母,实现信息自动录入,可以为税务、金融、文学等工作者节省大量重复不必要工作的时间,加快工作速度,提升工作效率,同时产生一定的经济效益。
数字的类型有多种,阿拉伯数字、罗马数字等,目前研究较多的是针对阿拉伯数字似下简称数字1的识别。数字对比文字的优点在于字形简单,缺点在于所含特征信息少。同种数字的多种写法以及某些数字字形相似等多种特殊情况都给識别系统带来巨大挑战。
本文考虑10个类别的数字识别,已不再是简单的线性分类问题,所以采用带高斯核函数的Fisher分类器,用MNIST数据集训练和测试模型。MNIST数据集是属于美国国家标准与技术研究所(NIST)的子集,由250个不同人手写的数字构成,其中一半来源于高中学生,剩下一半来自人口普查局的工作人员。
本文组织结构如下,第2章介绍线性Fisher算法,第3章介绍带核函数的Fisher算法,第4章介绍手写识别系统的设计、实现与测试,第5章为全文总结。
1Fisher算法
1.1算法简介
在两类问题中,已知样本集合X内有N个d维的样本,其中Ⅳ。个属于c,类的样本记为子集X1,N2个属于C2类的样本记为子集X2。
标准线性判别式(决策函数1:
由子集X1和X2的样本经过投影后得到的对应子集Y1和Y1。因为我们关心的是W的方向,可以令W=1,那么yk就是‰在w方向上的投影。使Y1和Y2最容易分开的w方向正是区分超平面的法线方向。
1.2算法步骤
2使用核函数的Fisher算法
2.1常用核函数
核函数可以将线性空间中的非线性关系映射到非线性空间的变成线性关系,从而可以很好地克服线性方法无法处理非线性问题的不足。
2.2算法步骤
3系统设计、实现与测试
3.1系统流程
图1给出了本识别系统的详细流程。在用户完成一次识别后,系统会给出预测值,当预测值与用户实际手写数字不相符时,用户可以标注好此错误识别数字的正确标签,并将错误样本提交到该系统的数据库中,以扩充系统的样本数据,增加模型的识别率。
3.2模型训练
实验环境:操作系统Windowsl064位,硬件平台:Intel-Corei7-6700 3.4GHz,内存16GB,开发环境:MATLABR2016a。
用于训练的样本量为60000个,图片大小28x28像素,训练总共耗时894秒;用于测试的样本量为10000个,正确率为92.89%。Fisher属于二分类的分类器,一次只能训练2个类别,10个类别总共需要训练45次。训练过程如图2所示。
3.3系统界面介绍
软件采用MATLABGUI编程,系统界面主要由五大功能区域构成,区域一为显示功能区,能显示由用户通过手写窗口书写的数字;区域二为分类器选择区,可提供多种分类器(本文中只使用Fisher分类器);区域三为预测结果区,该区域不仅可以显示结果,还可以统计错误与正确的个数(需要用户按对应的按钮来操作识别正确的个数和识别错误的个数),并自动计算出对应的正确率;区域四为增加新样本区,用户在本次识别之后,可以选择将系统识别错误的样本添加到系统的样本库中,以增加样本库的数据量;区域五为按钮功能区,提供打开手写框、导入图片(支持PNG,JPEG,BMP格式)、启动识别、系统重置和退出的功能。
系统使用流程:点击界面上的“OpenDrawPad”按钮,打开画板,如图4所示,进行数字书写,完成后右击画板会自动保存所书写的数字图像,并处理为可以被识别的图像格式。然后再点击“Recognize”按钮,进行识别,结果会显示在界面的绿色区域内。如果预测结果与所写数字匹配,请点击“Right”按钮,否则点击“Wrong”按钮。你可以选择将本次识别的图像作为新样本,为训练下次模型提供样本。将正确的数字的标号输入“La-bel”右侧的输入框内,并点击“Add”按钮,添加成功会在界面底部状态栏进行提示,如图5所示。
3.4系统测试
通过书写0至9任意数字,对本系统进行测试,测试部分结果如图6所示。测试共进行100次,每个数字进行10次测试,记录数字每次的测试结果(表1),并统计对应的正确率与总体的正确率。通过表分析,该系统算法对0、1、2、3、7能够准确识别,4、5、6、8、9能够识别,实际100次平均识别率为71%。
4结论
在测试集中识别正确率达92%,但仅限于没有旋转的数字,一旦数字发生形变或位置发生偏移,都不能正确的被识别,所以训练出来的模型局限性还是很大。待改进点一:可以对原始的数字图片进行平移、旋转、缩放等操作,以达到数据扩充的目的,增加识别系统的数据量;待改进点二:替换识别算法,利用现在比较先进的深度学习框架,例如GAN网络、带残差块的神经网络等;待改进点三:增加系统中分类算法的选择,此系统采用前后端分离的设计,方便扩展多种分类识别算法,可继续增加SVM、决策树、逻辑回归等算法,来增加此系统识别模块的鲁棒性和识别率。
转载注明来源:https://www.xzbu.com/8/view-15143761.htm