智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

0结课作业内容
(1)程序编写及报告。
请大家下载70000个样本的MNIST数据集(“手写体数字70000.zip”,28*28像素),60000个用于训练,10000个用于测试!!!

(2)使用的程序可以包括:
1)以各类平均值为类中心的最小距离法;
2)KNN法,K取1,3,5,…;
3)BP神经网络;
4)支持向量机;
5)其他方法:深度学习 CNN等。
要多做几种程序,多选几种特征,进行算法对比,完成结课报告写作,5000字以上(字数统计不含程序代码)。

课设源代码、调库程序和一些文件放在资料区下载。
文件内容形式:(有70000的minist数据集,也有0002手写数字数据集)

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)
智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

主程序如下所示:(python语言)

1.2数据提取子程序
数据提取子程序的主要思路是,先利用open()函数打开官方网站(从 http://yann.lecun.com/exdb/mnist/)中下载的四个二进制文件;再利用train1.seek把指针指到需要读取的位置,最后将数据转int形式,存入32×32的矩阵中并转置;完成数据的提取。
具体程序如下:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

其中 μ1,μ2,. . . ,μK 是 K 个聚类中心,rik 对应着第 i 个训练样本 xi 归于哪一类,应当满足

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

求r的分类函数,按照上面定义的公式走

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

利用测试集的标签和原标签做对比,求我们K均值聚类后的正确率,就是识别的成功率

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

我们甚至还可以根据选取的第几行判断这个数字长什么样并输出图像,并和原来的标签做对比,这里选第66666行的数据,则输出图像为:
!](https://img-blog.csdnimg.cn/ebe2af39a47549569bfe4d4c7bae2b97.png)

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

1.5程序各板块运行结果
在我们设置参数分为10类,迭代15次得出的结果:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

聚类完成后,每一类选一张代表性的图片输出:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

取出的十个代表性图片,我们还可以看到它原来的标签并做对比,还有分类的正确率和程序的运行时间也得出如下:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

得到的九类每一类的代表性图片如下:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

1.6调用sklearn库的程序运行结果及对比分析
我们再调用sklearn库的k-means算法和手写的k-means算法做对比,包括时间上和性能上的对比:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)
智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

下面是测试集选取进行聚类分析的测试结果,可以看到左下角标红的就是识别不正确的图片。

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)
,明显比我的百分之五十多高得多。
且运行时间也更低:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

对比结果分析:我们可以看出,调库无论是程序运行时间还是正确率,都比我们直接实现的模型更加的优化、快速,且进行PCA降维后,可视化效果会更加直观,从时间上的600多秒、800多秒到调库的0.33秒可以看出,sklearn库的功能是多么强大,查阅相关资料和咨询同学得知,这是因为调库是启用了多线程、多核进行运算,能够充分调动计算机的性能,而不是像我们写的单核程序一样运行缓慢,所以这也是调用现成库给我们程序员带来的巨大便利。同时,无监督学习和有监督学习的不一样地方我们也可以感受到,就是训练集和测试集的选取,在无监督学习,是70000个数据集即可当训练集,也可以当测试集,这就给我们对有无监督的学习了解的更加透彻。

2 K-近邻法(KNN)
K-近邻分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一,该方法的思路是:如果一个样本在特征空间中的 k 个最相似即特征空间中最邻近的样本中的大多数属于某一个类别,则该样本也属于这个类别。所以,K-近邻法的关键是寻找距离最近的k个训练样本中,出现频率最高的样本类别,算法通俗易懂的介绍如下:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

查看数据集的信息:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

2.2主程序
先进行交叉验证:使用K折和留一法,K后面取1,3,5,…

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

#合并原来划分好的数据集 便于之后交叉验证使用

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

先来看看单纯用训练集训训练后能在测试集上获得怎样的表现

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

在不进行PCA降维情况下查找K取什么值时候效果最佳,并画出折线图:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

加上PCA降维的:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

结果如下,横坐标是PCA的百分比

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)
智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)
智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

3 神经网络
人工神经网络的工作过程可分为训练和测试两个阶段。在训练阶段,以一组输入输出模式对作为训练样本集来训练网络。网络训练的过程即是网络参数(包括权值、阈值等等)的调整过程。在测试运行阶段,给定新的输入,网络即能计算得到相应的输出。

3.1导入需要的库、包
导入需要的包 nump: python第三方库,用于进行科学计算 PIL : Python Image Library,python,python第三方图像处理库 matplotlib:python的绘图库 pyplot:matplotlib的绘图框架
os:提供了丰富的方法来处理文件和目录

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

观察数据集的方法

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

以下的代码判断就是定义一个简单的多层感知器,一共有三层,两个大小为100的隐层和一个大小为10的输出层,因为MNIST数据集是手写0到9的灰度图像,类别有10个,所以最后的输出大小是10。最后输出层的激活函数是Softmax,所以最后的输出层相当于一个分类器。加上一个输入层的话,多层感知器的结构是:输入层–>>隐层–>>隐层–>>输出层。

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

在这里调用定义好的网络来获取分类器

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

接着是定义优化方法,这次我们使用的是Adam优化方法,同时指定学习率为0.001。

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

输入的数据维度是图像数据和图像对应的标签,每个类别的图像都要对应一个标签,这个标签是从0递增的整型数值。

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST) 智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST) 智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

在模型预测之前,要对图像进行预处理,处理方式要跟训练的时候一样。首先进行灰度化,然后压缩图像大小为2828,接着将图像转换成一维向量,最后再对一维向量进行归一化处理。
#将RGB转化为灰度图像,L代表灰度图像,灰度图像的像素值在0~255之间
#resize image with high-quality 图像大小为28
28
#返回新形状的数组,把它变成一个 numpy 数组以匹配数据馈送格式。

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST) 智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

得到结果:

智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

最终得到的预测结果为:该图片的预测结果的label为: 3

4三个实验的结果及分析(部分结果分析上面已给出)
通过对三种分类方法的结果对比可得出以下结论:
1)Knn的K值在取到21时候,分类效果最好,PCA降维取到60%左右开始趋于稳定。
2)三种分类方法中,神经网络的分类效果最好.正确率可以达到百分之九十多,其次到knn和调库的K-means,最后才是自写的正确率只能达到百分之五十多的k-means;

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34297 人正在系统学习中

来源:华电第一深情

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月22日
下一篇 2022年4月22日

相关推荐