目录
实验二 运用贝叶斯决策理论实现手写数字识别
一、实验目的
熟悉和掌握贝叶斯决策理论,并利用贝叶斯决策理论的相关知识实现手写数字的识别算法,并分析主要参数变化对于识别结果的影响。
二、实验原理
1、分类器原理
贝叶斯分类是一类分类算法的总称,这类算法以贝叶斯定理为基础,故统称为贝叶斯分类算法,它是一类利用概率统计知识进行分类的算法。贝叶斯分类器是一种最优分类器,利用此分类方法得到的结果产生的误差总是最低。此方法的基础是贝叶斯公式,可以计算出该样品分属各类别的概率,也称为后验概率。
其主要思想为:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,所得到的最大值对应的类,就认为此待分类项属于这个类别。
2、实现手写数字识别算法原理
对于给定的样本集,训练库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% |
四、实验总结
1、实验流程
首先将下载得到的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,求出条件概率为:
- 利用贝叶斯公式求后验概率:
- 后验概率的最大值的类别(0~9)就是测试数据手写X的类别。
图4.1 手写数字识别流程图
2、分析不同模板对于实验结果的影响。
下载的单个样本图片初始大小为28*28,我们可以采用大小分别为2*2、4*4、7*7的模板进行实验,实验发现当选取2*2模板识别效果虽然好,正确率可以达到82%,但是运行时间过长,选取4*4模板,合适阈值下正确率最高为75.6%,当选取7*7模板时,正确率低于50%,所以不考虑。
3、分析同一模板下不同阈值对于实验结果的影响。
在选用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.4所示,我们可以发现不同数字的识别正确率是不同的。数字“1”被识别的正确率最高,为94.6%,数字“5”被识别的正确率最低,仅为55.7%。
图4.4 不同数字被识别的正确率情况
5、分析程序中的P矩阵。
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的概率值是不同的,纵向对比,对于同一个位置的像素点,不同类样本的概率也是不同的,这就说明不同样本对应的特征向量的取值是不同的,这也正是我们实现本次程序的关键所在。
6、实验心得体会
本次实验花费了很长时间,对于实验代码的编程,因为关于贝叶斯的理论知识感觉已经基本掌握,当时在和同学商量之后,决定不看老师提供的代码,独立编程。但是,在编程的过程中出现了各种各样的问题,首先就是数据集的大小没有理解清楚,盲目处理,最后努力编写出的代码运行结果正确率很低。后来请教他人后,才知道下载的数据集是按照一行一个样本存储的。另外,在编写降维以及计算概率的时候,对于一些python的矩阵运算函数自己之前根本没有了解过,嵌套了一些for循环语句,导致自己的程序运行效率很低。这也说明了自己在这方面有待提高。同时,在老师的指导下,明白了如何分析各个参数对于实验结果的影响,并注意书写的规范性。最后,顺利完成了本次实验,虽然花费了很长时间,但是付出总有回报,自己在获得知识的同时,更加磨练了自己面对难题时的意志。
参考代码数据集
下载链接:https://download.csdn.net/download/weixin_43442778/16016855
推荐文章
- 700套个人简历模板(考研保研工作):https://blog.csdn.net/weixin_43442778/article/details/114280230
- 人工智能2019年秋季学期期末复习知识点整理:https://blog.csdn.net/weixin_43442778?spm=1003.2018.3001.5343
- Fisher线性分类器的设计与实现,感知器算法的设计实现:https://download.csdn.net/download/weixin_43442778/16017212
欢迎大家关注【小果果学长】微信公众号,获取更多资料和源码,期待你的点赞和支持!