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

发布于:2024-12-09 ⋅ 阅读:(267) ⋅ 点赞:(0)

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.0 0.9972 1.0000 0.9722 0.9859 0.0798
1.0 0.9889 0.9444 0.9444 0.9444 0.1669
2.0 1.0000 1.0000 1.0000 1.0000 0.1695
3.0 1.0000 1.0000 1.0000 1.0000 0.1866
4.0 0.9889 1.0000 0.8889 0.9412 0.1559
5.0 1.0000 1.0000 1.0000 1.0000 0.1699
6.0 0.9972 1.0000 0.9722 0.9859 0.1247
7.0 0.9944 0.9722 0.9722 0.9722 0.1504
8.0 0.9833 1.0000 0.8286 0.9062 0.1980
9.0 0.9944 1.0000 0.9444 0.9714 0.1918
平均值 0.9944 0.9917 0.9523 0.9707 0.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.0 0.9944 1.0000 0.9444 0.9714 0.0280 65.0
1.0 0.9750 0.9091 0.8333 0.8696 0.0070 65.0
2.0 1.0000 1.0000 1.0000 1.0000 0.0070 65.0
3.0 0.9806 0.9167 0.8919 0.9041 0.0070 65.0
4.0 0.9944 0.9474 1.0000 0.9730 0.0070 65.0
5.0 0.9972 1.0000 0.9730 0.9863 0.0067 65.0
6.0 0.9972 1.0000 0.9722 0.9859 0.0072 65.0
7.0 0.9889 0.9211 0.9722 0.9459 0.0080 65.0
8.0 0.9556 0.8519 0.6571 0.7419 0.0083 65.0
9.0 0.9944 1.0000 0.9444 0.9714 0.0068 65.0
平均值 0.9878 0.9546 0.9189 0.9350 0.0093 65
标准差 ±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.977777778 0.978322238 0.977694123 0.977759619 8.581076622

总结对比分析

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

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

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

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

表4 四种方法模型性能指标对比
方法 准确率 精确率 召回率 F1分数
KNN 0.9756 (±0.0114) 0.9758 (±0.0122) 0.9757 (±0.0101) 0.9751 (±0.0114)
SVM 0.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)
CNN 0.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在性能上更为突出,但需要平衡计算成本和实际需求。在具体的应用场景中,模型的选择应以实际需求为导向,既要关注模型的分类性能,也要考虑其实现复杂度和运行效率。通过对不同模型的优势和不足的综合评估,为手写数字识别任务提供更加高效和可靠的解决方案。

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


网站公告

今日签到

点亮在社区的每一天
去签到