目录
实验二 运用贝叶斯决策理论实现手写数字识别
一、实验目的
二、实验原理
1、分类器原理
2、实现手写数字识别算法原理
三、实验结果
四、实验总结
1、实验流程
2、分析不同模板对于实验结果的影响。
3、分析同一模板下不同阈值对于实验结果的影响。
4、分析同一模板下相同阈值下各数字识别的准确性情况。
5、分析程序中的P矩阵。
6、实验心得体会
参考代码数据集
推荐文章
熟悉和掌握贝叶斯决策理论,并利用贝叶斯决策理论的相关知识实现手写数字的识别算法,并分析主要参数变化对于识别结果的影响。
贝叶斯分类是一类分类算法的总称,这类算法以贝叶斯定理为基础,故统称为贝叶斯分类算法,它是一类利用概率统计知识进行分类的算法。贝叶斯分类器是一种最优分类器,利用此分类方法得到的结果产生的误差总是最低。此方法的基础是贝叶斯公式,可以计算出该样品分属各类别的概率,也称为后验概率。
其主要思想为:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,所得到的最大值对应的类,就认为此待分类项属于这个类别。
对于给定的样本集,训练库60000张手写数字图像,测试库有10000张基于上述分类器,基于贝叶斯决策理论设计手写数字识别分类器。
图2.2.1 手写数字“0”部分样例 图2.2.1 手写数字“8”部分样例
对于选取不同的阈值,以及综合考虑图像模板和算法实际效率的基础上,选用4*4模板,采取阈值(此处阈值指的是模板内像素值为非0元素的总个数)为4其最终平均正确率为75.6%。采用不同阈值下,各类样本的正确率见下表3-3.
表3.1 4*4模板下不同阈值识别手写数字的结果比较
阈值 类别 |
3 |
4 |
5 |
0 |
86.9% |
86.2% |
84.0% |
1 |
94.9% |
94.6% |
94.4% |
2 |
75.0% |
71.8% |
68.2% |
3 |
74.0% |
76.9% |
76.6% |
4 |
71.0% |
73.0% |
72.3% |
5 |
53.0% |
55.7% |
55.0% |
6 |
83.1% |
81.4% |
79.1% |
7 |
78.3% |
79.0% |
80.4% |
8 |
62.1% |
62.4% |
60.8% |
9 |
74.4% |
75.6% |
73.0% |
平均 |
74.4% |
75.6% |
73.0% |
首先将下载得到的minst.mat文件数据进行二值化处理,非0元素设置为1,其余像素点为0.根据流程图4.1所示,手写数字识别算法实现步骤如下:
- 根据训练样本,由各类样本的样本数和样本总数近似计算先验概率:
i=0,1,2,…,9,其中Ni为数字i的样品数,N为样品总数。
- 根据训练样本,计算Pj(Wi),再计算类条件概率P(X|Wi):
j=0,1,2,…,49,即在X属于Wi类的条件下,X的第j个分量为1的概率估计值。
- 对于测试样本集中的每一个样本X,求出条件概率为:
图4.1 手写数字识别流程图
下载的单个样本图片初始大小为28*28,我们可以采用大小分别为2*2、4*4、7*7的模板进行实验,实验发现当选取2*2模板识别效果虽然好,正确率可以达到82%,但是运行时间过长,选取4*4模板,合适阈值下正确率最高为75.6%,当选取7*7模板时,正确率低于50%,所以不考虑。
在选用4*4模板的前提下,通过选取不同的阈值,如图4.3.1所示,数字“0”降维后的图片显示,当 Threshold分别3,4,5,6,如下图4.3.1所示,我们通过对比发现当选取阈值为4时,正确率取得最大值75.6%。
图4.3.1(1) 阈值为4 图4.3.1(2) 阈值为5
图4.3.1数字“0”降维后的效果
图4.3.2 不同阈值对于实验结果的影响
在选取4*4模板,阈值为4的前提下,如下图4.4所示,我们可以发现不同数字的识别正确率是不同的。数字“1”被识别的正确率最高,为94.6%,数字“5”被识别的正确率最低,仅为55.7%。
图4.4 不同数字被识别的正确率情况
P矩阵是根据训练集的特征向量进行求取得到的,在4*4的模板下,样本单个图片被降维为7*7,最后得到的P矩阵大小为10*49.P矩阵中记录了该样本在7*7个像素点的位置所对应的为1的概率。例如P(i,j)表示的就是对于i类样本,在第j个像素点为1的概率。P矩阵大致元素如下表4.5所示:
表4.5 P矩阵部分展示
i j |
1 |
10 |
20 |
30 |
40 |
0 |
1.69E-04 |
8.29E-01 |
2.23E-02 |
7.41E-01 |
9.55E-02 |
1 |
1.48E-04 |
5.09E-01 |
1.48E-04 |
2.75E-01 |
4.45E-03 |
2 |
1.68E-04 |
9.02E-01 |
1.68E-04 |
8.77E-01 |
3.44E-01 |
3 |
1.63E-04 |
9.54E-01 |
1.63E-04 |
1.81E-01 |
1.14E-01 |
4 |
1.71E-04 |
2.11E-01 |
3.76E-03 |
6.28E-01 |
7.15E-02 |
5 |
1.84E-04 |
6.43E-01 |
5.77E-02 |
2.97E-01 |
1.08E-01 |
6 |
1.69E-04 |
7.18E-01 |
1.35E-03 |
9.74E-01 |
3.58E-02 |
7 |
1.60E-04 |
3.74E-01 |
2.23E-03 |
1.01E-01 |
1.10E-02 |
8 |
1.71E-04 |
8.75E-01 |
3.04E-02 |
7.95E-01 |
8.10E-02 |
9 |
1.68E-04 |
6.51E-01 |
1.18E-03 |
4.18E-01 |
6.02E-02 |
通过P矩阵我们可以看出,在不同的列,也就是不同的像素位置,同一类样本为1的概率值是不同的,纵向对比,对于同一个位置的像素点,不同类样本的概率也是不同的,这就说明不同样本对应的特征向量的取值是不同的,这也正是我们实现本次程序的关键所在。
本次实验花费了很长时间,对于实验代码的编程,因为关于贝叶斯的理论知识感觉已经基本掌握,当时在和同学商量之后,决定不看老师提供的代码,独立编程。但是,在编程的过程中出现了各种各样的问题,首先就是数据集的大小没有理解清楚,盲目处理,最后努力编写出的代码运行结果正确率很低。后来请教他人后,才知道下载的数据集是按照一行一个样本存储的。另外,在编写降维以及计算概率的时候,对于一些python的矩阵运算函数自己之前根本没有了解过,嵌套了一些for循环语句,导致自己的程序运行效率很低。这也说明了自己在这方面有待提高。同时,在老师的指导下,明白了如何分析各个参数对于实验结果的影响,并注意书写的规范性。最后,顺利完成了本次实验,虽然花费了很长时间,但是付出总有回报,自己在获得知识的同时,更加磨练了自己面对难题时的意志。
下载链接:https://download.csdn.net/download/weixin_43442778/16016855
欢迎大家关注【小果果学长】微信公众号,获取更多资料和源码,期待你的点赞和支持!