【机器学习】基于SVM、逻辑回归和CNN的手写数字识别:性能对比与应用分析
本文探讨了在MNIST手写数字识别任务中,支持向量机(SVM)、逻辑回归和卷积神经网络(CNN)三种算法的应用及其性能表现。通过使用一对多(One-vs-Rest)策略,分别构建了10个二分类器对每种数字进行分类。实验比较了不同模型在准确率、精确率、召回率、F1分数等性能指标上的表现,并分析了训练时间和稳定性差异。结果显示,SVM在准确率和精确率上表现最佳,CNN在召回率和F1分数上更具优势,而逻
基于SVM、逻辑回归和CNN的手写数字识别:性能对比与应用分析
1 基于SVM对手写数字识别
在使用SVM方法对手写数字进行识别的时候,我采用了一对多(One-vs-Rest)的策略,即针对每个数字都建立一个模型,用来识别数字是不是目标数字。具体实现流程是:
首先采用与KNN相同的数据集(有关内容可以参考我的上一篇文章链接: 基于KNN对手写数字进行识别),并且进行对数据进行标准化、扁平化处理;然后按照8:2的比例对数据集进行划分;接着,为每个数字(0-9)训练一个二分类的SVM模型,每个模型将目标数字作为正类,其他所有数字作为负类,并且使用RBF核函数以处理非线性分类问题;然后对每个数字分别训练SVM分类器,记录每个模型的训练时间和性能指标,并且使用交叉验证来评估模型的稳定性;最后,对输入图像,使用所有10个SVM模型进行预测,综合各个模型的预测概率,选择置信度最高的类别作为最终预测结果。
如图1所示,展示的是SVM模型训练识别每个数字的训练时间。可以发现,模型在识别数字0上耗时最短,在识别数字8上耗时最长。这与数据集的质量、数字特征、数据分布的离散程度等各方面都有关系。
数字 | 准确率 | 精确率 | 召回率 | 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优化器进行模型训练。训练过程中,对每个数字分别训练二分类器,使用交叉验证评估模型性能,同时记录训练时间和各项性能指标。在预测阶段,使用所有训练好的二分类器对输入图像进行预测,获取每个分类器的预测概率,并选择概率最高的类别作为最终预测结果。
总体而言,逻辑回归的训练时间较短,适合快速部署和资源受限的场景。
数字 | 准确率 | 精确率 | 召回率 | 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]。
根据图3发现,随着轮数的增加,模型训练损失值逐渐下降并趋于稳定,准确率在98%左右浮动。表3显示,CNN模型在测试集上达到了97.85%的准确率,虽然训练时间相对较长,但模型表现出了良好的特征提取能力和分类性能。这种基于CNN的方法能够自动学习图像的层次特征,无需手动设计特征提取器,展现出深度学习方法在图像识别任务上的优势。
准确率 | 精确率 | 召回率 | F1分数 | 训练时间(秒) |
---|---|---|---|---|
0.977777778 | 0.978322238 | 0.977694123 | 0.977759619 | 8.581076622 |
总结对比分析
通过前面1-3小结,我们使用三种方法对手写数字数据集进行了训练,接下来将从训练耗时、模型最终的准确率、精确率、召回率、F1分数,多维度分析与使用KNN的方法差异性,综合评判KNN在手写数字识别上的表现。
如图4所示,展示了四种方法模型训练的耗时。可以直观的看出,在面对同样的数据时,CNN的训练耗时最长,KNN训练耗时次之,逻辑回归的训练耗时最短。根据这个图片说明KNN可能并不是最好的选择。
方法 | 准确率 | 精确率 | 召回率 | 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在性能上更为突出,但需要平衡计算成本和实际需求。在具体的应用场景中,模型的选择应以实际需求为导向,既要关注模型的分类性能,也要考虑其实现复杂度和运行效率。通过对不同模型的优势和不足的综合评估,为手写数字识别任务提供更加高效和可靠的解决方案。
本文内容主要基于我的学习和实验过程整理而成。如果文中存在任何错误、不足或模糊的地方,欢迎您批评指正。同时,如果您有任何疑问或感兴趣的内容,随时与我交流探讨,一起进步!
更多推荐
所有评论(0)