董庆伟
(闽南理工学院信息管理学院,福建 石狮 362700)
近年来,深度学习技术由于其优良的性能受到了各个领域人们的广泛关注[1]。在很多数据分类问题中,往往得到的不是图像、语音等类型的原始数据,而是每一个样本的已经提取好的特征向量[2]。因此,对当输入数据是特征向量而不是原始的图像、语音数据的情况下深度卷积神经网络的性能表现进行研究就非常有意义。例如,李文宝等人采集5类山核桃样本,利用数据增广的方式,得到包含15000个图像信息的数据集,构建深度学习模型准确度达到99.5%[3]。此外,可以通过改变骨干网络、增加视觉感受野、特征融合、级联卷积神经网络和模型的训练方式提升小目标检测精度[4]。目前,深度学习主要用于解决视频、图像、语音和文本这几种数据类型相关的问题[5],很少关注面向结构化数据的深度学习技术的研究。基于Keras深度学习框架[6],构造一种面向分类问题的深度卷积神经网络模型,在5个UCI数据集上(Wine数据集、HTRU2数据集、seeds数据集、ILPD数据集和Blood Transfusion数据集)分析所建立的深度卷积神经网络的性能,并运用Python语言进行仿真,将结果与支持向量机方法的结果进行比较分析。
支持向量机是一种起步较晚的分类器。支持向量机有非常好的学习能力。且它的计算量复杂度不高,训练学习到的结果易于解释。起初支持向量机是用在二分类问题上的,现在已经发展应用与多分类问题上[7]。SVM的实现方法有很多种,使用较多的一种实现方法为序列最小优化算法。同时,支持向量机有一个概念叫做核函数,它可以将当前的训练模型扩展到更多的数据集上,所以支持向量机的另一个优点就是可以直接使用现成的分类器。支持向量机的思想就是通过建立一个超平面,用来作为决策平面,当数据点距离决策平面的距离越远,说明分类效果越可靠[6]。那么构建支持向量机的重点就是寻求最大间隔。
卷积神经网络的特点就是层级结构,卷积网络的层级结构有数据输入层(Input layer),卷积计算层(CONV layer),激励层(ReLU layer),池化层(Pooling layer),全连接层(FC layer)[3]。
如图1所示,为CNN的经典网络,经过数据输入层输入图像大小为128*128,经过第一层卷积层,第一层的神经元大小为124*124,共5个神经元。其中每次移动步伐为1个像素,第一层输出为62*62。即5张Feature Map,每一个大小为62*62。第一层的输入作为下一层的输入,下一层为池化层,用的矩阵对输入进行降采样,得到输出。然后经过第二个卷积层,局部感受野仍然为,局部平移距离仍为1像素,输出大小为58*58;再经过一个池化层进行降采样输出大小降为29*29。第三层和第四层的卷积层的神经元大小分别取和,当到达第四层卷积层时输出大小变为13*13。在经过全连接层,把每个的输出连接成为一个8的向量,输入该向量,经过全连接层得到输出。在这个网络结构中通过这样一层一层的定义卷积神经网络的每一层,就完成了卷积神经网络的模型构造。通常卷积神经网络的网络结构大而深,所以有较高的学习能力与识别能力。对5个UCI数据集用卷积神经网络进行处理,所以构造的模型因为数据的差异参数不同,不断的调整参数达到针对每一个数据集最优的分类性能。
图1 卷积神经网络结构
所建的CNN模型算法主要包括数据处理阶段、模型构造与训练阶段、调试阶段。在数据处理阶段,首先收集结构化数据集,对数据进行预处理,将结构化数据转成矩阵数据集,再通过矩阵运算调整数据大小,然后把矩阵转化为图片数据集保存。把处理好的数据集分为训练集和测试集待用;在模型构造与训练过程,对卷积神经网络的层级结构以及参数进行构造与设定,把训练集作为构造好的卷积神经网络的输入,生成对数据集的分类模型;在测试阶段,用测试集对生成的模型进行评估,不断调整参数对生成模型进行调整,知道模型达到好的性能,对生成模型进行保存。
如图2所示,构建深度学习处理结构化数据算法,主要包括数据转化、卷积神经网络、分类器模型构造三个主要模块。
图2 CNN模型算法整体流程图
为了探索深度学习技术在结构化数据方面的应用,从UCI Machine Learning Repository 网站下载了五个UCI数据集(Wine数据集、HTRU2数据集、seeds数据集、ILPD数据集和Blood Transfusion数据集)。数据集的原始数据为结构化向量形式,将原始的结构化数据集转化图像集,如图3所示。
图3 处理后的部分图像特征集
每个数据集选取70%的数据作为训练集,30%的数据作为测试集。如Wine数据集,共有178个数据,则选取125张作为训练集,53张作为测试集。HTRU2数据集共有17898个数据,选取12528张作为训练集,5370张作为测试集。其中在模型训练过程中设置好对应的百分率,就可自动划分训练集与测试集,即每一次的训练集与测试集都不一样,这样加大实验结果的真实性。
收集到的5个数据集按以下步骤进行测试:1)将原始数据进行处理,处理转换为对应的图像数据集,并分为训练集与测试集。2)构造卷积神经网络,并用训练集训练卷积神经模型。3)调整参数与模型的层级结构,使得性能达到最优。4)对比SVM的实验结果,对模型进行分析。利用数据集的训练集对构造的卷积神经网络进行训练,用测试集对构造的CNN模型进行测试,结果如表1所示。为了分析CNN模型的性能,分别利用SVM算法对五个数据集进行分类测试,结果见表1。
从表1可以看出,所用的CNN模型的准确率均高于SVM算法的分类准确率。其中,对于seeds数据集,虽然准确率仅为44.05%,但可以看到SVM的准确率也仅为38.09%,这说明可能数据本身的特征不明显。其余四组数据集的准确率均大于70%,说明本文所构建CNN模型分类性能较好。
表1 CNN与SVM实验结果对比
基于Keras深度学习框架,实现了构造一种面向分类问题的深度卷积神经网络模型,并测试了该模型的应用性,在五个结构化数据集上测试了该模型的准确率,并且与常用的SVM分类算法的分类准确率做了对比,其分类效果较好。结论如下:
(1)在将原始结构化数据集转换到图像过程中,对数据集的处理过程影响模型的分类效果。
(2)数据本身的特征对于分类结果具有比较大的影响,数据特征差异大分类准确率更高,反之则准确率低;
(3)所用的CNN模型的准确率均高于SVM算法的分类准确率。