【机器学习】基于SVM、逻辑回归和CNN的手写数字识别:性能对比与应用分析

基于SVM、逻辑回归和CNN的手写数字识别:性能对比与应用分析

  • 1 基于SVM对手写数字识别
  • 2 基于逻辑回归对手写数字进行识别
  • 3 基于CNN对手写数字进行识别
  • 总结对比分析

1 基于SVM对手写数字识别

在使用SVM方法对手写数字进行识别的时候,我采用了一对多(One-vs-Rest)的策略,即针对每个数字都建立一个模型,用来识别数字是不是目标数字。具体实现流程是:

首先采用与KNN相同的数据集(有关内容可以参考我的上一篇文章链接: 基于KNN对手写数字进行识别),并且进行对数据进行标准化、扁平化处理;然后按照8:2的比例对数据集进行划分;接着,为每个数字(0-9)训练一个二分类的SVM模型,每个模型将目标数字作为正类,其他所有数字作为负类,并且使用RBF核函数以处理非线性分类问题;然后对每个数字分别训练SVM分类器,记录每个模型的训练时间和性能指标,并且使用交叉验证来评估模型的稳定性;最后,对输入图像,使用所有10个SVM模型进行预测,综合各个模型的预测概率,选择置信度最高的类别作为最终预测结果。

各数字SVM模型训练时间

图1 各数字SVM模型训练时间

如图1所示,展示的是SVM模型训练识别每个数字的训练时间。可以发现,模型在识别数字0上耗时最短,在识别数字8上耗时最长。这与数据集的质量、数字特征、数据分布的离散程度等各方面都有关系。

表1 SVM模型判别每个数字的性能指标
数字准确率精确率召回率F1分数训练时间(秒)
0.00.99721.00000.97220.98590.0798
1.00.98890.94440.94440.94440.1669
2.01.00001.00001.00001.00000.1695
3.01.00001.00001.00001.00000.1866
4.00.98891.00000.88890.94120.1559
5.01.00001.00001.00001.00000.1699
6.00.99721.00000.97220.98590.1247
7.00.99440.97220.97220.97220.1504
8.00.98331.00000.82860.90620.1980
9.00.99441.00000.94440.97140.1918
平均值0.99440.99170.95230.97070.1593
标准差±0.0057±0.0187±0.0552±0.0312±0.0352

从表1可以看出,SVM模型在手写数字识别任务中表现优异,尤其在数字2、3和5的分类上,各项指标均达到1,表明模型能够完全正确地识别这些类别的数字。这可能与这些数字在MNIST数据集中的特征显著性和类别区分度较高有关。尽管整体性能较高,但在某些类别上仍存在一定的不足。例如,数字8的召回率为0.8286,低于其他类别。这表明模型在该类别上存在一定的漏检现象,可能是由于数字8的形状与其他数字(如0或9)容易混淆,导致分类器在区分时出现困难。

此外,从训练时间来看,SVM在各类别的训练时间相对均衡,平均耗时为0.16秒,标准差较小。这说明模型具有较高的训练效率,适合中小规模的数据集应用。

2 基于逻辑回归对手写数字进行识别

在使用逻辑回归训练时,我也采用一对多的策略,为每个数字训练一个二分类器。首先对MNIST数据集的8×8手写数字图像进行预处理,将图像数据展平为64维特征向量,并使用StandardScaler进行特征标准化,保持与其他方法相同的训练集(1437样本)和测试集(360样本)划分。

在模型设计上,为每个数字(0-9)构建一个二分类逻辑回归模型,使用L2正则化防止过拟合,并采用LBFGS优化器进行模型训练。训练过程中,对每个数字分别训练二分类器,使用交叉验证评估模型性能,同时记录训练时间和各项性能指标。在预测阶段,使用所有训练好的二分类器对输入图像进行预测,获取每个分类器的预测概率,并选择概率最高的类别作为最终预测结果。

各数字逻辑回归模型训练时间

图2 各数字逻辑回归模型训练时间
通过图2可以看出,使用逻辑回归识别各个数字的训练耗时整体较低,且大部分数字的训练耗时保持在0.01秒左右,表现出较高的训练效率。然而,在识别数字0时,训练耗时达到0.03秒,是其他数字的三倍。这可能与数字0的特征分布较广或与其他数字(如6或8)存在更大的相似性有关,导致模型在训练时需要更多计算资源。

总体而言,逻辑回归的训练时间较短,适合快速部署和资源受限的场景。

