基于朴素贝叶斯分类器的简单手写体数字识别Byshenye手写数字识别(HandwrittenNumeralRecognition)是光学字符识别技术(OpticalCharacterRecognition,简称OCR)的一个分支。它研究的对象是:如何利用电子计算机自动辨认人手写在纸张上的阿拉伯数字。研究的实际背景•在整个OCR领域中,最为困难的就是脱机手写字符的识别。•手写数字识别的应用范围广泛,阿拉伯数字组成的各种编号和统计数据如:邮政编码、统计报表、财务报表、银行票据等等。研究的理论意义•阿拉伯数字是唯一的被世界各国通用的符号,对手写数字识别的研究基本上与文化背景无关。•目前为止机器的识别本领还无法与人的认知能力相比,这仍是一个有难度的开放问题。•手写数字的识别方法扩展范围广。研究的难度•一些测试结果表明,数字的正确识别率并不如印刷体汉字识别正确率高,甚至也不如联机手写体汉字识别率高。主要原因是:1.不同数字之间字形相差不大,使得准确区分某些数字相当困难;2.数字虽然只有十种,笔划简单,但同一数字写法千差万别,全世界各个国家各个地区的人都用,其书写上带有明显的区域特性,很难完全做到兼顾世界各种写法的极高识别率的通用性数字识别系统。算法的理论基础贝叶斯定理•设D1,D2,……,Dn为样本空间S的一个划分,如果以P(Di)表示事件Di发生的概率,且P(Di)0(i=1,2,…,n)。对于任一事件x,P(x)0,则有:•P(Dj/x)=p(x/Dj)P(Dj)/∑P(X/Di)P(Di),其中P(x)=∑P(X/Di)P(Di)•P(Dj)为先验概率,P(x|Dj)为联合概率(条件概率),P(Dj|x)后验概率。算法的理论基础朴素贝叶斯分类器•朴素贝叶斯分类器基于一个简单的假定:在给定目标值时属性值之间相互条件独立。换言之,该假定说明给定实例的目标值情况下,观察到联合的a1a2⋯am的概率正好是对每个单独属性的概率乘积。•设x=a1,a2⋯am,则P(x|Dj)=P(a1,a2⋯am|Dj)。•对未知样本X分类时,对每个类Di计算p(X/Di)p(Di)。样本X被指派到类Di,当且仅当p(X/Di)P(Di)P(X/Dj)P(Dj)j≠i,也就是X被指派到其p(X/Di)p(Di)最大的类Di中。方法介绍•从手写体数字提取5个特征向量特征向量与横线相交的点数(H)与竖线相交的点数(S)比划数(B)与撇线相交的点数(P)与捺线相交的点数(N)记X=(cntH,cntS,cntB,cntP,cntN)方法介绍—训练•通过处理板得到手写数字与横竖撇捺线的交点个数及笔画数即:•H,S,B,P,N•和从输入框中得到的输入值V•插入到数据库▲通过处理板得到手写数字与横竖撇捺线的交点个数及笔画数即:cntH,cntS,cntB,cntP,cntN•方法介绍—识别表1:训练集部分数据由公式:P(x|Dj)=P(a1,a2⋯am|Dj)m1)D/()/,...2,1(ijiapDjamaaP得到,x=(cntA,cntH,cntS,cntP,cntN),Dj{0,1,2,3,4,5,6,7,8,9},m=5,a1=cntB,a2=cntH,a3=cntS,a4=cntP,a5=cntN计算方法通过代码来解析:•while(read.Read())//从数据库中读取训练集•{count[pV]++;//当前数字PV出现的总个数datH[pH,pV]++;//在V=PV条件下H=pH的个数datS[pS,pV]++;datP[pP,pV]++;datN[pN,pV]++;datA[pA,pV]++;i++;//数据总数•}max=0;for(i=0;i10;i++){ansP[i]=1;//V=i时的概率,初始化为1ansP[i]*=count[i]*100.0/sum;//先验概率,*100将之放大ansP[i]*=datA[cntAll,i]*100.0/count[i];//V=i条件下B=cntAll的概率ansP[i]*=datH[cntH,i]*100.0/count[i];//V=i条件下H=cntH的概率ansP[i]*=datS[cntS,i]*100.0/count[i];//V=i条件下S=cntS的概率ansP[i]*=datP[cntP,i]*100.0/count[i];//V=i条件下P=cntP的概率ansP[i]*=datN[cntN,i]*100.0/count[i];//V=i条件下N=cntN的概率if(ansP[i]max)//取最大的ansP[i]{max=ansP[i];ans=i;//ans即识别出来的值}}if(max==0)MessageBox.Show(无法识别);•这样做的优点是:•用户可按照自己的书写习惯自行创造数据集,这使得工具变得有「灵性」,不同的用户将创造不同的数据集,工具因此有了不同的记忆,训练得越多,工具的识别能力越强,识别率越高。总结80210970%310890%110790%1106100%0105100%010480%210370%310290%110190%1100识别率误识样本数识别样本数数字类别80210970%310890%110790%1106100%0105100%010480%210370%310290%110190%1100识别率误识样本数识别样本数数字类别左表所示:字符2,3,8的误识率较高,这是由于他们标准特征向量距离较小。通过增加特征向量的方法可以减少误识率。•由实验结果表明,基于朴素贝叶斯分类器的手写数字识别是可行的。%•在特征向量的提取上,我还有如下几种想法:•将方向设为8个(避免2和3的错误识别)。•与边框的交点(避免8和3的错误识别)。•每一笔的走势(避免1和7的错误识别)。•数字字体的长宽比。•边框内红色像素与非红色像素之比。一些想法:一些想法:•另外,通过这个小实验,使我对汉字的识别也有了一些思路:用上述方法识别输入的每一个比划(横,竖,撇,捺,折等),即模拟人在手写时候的方式,通过朴素贝叶斯分类器(也可不用),按汉字部首的比划组合方式识别出部首,由部首的组合,最终识别出汉字。这需要非常巨大的数据训练集。谢谢!