时间:2024-05-04
张来君
(西南大学商贸学院 重庆市 402460)
手写数字识别是模式识别学科的一个传统研究领域。由于数字类别只有10个,其识别率较其他字符高,可用于验证新的理论。
王娜等人使用客观聚类算法对手写数字识别进行研究[1],解决了噪声以及图像结构敏感导致的识别准确度下降的问题,用简单易行的方法有效地提高了识别准确度;王爱丽等人将条件生成对抗网络应用于手写数字识别中[2],解决了训练样本不足时出现的训练不稳定、识别准确度较低等问题,为条件生成对抗网络在图像识别领域提供了参考;陈虹州基于SVM对手写数字识别进行了深入研究[3],解决了在小样本空间中传统学习方法出现的过拟合问题并深入分析了SVM的核函数以及分类策略对数字识别的影响,为其它研究人员提供了参考。支持向量机的出现为小容量样本集的统计识别提供了新的工具,其表现在某些方面更是优于已知的一些传统方法。
如图1所示,使用SVM实现手写数字识别的流程分为数据集划分、图像预处理、训练模型与测试、分类等步骤。
图1:基于SVM的手写数字识别流程图
支持向量机(support vector machines, SVM)是定义在特征空间使得分类间隔最大的线性分类器[4],其目标是找出能够实现上述要求的最优分类面。在线性可分的情况下,若给定的样本集有m个样本,即:
其中xi表示特征空间中的第i个样本,yi表示其分类结果。支持向量机的核心就是在样本集T的特征空间中找到一个最优分类面w*x+b=0。该分类面应该使得分类间隔最大,即距离该平面最近的样本(即支持向量)到该平面的距离最大。求解最优分类面的过程实质上是解决一个二次凸规划问题,即需要找到满足yi(w*x+b)≥1条件的w和b,还需要使分类间隔最大。在线性不可分的情况下,引入一个松弛项ξ,即满足yi(w*x+b)+ξ≥1条件的问题可以继续使用最优分类面进行近似的线性划分,这样便可得到广义的最优分类面;在非线性的情况下,则可以将其转化为某个高维空间的线性问题,然后再求最优分类面。但这种转换和求解通常比较复杂,不容易实现,所以SVM中又引入了一个非常重要的概念——核函数。核函数可以将样本空间映射到高维空间,并且不增加计算的复杂度。有了核函数的加入,支持向量机最终趋于完善。
MNIST是机器学习领域一个经典数据集[5],该数据集的每一个样本均为28×28像素的灰度手写数字图像。它主要分为两部分。一部分是包含六万张手写数字图片的训练集,另一部分是一万张的测试集。对数据集进行划分可以有效避免在训练过程中出现过拟合问题。
图像预处理主要是为了清除图像中的无用信息,保留关键信息。这样可以方便识别,同时也有利于改进图像特征抽取可靠性。对MNIST中的图像进行预处理主要包括归一化和二值化。归一化主要是对图像进行裁剪以及缩放,统一图像规格。二值化则是对图像数据进行灰度化处理,将灰度值映射到0-1的范围内,并对映射后的灰度值取值0或1,将图像用二值矩阵表示。
SVM的核函数以及分类策略的选择对识别准确度有着重要影响。本方案选用三种不同的核函数以及两种不同的分类策略分别训练出不同类型的SVM模型,并通过实验结果的比较挑选出最优的SVM模型。
目前较为常见的核函数有线性核函数、Sigmoid核函数、高斯核函数以及多项式核函数等[6]。本方案主要使用前三种核函数进行实验。由于支持向量机是一个二值分类器,主要针对二分类问题。所以要使SVM实现多分类,选择一种合适的分类策略是必需的。常用的分类策略有两种,分别是一对一策略(OVO)和一对多策略(OVR)。
因为三种核函数和两种分类策略共有六种组合,所以在训练模型时,通过调整核参数等措施分别训练六种不同类型的SVM模型,使各自的SVM模型都能够达到理想的识别准确度,并记录下各自的训练时间。之后再用训练好的SVM模型对测试数据集中的样本进行测试,并记录下各自的测试时间以及识别准确率。经过多次测试,求出SVM模型各自的平均准确率。通过综合比较,挑选出最优SVM模型。
本实验首先需要准备好训练数据。在对图像进行预处理之后,每张图像都转化为一个二值矩阵,再用numpy向量表示该二值矩阵。接着将每个类别下的所有实例都分别用一个numpy向量表示,同时记录每张图像所属的类别,最后将所有的numpy向量整合成一个矩阵。至此,就将MNIST中的所有图像都转换为一个灰度值二元化的矩阵。该二值矩阵的每一个行向量都是一张图像灰度值二元化的结果,矩阵的行向量的个数就是MNIST数据集图像的个数。其次就是构造SVM模型。通过调用sklearn库中的SVC函数来实现对SVM模型的构造。通过修改SVM函数中的kernel参数选择不同的核函数,比如线性核函数(linner),高斯核函数(rbf),以及sigmoid核函数(sigmoid)。通过修改decision_function_shape参数选择不同的分类策略,比如一对一策略(ovo)、一对多策略(ovr)。然后对不同的SVM模型分别进行训练。通过调整SVC函数中的惩罚系数、核函数系数等,使得不同类别SVM模型的识别准确度分别达到理想效果。并记录下各自的训练时间。再用训练好的SVM模型对测试集中的图像数据进行识别,分别记录每一类别数字的识别准确度。进行多次测试,记录每种SVM模型的平均识别准确率以及测试所花费的时间。通过对比分析,挑选出最优的SVM模型。最终使用最优的SVM模型对样本进行分类。
经过多次试验,得到的实验结果如图2、图3所示。
图2:不同SVM模型的训练时间和测试时间
图3:不同SVM模型的平均识别准确率
对比图2的数据可以得知,无论是采用OVO策略还是采用OVR策略,使用高斯核函数的SVM模型在训练以及测试上花费的时间均为最短,其次是线性核函数,sigmoid核函数最长。两种分类策略对SVM模型的影响相似,差别不大,但采用了OVO方法的SVM模型在训练和测试上花费的时间总体略小于采用了OVR方法的SVM模型。从图3可以看到采用相同的核函数而采用不同的分类策略的SVM模型的平均识别准确率一样。其中,采用了高斯核函数的SVM模型识别率最高,其次是线性核函数,最后是sigmoid核函数。造成以上情况发生的原因如下:
(1)线性核函数主要是针对线性可分问题,而数字的书写灵活多变、复杂多样,很难线性划分。因此使用线性核函数的SVM模型识别效果最差。
(2)OVO方法是在任意两个类之间寻找最优分类面,所以理论上需要训练N×(N-1)/2个二值分类器。而OVR方法只需训练N个分类器,所以一般情况下OVR的额外开销时间更少。当样本集数量偏大时,由于OVR分类器每次需要训练N-1个类的样本,而OVO分类器只需要训练两类样本,所以此时OVO训练时间有可能和OVR持平或者少于。
综上,对于数据集MNIS,使用高斯核函数或者sigmoid核函数的SVM模型识别效果总体较好,而使用线性核函数的效果最差。OVO方法和OVR方法产生的分类效果相近。
本文简单地介绍了支持向量机的基本原理,并使用SVM模型实现了对手写数字图像的识别。本文选用三种核函数以及两种分类策略构成的六种不同类型的SVM模型对数据集进行训练和测试,最终确定高斯核函数和sigmoid核函数比较适用于手写数字识别,而线性核函数则不适合。在样本容量不足够大时,一对一和一对多分类策略对SVM模型训练和测试时间的影响相似,几乎具有同等效果。可见,两种分类策略对SVM模型识别准确度的影响具有同等地位。采用高斯核函数的SVM模型的识别准确率虽然达到了97.7%,但并未达到理想识别准确度,仍有很大的提升空间。如何继续提高支持向量机识别准确率、减少误识率、缩短识别时间仍然是未来研究的重要课题。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!