表1 SVM模型判别每个数字的性能指标
数字准确率精确率召回率F1分数训练时间(秒)模型参数数量
0.00.99441.00000.94440.97140.028065.0
1.00.97500.90910.83330.86960.007065.0
2.01.00001.00001.00001.00000.007065.0
3.00.98060.91670.89190.90410.007065.0
4.00.99440.94741.00000.97300.007065.0
5.00.99721.00000.97300.98630.006765.0
6.00.99721.00000.97220.98590.007265.0
7.00.98890.92110.97220.94590.008065.0
8.00.95560.85190.65710.74190.008365.0
9.00.99441.00000.94440.97140.006865.0
平均值0.98780.95460.91890.93500.009365
标准差±0.0138±0.0533±0.1052±0.0790±0.0066±0

从表2可以看出,逻辑回归在手写数字识别任务中的总体性能较好,平均准确率为98.78%,精确率为95.46%,召回率为91.89%,F1分数为93.50%。模型参数数量始终为65,训练耗时平均为0.0093秒,展现了逻辑回归模型在计算效率上的优势。然而,模型在数字8的识别上表现较弱,召回率仅为65.71%,F1分数为74.19%,远低于其他数字。这可能是因为数字8的形状更容易与其他数字混淆,例如数字0或9。

此外,训练耗时总体较为均匀,除了数字0的训练时间较高(0.028秒),其他数字的训练时间基本在0.007秒左右,说明逻辑回归在小规模参数优化上具有较高的效率和稳定性。

3 基于CNN对手写数字进行识别

接着,我设计了一个适用于MNIST手写数字识别的CNN网络模型。网络结构包含两个卷积层和全连接层,其中第一个卷积层使用16个3×3的卷积核,第二个卷积层使用32个3×3的卷积核,每个卷积层后都跟随ReLU激活函数、批标准化和最大池化操作。在全连接层中,我们使用了128个神经元,并添加了Dropout层(比例为0.5)来防止过拟合。对于输入数据,我们首先将8×8的手写数字图像标准化,并重塑为适合CNN输入的四维张量格式(N, 1, 8, 8)。在训练过程中,使用Adam优化器和交叉熵损失函数,设置批量大小为32,训练50个epochs,同时保存验证集性能最好的模型参数[9]。
CNN模型训练损失函数及准确率随轮数的变化

图3 CNN模型训练损失函数及准确率随轮数的变化

根据图3发现,随着轮数的增加,模型训练损失值逐渐下降并趋于稳定,准确率在98%左右浮动。表3显示,CNN模型在测试集上达到了97.85%的准确率,虽然训练时间相对较长,但模型表现出了良好的特征提取能力和分类性能。这种基于CNN的方法能够自动学习图像的层次特征,无需手动设计特征提取器,展现出深度学习方法在图像识别任务上的优势。

表3 CNN模型判别数字的性能指标
准确率精确率召回率F1分数训练时间(秒)
0.9777777780.9783222380.9776941230.9777596198.581076622

总结对比分析

通过前面1-3小结,我们使用三种方法对手写数字数据集进行了训练,接下来将从训练耗时、模型最终的准确率、精确率、召回率、F1分数,多维度分析与使用KNN的方法差异性,综合评判KNN在手写数字识别上的表现。

四种方法模型训练时间对比

图4 四种方法模型训练时间对比

如图4所示,展示了四种方法模型训练的耗时。可以直观的看出,在面对同样的数据时,CNN的训练耗时最长,KNN训练耗时次之,逻辑回归的训练耗时最短。根据这个图片说明KNN可能并不是最好的选择。

表4 四种方法模型性能指标对比
方法准确率精确率召回率F1分数
KNN0.9756 (±0.0114)0.9758 (±0.0122)0.9757 (±0.0101)0.9751 (±0.0114)
SVM0.9944 (±0.0057)0.9917 (±0.0187)0.9523 (±0.0552)0.9707 (±0.0312)
逻辑回归0.9878 (±0.0138)0.9546 (±0.0533)0.9189 (±0.1052)0.9350 (±0.0790)
CNN0.9778 (±0.0000)0.9783 (±0.0000)0.9777 (±0.0000)0.9778 (±0.0000)

表4的内容是使用5折交叉验证之后,四个模型的准确率、精确率、召回率、F1分数的性能表现。除了CNN之外,其他三种方法的模型性能都有小幅度的变化。

