基于深度自编码网络的软件缺陷预测方法与流程

文档序号:15271448发布日期:2018-08-28 22:28阅读:141来源:国知局
本发明涉及软件安全领域,特别涉及一种基于深度自编码网络的软件缺陷预测方法。
背景技术
:软件缺陷是指计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。软件缺陷产生主要是由软件本身的特点和开发过程决定的,如何控制软件缺陷对于生产高质量的软件是非常关键的。软件缺陷预测通过对软件或软件度量相关数据进行统计或数学分析,预测软件中缺陷的分布情况和可能的数量。缺陷预测技术通过找到有出错倾向的实体并给出相应的解决方案,可以帮助管理人员和开发人员重点关注容易出现缺陷的实体,降低了软件开发和维护的成本,提高了软件可靠性。近年来关于缺陷预测的研究主要关注在两个方面,其一是缺陷历史,其二是软件源代码本身。nagappan等人通过研究发现如果一个实体在过去几个版本中很容易引进缺陷,那么这个实体在未来也很容易出现缺陷。他们将历史缺陷信息作为选择度量元的一个依据,然后用选择的度量元来进行缺陷组件的预测研究。软件度量元(软件特征)是影响软件缺陷预测精度的重要因素。在软件缺陷预测过程中,往往将不同数据源收集到的数据整合成数据集,数据不可避免地存在大量冗余特征,这些冗余特征会干扰到模型算法的学习效果,影响了缺陷预测准确性。特征提取是软件缺陷预测的重要步骤,其目的是从特征集合中选择满足一定评价准则的最优特征子集,通过剔除不相关特征或冗余特征,实现降维。特征提取方法主要通过线性或非线性的方法对原始特征进行组合,将高维数据映射到低维空间,常见的方法有:主成分分析pca、拉普拉斯特征映射方法le、局部保持映射lpp等。特征选择是根据某些评价准则从原始样本的特征中选择使得评价准则最优的一个子集。一般分为过滤式[7]、封装式[8]和嵌入式。liu等人提出了基于pca-isvm的软件缺陷预测模型,有效消除了软件数据中的冗余,获得了最优支持向量机参数,提升了软件缺陷预测模型性能。上述的特征降维方法都属于浅层模型,只能从大量的数据中提取或选择一些简单的特征,不能得到具有复杂结构的特征。技术实现要素:针对现有技术存在的上述问题,本发明的目的是提供一种基于深度自编码网络的软件缺陷预测方法。为实现上述目的,本发明采用如下技术方案:基于深度自编码网络的软件缺陷预测方法,其特征在于:具体包括如下步骤:s1:通过版本控制工具收集待预测软件的源代码文件;s2:所述s1得到的源代码文件由i个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合x,x={x1,1,x2,2,...xi,j,...xi,j}(1);xij表示第j个度量元在第i个模块上的度量元值,i表示待预测软件中源代码文件的总数,j表示提取的度量元的总数;每个模块对应一个度量元向量,定义xi表示第i个模块的度量元向量,xi={xij|i=1,2,3...i,j=1,2,3...j};s3:对步骤s2得到集合x进行预处理,具体步骤如下:遍历集合x中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:1)令i=1;2)令j=1;3)判断xij是否有值:如没有,则使用第j个度量元在i个模块上的度量元值的平均值进行填充;如有,则令j=j+1,并执行下一步;4)如果j≤j,则返回3);否则令i=i+1,并执行下一步;5)如果i≤i,则返回2);否则执行下一步;6)输出新集合x′:x'={x'1,1,x'2,2,...x'i,j,...x'i,j}(2);x′i,j表示在新集合x′中第j个度量元在第i个模块上的度量元值;s4:采样;s4a:定义mj为新集合x′中,第j个度量元在i个模块上度量元值的中位数;确定xij>mj的数量,i=1,2,...i,j=1,2,...j;i)令i=1;ii)令j=1;iii)令ki=0;iv)如果xij≥mj,则ki=ki+1,并令j=j+1,执行下一步;否则,令j=j+1,并执行下一步;v)如果j≤j,则返回ⅳ);否则令i=i+1,并执行下一步;vi)如果i≤i,则返回ⅱ);否则执行下一步;vii)输出ki;s4b:ki值对应第i个模块,i=1,2…i,根据ki值从大到小的顺序对ki值对应的模块进行排序;s4c:选取所述步骤s4b排序后,处于前n位置的n个模块构成候选集,再从候选集中随机选取n个模块构成采样结果集,n>n;所述采样结果集x′n表示为:x'n={x'1,1,x'2,2,...x'u,j,...x'n,j}(3);x'u,j表示在采样结果集x'n中第j个度量元在第u个模块上的度量元值;s4d:使用z-core法对s4c输出的采样结果集x′n中的所有度量元值进行标准化得到标准化后的采样结果集x”n,使的采样结果集x'n中的所有度量元值都分布在0~1之间;所述标准化后的采样结果集x″n记为:x″n={x″1,1,x″2,2,...x″u,j,...x″n,j}(4);x″u,j表示在标准化后的采样结果集x″n中第j个度量元在第u个模块上的度量元值;s5:深度自编码网络构建预测模型:s5a:设深度自编码网络网络层数为q层,q为自然数;s5b:令q=1,预设误差阈值d0;s5c:令u=1;预设权重矩阵wq、偏置向量bq和b'q的初始值,其中s5d:编码阶段:将x″u,j|j=1,2,...j的值带入如公式(5)所述的编码函数进行编码:其中,f(x)采用sigmoid函数,θ=1,2,3….mq,mq为自然数;s5e:解码阶段:通过解码函数对步骤s5d编码后的数据进行解码重构得到输出其中,f(x)仍然是sigmoid函数;s5f:令u=u+1;s5g:如u≤n,返回步骤s5d,否则执行下一步;s5h:通过公式(8)计算平均误差其中,l为误差函数,s5i:如果则执行下一步;否则令:并返回步骤s5d,其中α为学习率,是一个经验值;s5j:输出wq、bq和b'q;s5k:将x″u,j|u=1,2,...n,j=1,2,...j的值带入公式(9)所述的编码函数进行编码:其中,x=x″u,js5l:令j=mq,并且将采样结果集x″n中的所有元素的值进行对应的更新,u=1,2,...n;s5m:令q=q+1;s5n:如果q≤q,则返回步骤s5c;否则执行下一步;s5o:输出s5p:根据所述步骤s5o输出的所对应的模块是否存在缺陷,给该模块打上有缺陷模块的分类标签或无缺陷模块的分类标签,分类标签y∈{±1},打上分类标签y=1的模块表示为有缺陷模块,打上分类标签y=-1的模块表示为无缺陷模块;标记后所有模块构成标签样本集,记为q=q,其中,yu表示第u个模块的标签;s5q:将所述标签样本集作为训练集作为输入现有的分类器中进行训练,得到缺陷预测模型;s6:测试分类:s6a:获取待预测软件的待测试版本的源代码文件;s6b:所述s6a得到的源代码文件由i’个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合c,c={c1,1,c2,2,...ci,j,...ci,j'}(11);cij表示第j个度量元在第i个模块上的度量元值,i’表示待预测软件中待测试版本源代码文件的总数,j’表示提取的度量元的总数;s6c:对步骤s6b得到集合c进行预处理,具体步骤如下:遍历集合c中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:a)令i=1;b)令j=1;c)判断cij是否有值:如没有,则使用第j个度量元在i’个模块上的度量元值的平均值进行填充;如有,则令j=j+1,并执行下一步;d)如果j≤j’,则返回步骤c);否则令i=i+1,并执行下一步;e)如果i≤i’,则返回步骤bf)否则执行下一步;g)输出新集合c':c'={c'1,1,c'2,2,...c'i,j,...c'i',j'}(12);c′i,j表示在新集合c'中第j个度量元在第i个模块上的度量元值;h)使用z-core法对步骤ⅵ)输出的新集合c'中的所有度量元值进行标准化得到标准化后的新集合c”,使的新集合c'中的所有度量元值都分布在0~1之间;所述标准化后的新集合c”记为:c″={c″1,1,c″2,2,...c″i,j,...c″i',j'}(14);s6d:将标准s6c输出的标准化后的新集合c”输入深度自编码网络构;a)令q=1;b)将c″i,j|i=1,2,...i',j=1,2,...j'值带入公式(15)所述的编码函数进行编码:其中,x=c″i,j|i=1,2,...i',j=1,2,...j'c)令j’=mq,并且将新集合c”中的所有元素的值进行对应的更新,i=1,2,...i′;d)令q=q+1;e)如果q≤q,则返回步骤b);否则执行下一步;f)输出s6e:将步骤s6d得到的输入步骤s5q所述的缺陷预测模型中进行计算,输出0或1的概率值,如果输出的概率值为1表示该待测试版本有缺陷,如果输出的概率值为0表示该待测试版本无缺陷。相对于现有技术,本发明具有如下优点:本发明提供的方法简单有效,实验结果表明在数据维度较大,并且冗余特征较多的数据集中,效果非常明显,优于现有的基于常用的特征提取方法的软件缺陷预测模型,同时也证明了深度学习对高维数据强大学习能力能用在软件缺陷预测中。附图说明图1为度量元值在缺陷数据和非缺陷数据中分布。图2为采样流程图。图3为深度自编码网络训练过程图。图4为深度自编码网络模型。图5为本发明方法测试实验框架图。具体实施方式下面对本发明作进一步详细说明。本发明方法针对软件缺陷预测过程中遇到的高维特征提取问题,结合深度学习对数据特征优化学习能力,提出了一种基于深度自编码网络的软件缺陷预测方法。该方法分为两个阶段,特征提取阶段和机器学习阶段。第一阶段使用深度自编码网络进行数据特征提取,第二阶段用提取的特征和与其对应的标签训练分类器进行分类,典型的分类方法包括逻辑回归、支持向量机、人工神经网络、贝叶斯方法,得到最终的软件缺陷预测模型。基于深度自编码网络的软件缺陷预测方法,具体包括如下步骤:s1:通过版本控制工具收集待预测软件的源代码文件;为了方便项目成员协作和代码的管理,目前大多数项目源代码都托管在代码仓库中,开发人员通过版本控制工具获得各版本源代码。当需要预测这一类项目数据时,可以通过版本控制工具收集相关数据,比如ant项目使用git版本控制工具,mylyn项目可以使用svn和git。这需要根据项目数据托管平台的类型来选择相应的工具。工具的使用方法如下:git工具:选择一个文件目录,在gitbrash窗口输入gitclone“版本库地址”,输入用户名密码即可下载源代码到本地磁盘;svn工具:选择一个文件目录,使用svncheckout命令,输入版本库地址,用户名和密码,即可导出数据。实质上该步骤是通过版本控制工具收集获取待预测软件历史版本的源代码文件。s2:所述s1得到的源代码文件由i个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合x,x={x1,1,x2,2,...xi,j,...xi,j}(1);xij表示第j个度量元在第i个模块上的度量元值,i表示待预测软件中源代码文件的总数,j表示提取的度量元的总数;每个模块对应一个度量元向量,定义xi表示第i个模块的度量元向量,xi={xij|i=1,2,3...i,j=1,2,3...j}。s3:对步骤s2得到集合x进行预处理,具体步骤如下:遍历集合x中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:1)令i=1;2)令j=1;3)判断xij是否有值:如没有,则使用第j个度量元在i个模块上的度量元值的平均值进行填充;如有,则令j=j+1,并执行下一步;4)如果j≤j,则返回3);否则令i=i+1,并执行下一步;5)如果i≤i,则返回2);否则执行下一步;6)输出新集合x′:x'={x'1,1,x'2,2,...x'i,j,...x'i,j}(2);x′i,j表示在新集合x′中第j个度量元在第i个模块上的度量元值。s4:采样;s4a:定义mj为新集合x′中,第j个度量元在i个模块上度量元值的中位数;确定xij>mj的数量,i=1,2,...i,j=1,2,...j;i)令i=1;ii)令j=1;iii)令ki=0;iv)如果xij≥mj,则ki=ki+1,并令j=j+1,执行下一步;否则,令j=j+1,并执行下一步;v)如果j≤j,则返回ⅳ);否则令i=i+1,并执行下一步;vi)如果i≤i,则返回ⅱ);否则执行下一步;vii)输出ki;s4b:ki值对应第i个模块,i=1,2…i,根据ki值从大到小的顺序对ki值对应的模块进行排序;s4c:选取所述步骤s4b排序后,处于前n位置的n个模块构成候选集,再从候选集中随机选取n个模块构成采样结果集,n>n;所述采样结果集x′n表示为:x'n={x'1,1,x'2,2,...x'u,j,...x'n,j}(3);x'u,j表示在采样结果集x'n中第j个度量元在第u个模块上的度量元值;s4d:使用z-core法对s4c输出的采样结果集x′n中的所有度量元值进行标准化得到标准化后的采样结果集x″n,使的采样结果集x'n中的所有度量元值都分布在0~1之间;对采样结果集x'n进行z-score标准化,得到标准化后的采样结果集x″n,使x″u,j∈[0,1]j;所述标准化后的采样结果集x″n记为:x″n={x″1,1,x″2,2,...x″u,j,...x″n,j}(4);x″u,j表示在标准化后的采样结果集x″n中第j个度量元在第u个模块上的度量元值;为了获得最佳预测性能,对所有度量元值进行预处理,从而尽可能的减少属性之间数值差距过大对预测模型的影响。缺陷预测数据分布极不平衡,只有很少一部分数据存在缺陷。如果采用随机划分数据集的方式,极有可能出现训练数据集中含有极少缺陷数据甚至没有的情况。采用这样的数据作为训练集很难训练出较好的预测模型,本发明基于源代码度量元和缺陷潜在关联提出无监督的采样方法。因为度量元复杂度越高,度量元的值越大,其存在缺陷的可能性越大。如图1所示,本发明通过分析非缺陷数据和缺陷数据中度量元值得盒图发现,大多数情况下,存在缺陷的模块的度量元值高于不含缺陷模块的度量元值。通过采用步骤可以尽可能地避免训练集中缺陷数据太少,导致训练模型性能不佳的问题。属性中位数可以作为阈值衡量属性的复杂度。本发明提出一个无监督样本采样方法,该方法确保选择的样本中缺陷率不会过低,从而提升模型的性能,图2给出了一个具体的采用过程图示。如图2所示,x1-x6表示软件的模块(样本)的度量元值,i1-i7表示软件模块(样本集),假设需要采样的带标签样本数量为n,该采样方法主要分为以下五步:1)计算每个度量元值在所有模块中值的中位数,例如,对于属性x1,在所有模块中的值分别为2,3,0,1,2,1,3,这些数值的中位数为2。采用该方法依次为所有度量元值计算中位数。2)对于每个模块(样本),每个度量元值跟该度量元值的中位数进行比较,如果大,数量加1。例如,样本i1,属性x3和x5的值大于其中位数,3大于2,6大于4,所以样本i1的高属性值数量为2。3)根据高属性值数量对样本进行排序。4)选择排序结果前2*n个样本作为候选集。5)从候选集中随机选择n个样本作为最终的采样结果。s5:深度自编码网络构建预测模型:采用编码函数对每个样本进行编码,其中一个样本即代表一个模块,采用编码函数对每个样本进行编码,其实就是对表达样本的j个度量元进行编码,具体通过编码函数hθ=f(x)(hθ∈[0,1]m)进行,其中m为自然数,表示j个度量元经过编码后,得到编码值的个数,即代表样本的j个度量元,经过编码函数编码后,变成了m个,并且m<j,这样降低了维度,从而减少了计算量。s5:深度自编码网络构建预测模型:s5a:设深度自编码网络网络层数为q层,q为自然数;s5b:令q=1,预设误差阈值d0;s5c:令u=1;预设权重矩阵wq、偏置向量bq和b'q的初始值,其中s5d:编码阶段:将x″u,j|j=1,2,...j的值带入如公式(5)所述的编码函数进行编码:其中,f(x)采用sigmoid函数,θ=1,2,3….mq,mq为自然数;s5e:解码阶段:通过解码函数对步骤s5d编码后的数据进行解码重构得到输出其中,f(x)仍然是sigmoid函数;s5f:令u=u+1;s5g:如u≤n,返回步骤s5d,否则执行下一步;s5h:通过公式(8)计算平均误差其中,l为误差函数,s5i:如果则执行下一步;否则令:并返回步骤s5d,其中α为经验值;s5j:输出wq、bq和b'q;s5k:将x″u,j|u=1,2,...n,j=1,2,...j的值带入公式(9)所述的编码函数进行编码:其中,x=x″u,j;s5l:令j=mq,并且将采样结果集x″n中的所有元素的值进行对应的更新,u=1,2,...n;s5m:令q=q+1;s5n:如果q≤q,则返回步骤s5c;否则执行下一步;s5o:输出s5p:根据所述步骤s5o输出的所对应的模块是否存在缺陷,给该模块打上有缺陷模块的分类标签或无缺陷模块的分类标签,分类标签y∈{±1},打上分类标签y=1的模块表示为有缺陷模块,打上分类标签y=-1的模块表示为无缺陷模块;标记后所有模块构成标签样本集,记为q=q,其中,yu表示第u个模块的标签;s5q:将所述标签样本集作为训练集作为输入现有的分类器中(现有的分类器比如:softmax,支持向量机svm,逻辑回归lg)进行训练,得到缺陷预测模型;s6:测试分类:s6a:获取待预测软件的待测试版本的源代码文件;s6b:所述s6a得到的源代码文件由i’个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合c,c={c1,1,c2,2,...ci,j,...ci,j'}(11);cij表示第j个度量元在第i个模块上的度量元值,i’表示待预测软件中待测试版本源代码文件的总数,j’表示提取的度量元的总数;s6c:对步骤s6b得到集合c进行预处理,具体步骤如下:遍历集合c中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:i)令i=1;j)令j=1;k)判断cij是否有值:如没有,则使用第j个度量元在i’个模块上的度量元值的平均值进行填充;如有,则令j=j+1,并执行下一步;l)如果j≤j’,则返回步骤c);否则令i=i+1,并执行下一步;m)如果i≤i’,则返回步骤bn)否则执行下一步;o)输出新集合c':c'={c'1,1,c'2,2,...c'i,j,...c'i',j'}(12);c′i,j表示在新集合c'中第j个度量元在第i个模块上的度量元值;p)使用z-core法对步骤ⅵ)输出的新集合c'中的所有度量元值进行标准化得到标准化后的新集合c”,使的新集合c'中的所有度量元值都分布在0~1之间;所述标准化后的新集合c”记为:c″={c″1,1,c″2,2,...c″i,j,...c″i',j'}(14);s6d:将标准s6c输出的标准化后的新集合c”输入深度自编码网络构;g)令q=1;h)将c″i,j|i=1,2,...i',j=1,2,...j'值带入公式(15)所述的编码函数进行编码:其中,x=c″i,j|i=1,2,...i',j=1,2,...j'i)令j’=mq,并且将新集合c″中的所有元素的值进行对应的更新,i=1,2,...i′;j)令q=q+1;k)如果q≤q,则返回步骤b);否则执行下一步;l)输出s6e:将步骤s6d得到的输入步骤s5q所述的缺陷预测模型中进行计算,输出0或1的概率值,如果输出的概率值为1表示该待测试版本有缺陷,如果输出的概率值为0表示该待测试版本无缺陷。单层的自编码网络虽然已经具备一定的特征提取能力,但是这样提取的特征还不足以使得分类器具有很好的分类性能。深度学习是模拟人的神经系统对信息的分级处理过程,这是一个不断迭代,不断抽象的过程。高层特征是底层特征的组合,特征表示也更抽象,更能表现语义或者意图。而抽象层面越高,存在的冗余信息就越少,就越利于分类。深度自编码网络是由多个单层自动编码器组成的神经网络,前一个自动编码器的中间层作为下一个自动编码器的输入,采用逐层贪婪训练法进行训练,获取最终的深度自编码网络参数。深度自编码网络训练过程如图3。1)第一层自动编码器的输入是经过z-score标准化的数据样本的度量元的值(x1,x2……xn),x∈[0,1]n。按照上述单层自动编码的训练方式训练第一层自动编码器,得到第一层自动编码器的初始网络参数,然后将第一层自动编码器的中间层作为输入传入。2)第二层自动编码器,以同样的无监督方法进行训练,得到该层的网络参数。在多层自动编码器进行网络参数初始化之后,在顶层添加一个分类器,然后加上每个数据样本对应的标签(有缺陷或无缺陷),用有监督学习的方法对整个网络进行训练,例如,图3是一个包含2层自动编码器的深度自编码网络的训练过程。3)最后将输入层和中间的特征层全部连接起来,然后连接上分类器,得到最终的深度自编码网络模型如图4。如图4,这是一个包含两个中间特征层的深度自编码网络结构,样本的输入是6个度量元值,利用深度自编码网络,最后的特征向量降为三维,把这三个最终的特征加上对应的标签,传入分类器,就可以对分类器进行训练。用所有的训练集训练好模型后,就可以用这个最终的深度自编码网络模型进行软件缺陷预测,将测试样本以特征向量的形式作为输入,最后会得到y=0(无缺陷)和y=1(有缺陷)的概率值。概率值较大的作为最终的预测结果。本发明的预测方法与现有预测方法的比对:实验数据集实验数据集来自几个常用的开源项目,包括:nasa,promise库中的eclipse项目,以及netgene库中的lucene数据集。nasa数据集的度量元主要包括halstead复杂度,mccabe环路复杂度[33]以及代码行数,eclipse项目数据集主要从代码复杂度和抽象语法树方面设计度量元,lucene数据集主要包括network和changegenealogy度量元,是经过人工验证的去噪后的数据集。表1统计了数据集具体信息。数据集的特征数量包括了少量(21),中等(155),大量(465)三个级别。表1数据集数据集来源特征数实例数缺陷实例数缺陷率kc1nasa2121093269.8%pc1nasa211109776.9%eclipse2.0promise155692797514.1%eclipse2.1promise155788885410.8%eclipse3.0promise15510593156814.8%lucenenetgene465167134610.7%实验在表1所示的数据集中采用10折交叉法[35]验证。将数据集平均分成十份,轮流将其中九份作为训练集,一份作为测试集进行,十字交叉法是在软件工程研究中一种非常广泛评估方法。评估指标验证提出方法有效性的性能评估采用目前主流的四个评价指标:查全率(recall)、查准率(precision)、f1score、auc。这些性能指标基于表2的混淆矩阵。表2混淆矩阵预测为有缺陷预测为无缺陷实际有缺陷tp(truepositive)fp(falsepositive)实际无缺陷tn(truenegative)fn(falsenegative)查全率,指正确预测的缺陷模块占真实所有缺陷模块的比例,计算公式如(a):查准率,指正确预测的缺陷模块占预测为缺陷的所有模块的比例,计算公式如(b):f1-score为查全率和查准率的调和平均数,综合了查全率和查准率的结果,可以综合评价软件缺陷模型的性能,计算公式如(c):auc(areaunderroccurve),基于roc曲线,综合考虑了不同的分类阈值,以此来评估软件缺陷预测模型的性能。适用于评估分类不平衡的情况下软件缺陷模型。本实验采用的数据集缺陷率最高的数据集为14.8%,典型的数据不平衡数据。结果与分析本发明方法中,设置采样率为u=0.4,采用十折交叉验证法,重复实验20次,取20次实验结果的平均值作为最终实验结果。分类器采样四种常用的分类算法,分别是softmax、支持向量机(svm)]和逻辑回归(lg)。本发明方法用于对比的基准方法包括三种:(1)不使用任何特征提取方法,直接使用原始数据集训练缺陷预测模型。(2)使用常见的特征提取方法pca提取特征,然后训练缺陷预测模型。(3)使用一种混合的特征选择方法hfs提取特征,然后训练缺陷预测模型。主成分分析法pca是一种常见的特征提取算法,目的是通过线性变换寻找一个能够保留样本差异性的低维投影空间,使得少量主成分包含大量信息。具体实现参照文献[4]。特征选择方法hfs是一种混合了特征子集评估器和特征排序评估器的特征选择方法,能够提升特征质量,达到优于一般特征选择方法的预测性能。本发明方法测试实验框架如图5所示。相对于不使用降维方法的基准软件缺陷预测模型,本文提出的基于深度自编码网络的缺陷预测模型提升性能,并且对不同的分类算法具有普遍性。实验采用表1中的6个数据集进行实验,基准模型(basic)是指不采用特征提取方法直接分类的方法,与本发明提出的基于深度自编码网络的软件缺陷预测模型(简称da)在使用三种不同分类器softmax、svm[21]、lg的情况下进行对比实验,实验结果如表3-5,字体下划线代表结果更优的数值。表3分类器softmax为下和基准模型的对比结果表4分类器为svm下和基准模型的对比结果表3-5的实验结果可以看出,在具有中等数量度量元的eclipse数据集和具有大量度量元的lucene数据集在本发明方法的预测性能在三种分类器中都要远好于基准模型,这四个数据集采用softmax作为分类器的情况下,da相对于基准模型f1-score平均值提升了118%,auc平均值提升了28.5%,在svm作为分类器的情况下,da相对于基准模型f1-score平均值提升了88.6%,auc平均值提升了6%,在lg作为分类器的情况下,da相对于基准模型f1-score平均值提升了61.7%,auc平均值提升了12.5%,可以看出性能提升十分明显,因为其中含有冗余信息,通过本发明的深度自编码网络能够提取到具有复杂结构的更高层的表示特征,利用这种特征能更好的训练分类器。同时也说明该方法对分类器适用具有一定的普遍性。rq2:相对于基于常用pca降维方法,即特征提取或特征选择方法的软件缺陷预测模型,本发明方法有效提升预测性能,并且对不同的分类算法具有普遍性。本实验采用了表1中的6个数据集,分别使用了特征提取方法pca和一种混合的特征选择方法hfs,然后和本文提出的基于深度自编码网络的降维方法(da),在使用三种不同的分类器softmax、svm、lg的情况下进行对比实验,实验结果如表6-8,字体加粗和下划线代表结果更优的数值。表6分类器为softmax下和其他降维方法的对比结果表7分类器为svm下和其他降维方法的对比结果表8分类器为lg下和其他降维方法的对比结果通过表6-8的实验对比,对于特征数量中等级别和大量级别的eclipse的3个数据集和lucene数据集,在查全率和查准率的单项指标上,本发明方法是稍有优势,在某几个数据集上的指标不如其他两类方法,例如分类器为softmax的情况下,对数据集eclipse2.0的查全率不如pca,查准率又不如hfs,但是指标的平均值都要高于其他两类方法。整体来看,对于评估指标f1-score平均值,在分类器为softmax的情况下da相对与pca提升了25.4%,da相对与hfs提升了28.1%,在分类器为svm的情况下da相对与pca提升了23.2%,da相对与hfs提升了1%,在分类器为lg的情况下da相对与pca提升了11.3%,da相对与hfs提升了11%,可以看出在三种分类器下,平均预测结果是有显著提升的。对auc的预测结果同f1-score一样,在整体上有明显提升。说明了本发明方法能应用于软件缺陷预测,相对与常用的特征提取和特征选择方法有一定提升,并且对于多种分类方法都适用,具有一定普遍性。最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1