python开发构建基于机器学习模型的手写数字识别系统
迪丽瓦拉
2025-06-01 07:12:33
0

手写数字识别相比都不是什么新鲜的事情,以往这个问题绝大多数的方法都是基于CNN开发的深度学习的模型,后面又基于LSTM系列的模型也有开发过,但是基本上都是基于深度学习模型实现的识别,那么不禁就在想:如果纯粹基于基础的机器学习模型是否能够实现高效的识别呢?虽然在之前的时候已经基于机器学习的方式做过人脸识别、表情识别,但是在复杂环境下效果总是差强人意,手写数字识别mnist的数据集相对更加纯净,理论上来讲,只要特征提取的好,简单的机器学习模型应该也有不错的识别效果的,而且机器学习模型的推理速度有优势,如果精度ok,本身就是一个不错的选择。

话不多说,首先看下效果图:

完整项目截图如下所示:

简单看下数据集:

简单看几个类别:

【0】

【5】

【9】

可以看到:这里的数据不再是直接从第三方模块导入的形式,因为为了直观操作,我这里将模块内置的mnist数据集进行了解析转化存储处理,关于详细的操作可以参考我以前的文章,如下:

《Python实现将tensorflow内置的二进制格式的mnist数据集转化为图像进行存储》

《Python实现将Keras内置的mnist数据集转化为图像进行存储》

《Python实现将scikit-learn内置的mnist数据集转化为图像进行存储》

非常详细的讲解都在上面的博文中,感兴趣的话可以自行移步阅读即可。这里就不再赘述了。

特征提取这里一般使用的较多的就是HOG和LBP了,LBP提取出来的向量维度较高计算量也相对更大,与之带来的精度也更高一点,HOG相对LBP而言更为轻量级一些,这里我采用的是HOG方法,整体建模流程如下:

这里我采用的是支持向量机SVM作为手写数字分类的模型,建模实现如下:

#随机划分
X_train, X_test, y_train, y_test = splitData(x_list, y_list, ratio=0.3)
#模型初始化
model = LinearSVC()
#训练拟合
model.fit(X_train, y_train)
#预测
y_predict = model.predict(X_test)
y_pred = y_predict.tolist()
#计算准确率
accuracy = model.score(X_test, y_test)
print("SVM model accuracy: ", accuracy)
Precision,Recall,F1=calThree(y_test,y_pred)
saveModel(model,save_path=model_path)
result={}
result['accuracy'],result['F_value']=accuracy,F1
result['precision'],result['recall']=Precision,Recall
print('type: ', type(y_test), type(y_pred))
result['y_true'],result['y_pred']=y_test,y_pred
plotConfusionMatrix(y_test, y_pred, save_path = saveDir + 'ConfusionMatrix.png')

运行输出如下:

可以看到:SVM的识别效果已经非常好了,简单看下混淆矩阵:

为了直观简洁实用,这里开发了专用的可视化界面,如下:

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...