从表中可以看出,SVM在准确率和精确率上表现最优,分别达到0.9944和0.9917。这表明SVM在区分正确类别的能力上具有优势,尤其是在对分类边界的处理上更为精细。然而,SVM的召回率和F1分数(0.9523和0.9707)相比CNN有所下降,这说明在某些类别的样本中,SVM可能存在一定的漏检情况。此外,SVM的性能指标波动较小,但依然不及CNN的稳定性;逻辑回归的总体表现不如其他方法,特别是在召回率(0.9189)和F1分数(0.9350)上表现较低。这表明逻辑回归在处理多类别任务时可能存在一定的不足,尤其是对于较复杂的手写数字图像。尽管逻辑回归的准确率(0.9878)仍然较高,但其精确率和召回率的波动(分别为0.0533和0.1052)较大,说明该模型的稳定性较弱。

KNN方法在准确率(0.9756)、精确率(0.9758)、召回率(0.9757)和F1分数(0.9751)上表现较为均衡,且波动较小(±约0.01)。这表明KNN在手写数字识别任务中表现稳健,尤其适用于较小的数据集。然而,由于KNN方法需要计算所有训练样本的距离,模型的计算成本较高,不适合实时性要求较高的任务;CNN在召回率和F1分数上表现最佳,分别达到0.9777和0.9778,且在所有指标上的波动均为0。这表明CNN具有较强的稳定性和鲁棒性,能够较好地捕捉手写数字的局部特征,适用于复杂数据的分类任务。尽管CNN的准确率和精确率略低于SVM,但在实际场景中,CNN的稳定性和对数据分布的适应能力使其成为首选。

SVM和CNN虽然性能优异,但其计算成本较高,尤其是在大规模数据集上的训练时间较长。相较而言,逻辑回归和KNN的实现相对简单,更适合资源有限或对响应速度要求较高的场景。

如果应用场景对分类准确率和精确率要求较高,例如银行支票识别,SVM是一个较优选择;如果关注召回率,例如需要尽可能减少漏检的安全检查任务,CNN的表现更为适合;如果数据规模较小且需要快速部署,KNN方法的简便性和稳健性使其成为可行选择。

综合分析表4的结果,不同模型在手写数字识别任务中展现了各自的优势。SVM和CNN在性能上更为突出,但需要平衡计算成本和实际需求。在具体的应用场景中,模型的选择应以实际需求为导向,既要关注模型的分类性能,也要考虑其实现复杂度和运行效率。通过对不同模型的优势和不足的综合评估,为手写数字识别任务提供更加高效和可靠的解决方案。

本文内容主要基于我的学习和实验过程整理而成。如果文中存在任何错误、不足或模糊的地方,欢迎您批评指正。同时,如果您有任何疑问或感兴趣的内容,随时与我交流探讨,一起进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486595.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群控系统服务端开发模式-应用开发-邮件工厂电信189发送开发

一、电信189邮件工厂开发 1、添加框架对应的SDK composer require phpmailer/phpmailer 2、添加电信189邮件工厂 在根目录下extend文件夹下Mail文件夹下channel文件夹下,创建电信189邮件发送工厂并命名为DianxinMailSender。记住,一定要在电信189邮件发…

部署loki,grafana 以及springcloud用法举例

文章目录 场景docker 部署grafanadocker-compose部署loki维护配置文件 local-config.yaml维护docker-compose.yml配置启动 grafana 添加loki数据源springcloud用法举例查看loki的explore,查看日志 场景 小公司缺少运维岗位,需要研发自己部署日志系统,elk…

非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 4

三十三、出入库管理 Header.vue导一下,RecordController加一个 //将入库数据和原有数据相加吧//新增PostMapping("/save")public Result save(RequestBody Record record) {return recordService.save(record) ? Result.success() : Result.fail();} GoodsManage.v…

Leetcode—1133. 最大唯一数【简单】Plus

2024每日刷题&#xff08;205&#xff09; Leetcode—1133. 最大唯一数 C 实现代码 class Solution { public:int largestUniqueNumber(vector<int>& nums) {constexpr int MAX 1000;vector<int> count(MAX 1, 0);for(int num: nums) {count[num];}for(int…

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…

GCC/G++ Centos离线安装

方式一&#xff08;推荐&#xff09; 官方地址&#xff1a;https://gcc.gnu.org/releases.html 镜像站点1&#xff1a;http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ 镜像站点2&#xff1a;https://vault.centos.org/7.5.1804/os/x86_64/Packages/ gcc &#xff1a…

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备,将结果存入Redis 中, key 值为

【GoLang】文件操作中perm参数的用法

