手写数字识别项目报告

                                    ***任务4项目报告***

一、 需求分析
需求:
1、 对图片(类似手写数字)进行分类
分析:
1、 处理图片,要避免维度灾难,这就需要图片压缩、灰度化处理。
2、 要有效提取信息,这就可能需要滤波和加强图像。
3、 因为已经压缩了大量信息,特征选择上要全部像素都用。
4、 对图像进行预测建模。然后进行交叉验证,训练后在训练集上做准确率测试,最后在验证集上做泛化能力测试。
5、 注意到这是一个特别“平衡”的数据集,因此不用考察查准率和查全率
6、 调节超参,调优模型
7、 比较和选择最优模型

二、实现
1、注意:
(1)由于我的Anaconda死活配置不了openCV环境(网络不好,下不了包),PIL库处理图像不太方便,所以我在图像预处理时使用的是VS2017和C++,机器学习部分用Anaconda的Spyder IDE和py,调用sklearn框架。看起来挺蠢的
(2)本项目使用了SVM(poly核)、RandomForest两个分类算法。
2、图像预处理:
(1)导入图像来处理。灰度化以后,直方图均衡化图像,然后缩小图像,最后图像保存在train/x.5中,编写了一个Resize函数来实现:

预处理后效果如图所示(这其实是一个9X6的“1”的小图像):

3、导入到Spyder中进行建模
(1)每一张图片在导入Spyder后都展开为一行向量,并且末尾加上一个元素作为lable,导入一个DataFrame中,准备开始建模
(2)切片出一个大的验证集,求出其补集(验证集有1197个数据,为总数据的1/10)
(3)对SVM、RandomForestClassifier对象设置超参,并且交叉验证:
效果比较好(怀疑两秒钟)
(4)用训练集训练SVM的训练用时:0.4107秒
RandomForestClassifier的训练用时:0.4263秒
(5)在训练集上验证训练集上的准确率都是1.0,比较好
(6)在验证集做泛化能力测试(之前做了交叉验证,这一步真的比较多余了)
由于准确率都很高,所以我认为没有调节超参的必要
4、保存模型
三、总结
1、要好好研究一下openCV怎么配置到Python中才行
2、用的分类算法比较少,但是svm和randomforest效果都特别好。时间紧迫,没有去试试svm的其它核,也没有试试lent5等其它算法,很可惜
3、cpp、py源码,spydata的数据,图像数据集,SVM_model.pkl等两个分类模型保存在文件夹中
源码不弄上来了;

你可能感兴趣的:(手写数字识别项目报告)