我们在创建文件时&#xff0c; perm 参数主要用于设置新创建文件的权限&#xff0c;有时是0755&#xff0c;有时是0644。那你知道这些数字都代表什么意思吗&#xff1f; 让我们一个个数字拆开了说&#xff0c;现在从左到右给每个数字一个编号 编号1&#xff1a;通常是0&…

【Selenium】基于 WebDriverWait 爬取带有懒加载的静态页面

0x00 前言 朋友做标书&#xff0c;需要用到每日温度&#xff0c;他的老板让在这个网页手动复制做一个长期表出来&#xff1a;http://www.tianqihoubao.com/lishi/nanjing/month/202412.html 想着帮个忙&#xff0c;做个爬虫脚本吧&#xff0c;忽然发现这个页面很有意思&#xf…

fpga vga

因为 如果是减1的话是会少减1的 因为piel_x会延迟 timescale 1ns / 1psmodule vga(//系统侧input wire clk_sys ,input wire rst_n ,input wire clk ,//在顶层例化的pll产生的input wire locked ,/…

RNACOS:用Rust实现的Nacos服务

RNACOS是一个使用Rust语言开发的Nacos服务实现&#xff0c;它继承了Nacos的所有核心功能&#xff0c;并在此基础上进行了优化和改进。作为一个轻量级、快速、稳定且高性能的服务&#xff0c;RNACOS不仅包含了注册中心、配置中心和Web管理控制台的功能&#xff0c;还支持单机和集…

如何做好一份技术文档?-中小企实战运营和营销工作室博客

做好一份技术文档需要考虑文档的目的、受众、内容结构、表达清晰度等多个方面&#xff0c;以下是详细步骤&#xff1a; 一、明确文档目的和受众 确定目的 技术文档的目的可能多种多样&#xff0c;例如记录软件系统的功能和操作流程&#xff0c;便于用户使用&#xff1b;或是作为…

【Java语言】内部类

可以将一个类的定义在另一个类或者一个方法内部&#xff08;一般都是定义在类里面&#xff09;&#xff0c;在内部的类就称为内部类&#xff0c;在内部类的外部的类称为外部类。内部类可以在数据结构实现链表的结点等还有很多的地方使用它。然而内部类又分四种&#xff1a;静态…

DemoFusion 技术浅析(三):渐进式上采样

渐进式上采样模块&#xff08;Progressive Upsampling Module&#xff09; 是 DemoFusion 框架的核心组件之一&#xff0c;其主要目标是逐步提高图像分辨率&#xff0c;同时保留和增强图像细节。为了实现这一目标&#xff0c;该模块结合了多种上采样技术、扩散模型以及精细化的…

软件工程 测试

软件测试是根据从用户和系统规范收集的需求对软件进行评估。测试在软件开发生命周期的阶段级别或程序代码的模块级别进行。软件测试包括验证和确认。 软件验证 验证是检查软件是否满足用户要求的过程。它在 SDLC 结束时执行。如果软件符合它的要求&#xff0c;他就会被验证。…

在CANoe中Ping多播地址的若干问题

在CANoe中添加网络节点Dut,作为加入多播组的主机,配置TCP/IP Stack和网卡参数: IP地址:192.168.0.17MAC地址:02:00:00:00:00:17在CANoe中添加网络节点Tester,作为发送多播报文的数据源,配置TCP/IP Stack和网卡参数: IP地址:192.168.0.52MAC地址:02:00:00:00:00:52Dut…

基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机病床呼叫系统设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0095 1. 主要功能&#xff1a; 基于51单片机的病床呼叫系统proteus仿…

【机器学习算法】——逻辑回归

目录 逻辑回归理解损失函数代码练习1. 房屋价格与面积的关系2.基于学生特征的录取概率预测 逻辑回归理解 逻辑回归是用来二分类的&#xff01; 是在线性回归模型之后加了一个激活函数&#xff08;Sigmoid)将预测值归一化到【0~1】之间&#xff0c;变成概率值。 一般计算其中一…

2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别

2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别 一、背景 财务数据是指企业经营活动和财务结果的数据记录&#xff0c;反映了企业的财务状况 与经营成果。对行业、企业的财务数据进行分析&#xff0c;就是要评价其过去的经营业绩、 衡量现在的财务状况、预测…

【Android】View的工作流程——measure

1.View的工作流程入口 1.1DecorView被加载到Window中 看到这里你对Activity的构成有一定的了解&#xff0c;每个 Activity 都有一个与之关联的 Window 对象&#xff0c;而 DecorView 是这个 Window 的根视图。当DecorView被创建以及加载资源的时候&#xff0c;此时它的内容还…