一种基于特征选择和集成学习的软件缺陷个数预测方法转让专利

申请号 : CN201710375644.2

文献号 : CN107247666B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 余啸刘进井溢洋崔晓晖邱昌

申请人 : 武汉大学

摘要 :

本发明属于软件缺陷预测技术领域,特别是涉及一种基于特征选择和集成学习的软件缺陷个数预测方法,针对软件缺陷个数的预测中不相关的模块特征损害了缺陷预测模型性能,回归模型均具有不同的预测能力,无法选择最佳回归算法等问题,首先利用基于包裹式的特征选择方法过滤不相关和冗余的特征,然后采用六种不同的回归算法:线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感知器回归,采用集成学习技术,根据特征筛选后的数据实例,构建综合回归模型。相比于单个的回归模型,本发明提高了软件缺陷个数预测的准确性。

权利要求 :

1.一种基于特征选择和集成学习的软件缺陷个数预测方法,其特征在于,包括以下步骤:

步骤1,挖掘软件历史数据,从中抽取出n个有用的软件模块;软件模块粒度根据实际应用场景,可设置为文件、包、类或函数;然后标记软件模块中缺陷的个数;

步骤2,提取软件模块中与软件缺陷有关的特征,提取了19个属性特征:加权方法数,继承树深度,孩子数,对象类之间的耦合度,类的响应,内聚缺乏度,传入耦合,传出耦合,公开方法数,代码行数,数据访问度量,聚合度量,功能抽象度量,方法间的内聚度,继承耦合,方法间耦合,平均方法复杂度,最大McCabe环形复杂度,平均McCabe环形复杂度;这19个特征形成了原始的特征集S={A1,A2,…,A19};在提取n个软件模块的特征和缺陷个数后形成了缺陷数据集D={(x1,y1),(x2,y2),…,(xn,yn)},其中xi=(a1,a2,…,a19)是从第i个软件模块中提取出的19维的特征向量值,yi是第i个软件模块的缺陷个数;

步骤3,首先通过以D为训练集在原始特征集S上训练出m个基础回归模型h1(x),h2(x),…,hm(x);这些基础的回归模型包含了线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归;每个基本的回归模型预测给定模块的缺陷个数;然后构建集成回归模型H(x):其中 并且wi(i=1,…,m)是基础回归模型的权重;将权重设置为1/m;由于缺陷数量必须是非负整数,因此对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数;

步骤4,利用步骤3中训练出的集成回归模型H(x)对缺陷数据集D中的n个软件模块进行预测,计算得到该集成回归模型在缺陷数据集D上的预测准确率;预测准确率采用均方根误差RMSE表示,计算公式为其中yi表示对第i个软件模块的缺陷个数真实值,表示第i个软件模块的缺陷个数预测值;

步骤5,采用基于包裹式的特征选择方法来滤除不相关和冗余的特征,具体包括:

步骤5.1,从当前特征子集Sk(k为当前特征子集中包含的特征个数)中滤除掉一个特征,由于Sk中的每个特征都是可以被滤除的,所以对当前特征子集Sk滤除掉一个特征后,有k个不同的特征子集Sk-1;

步骤5.2,基于这k个不同的特征子集Sk-1,训练出k个不同的集成回归模型,分别计算这k个不同的集成回归模型对原始缺陷数据集D中n个软件模块进行预测时的RMSE值;

步骤5.3,如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值小于在原始特征子集Sk上训练得到的RMSE值,则说明在特征子集Sk-1上训练得到的集成回归模型具有更高的准确率,当前的特征子集Sk-1相比于原始的特征子集Sk更有用;因此,则保留当前的特征子集Sk-1,然后重复步骤5.1、5.2、5.3;如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值大于在原始特征子集Sk上训练得到的RMSE值,则说明在原始特征子集Sk上训练得到的集成回归模型具有更高的准确率,原始的特征集Sk相比于当前的特征子集Sk-1更有用,则停止特征选择步骤,得到筛选后的特征子集S’;

步骤6,通过以D为训练集在特征选择后的特征子集S’上训练出m个基础回归模型h1,h2,…,hm;这些基本的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归;然后构建集成回归模型H(x’):其中 并且wi(i=1,…,m)是基础回归模型的权重,将权重设置为1/m;由于缺陷数量必须是非负整数,因此对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数;

步骤7,预测待预测的软件模块的缺陷个数;

步骤7.1,提取待预测的软件模块中的特征S’,形成这个软件模块的特征向量值x’;

步骤7.2,将步骤7.1得到的待预测的软件模块的特征向量值x’带入到步骤6中训练的集成回归模型中,求得该软件模块的缺陷个数。

说明书 :

一种基于特征选择和集成学习的软件缺陷个数预测方法

技术领域

[0001] 本发明属于软件缺陷预测技术领域,特别是涉及一种基于特征选择和集成学习的软件缺陷个数预测方法。

背景技术

[0002] (1)软件缺陷个数预测技术
[0003] 软件已经成为影响国民经济、军事、政治乃至社会生活的重要因素。高可靠和复杂的软件系统依赖于其采用的软件的可靠性。软件的缺陷是导致相关系统出错、失效、崩溃甚至机毁人亡的潜在根源。所谓缺陷,到目前为止,学术界,产业界有很多相关的术语和定义,比如故障、缺陷、bug、错误、失误、失效、失败等。根据ISO 9000对缺陷的定义为:满足与预期或者规定用途有关的要求,缺陷是软件中已经存在的一个部分,可以通过修改软件而滤除。然而软件技术发展至今,任何检验、验证手段都不可能发现并排除所有的缺陷,软件作为一种无形的产物,虽然不会磨损用坏,却随时可能因为我们不易查知的原因出现故障甚至失效。事实上,从第一个软件诞生,就伴随出现软件缺陷的检测和预测技术。检测技术在于发现缺陷,而预测技术则在于预测还未发现的缺陷。20世纪70年代,出现了利用统计学习技术,根据历史数据以及已经发现的缺陷等软件度量数据预测软件系统的缺陷数目及类型。
缺陷预测技术的目的在于统计计算机软件系统的缺陷数,以决定系统是否可以交付使用。
缺陷预测技术为软件质量的提高和保证起着非常重要的作用,同时也促进了软件工程技术向前大大的发展了一步。
[0004] 软件缺陷预测过程的第一步是收集和标注软件实例。一个软件实例能够被标记为有缺陷和无缺陷。第二步,抽取软件实例的度量属性。到目前为止,研究人员从不同的角度提出了许多软件度量属性,而与软件缺陷预测密切相关的度量属性主要有代码度量、McCabe度量和Halstead度量三种。代码度量是最直接、应用最普遍的度量属性。通过对程序进行简单的计数,我们可以得到相关代码的度量值。它包含总行数(LOC)、空白行数目(LOCb)、注释行数目(LOCc)、代码行数目(LOCe)和代码和注释总数目(LOCec)。(文献:[1]包晓露,王小娟,贾有良、申来安。软件测试基础:方法与度量[M].北京:人民邮电出版社,2007:74-76.)。软件复杂性通过程序结构的复杂性表现出来,而程序结构的复杂性主要值的是实例内部程序的复杂性。MaCabe度量的正是实例内部程序的复杂性。它由三种度量组成,分别为环形复杂度(Cyclomatic Complexity)、基本复杂度(Essential Complexity)和设计复杂度(Dessign Complexity)。Halstead度量不仅度量了程序长度,还描述了程序的最小实现和实际实现之间的关系,并据此阐述程序语言的等级高低。Halstead度量方法充分考虑了程序中出现的算子和操作数,它包括软件长度(N)、容量(V)、级别(L)、难度(D)、工作量(E)、时间(T)、误差估计(B)、程序消息(I)等度量。第三步,建立缺陷预测模型,缺陷预测模型本质上属于模式识别的范畴。而缺陷预测模型的建立过程就是通过一定的机器学习算法来搭建模型结构并确定度量属性之间依赖强度的过程,即为模型的结构学习和参数学习过程。第四步,通过模型预测结果,由于建立好的缺陷预测模型可以通过自身模型结构和模型参数来量化描述度量属性与预测结果之间的因果关系,这样给定一个软件实例的度量属性数据集,使用训练好的预测模型就可以得到该实例是否存在缺陷,即完成软件缺陷预测的过程。
[0005] (2)软件缺陷个数预测技术
[0006] 但这些软件缺陷预测技术通常只给出有缺陷或无缺陷的二分类结果。如有关文献:[1]
[0007] X.Yang,K.Tang,X.Yao“, A Learning-to-Rank Approach to Software Defect Prediction,”IEEE Transactions on Reliability,2015,64(1):234-246.指出,如果只按照有无缺陷来分配有限的测试资源,可能会造成资源分配的浪费。如果我们能够准确的预测出缺陷个数,使软件测试人员主要关注那些拥有更多缺陷的软件模块,就可使软件测试工作更为有效。因此,预测软件缺陷个数相比于单纯的预测软件模块是否有缺陷更利于优化软件测试资源的分配。目前为止,已有许多研究使用回归模型预测缺陷数目。一些学者研究了遗传编程,决策树回归以及多层感知器进行缺陷数目的预测,结果表明这些模型具有良好的性能。有关文献:[2]M.Chen,Y.Ma“, An empirical study on predicting defect numbers,”28th International Conference on Software Engineering and Knowledge Engineering,2015:397-402.Chen等人使用六种回归算法来构建缺陷数目预测模型,最后发现,使用决策树回归构建的模型在多数情况下具有最高的预测准确率。在另一个相似的研究中,有关文献:[3]S.S.Rathore,S.Kumar,“Predicting number of faults in software system using genetic programming,”Procedia Computer Science,2015,62:303-311.Rathore等人提出了另一种实验方法来评估六种回归算法。结果发现决策树回归,多层感知和线性回归在多数情况下取得最佳性能。
[0008] 然而,这些回归算法具有不同的预测能力,算法的性能会因为数据集的不同而不同,实验证明没有一种算法可以在所有情况下有取得最佳性能。此外,这些回归模型的性能仍然容易受到不相关的、冗余的模型特征的影响。
[0009] (3)回归技术
[0010] 回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系以及多个自变量对因变量的影响。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。
[0011] 1)线性回归。线性回归是一种用于对因变量与一个或多个独立变量之间的线性关系进行建模的统计方法。一个线性回归模型如下式所示:
[0012] Y=b0+b1x1+b2x2+…+bnxn
[0013] 其中Y是因变量,x1,x2,...,xn是独立变量,b1,b2,...,bn是独立变量的回归系数,b0是误差项。
[0014] 2)岭回归。当自变量之间有高度相关关系时,即使最小二乘法是无偏的,它们的方差也会很大。岭回归实际上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。最小二乘法如下式所示:
[0015] XB=Y
[0016] 当X列满秩时,有
[0017] B=X+Y=(XTX)-1XTY
[0018] X+表示X的广义逆。当XTX的行列式接近于0时,岭回归为其主对角元素都加上了一个数k,降低矩阵为奇异的风险。如下式所示:
[0019] B(k)=(XTX+kI)-1XTY
[0020] 随着k的增大,B(k)中各元素bi(k)的绝对值均趋于不断变小,它们相对于正确值bi的偏差也越来越大。k趋于无穷大时,B(k)趋于0。b(k)随k的改变而变化的轨迹,就称为岭迹。
[0021] 3)决策树回归。它通过学习从数据特征推断的简单决策树来预测目标变量的值。决策树从根节点自上而下构建,并使用分割标准将数据分成包含具有相似值的实例的子集。选择最大化减少预期误差的属性作为根节点。该过程在非叶分支上递归运行,直到所有数据被处理。
[0022] 4)梯度boosting回归。它以弱预测模型(通常是决策树)的形式产生预测模型,像其他提升方法一样的阶段性方式构建模型。它允许优化任意可微分损失函数。在每个阶段,回归树适合于给定损失函数的负梯度。
[0023] 5)最近邻回归。最近邻回归是基于k最近邻的算法,并且一个实例的回归值是根据其最邻近的标签的平均值来计算的。基本的最近邻回归使用均匀权重:即本地邻域中的每个点对查询点的分类均一致。在某些情况下,加权点可能是有利的,使得附近点对远程点的贡献更多。
[0024] 6)多层感知器回归。多层感知器是生物神经网络工作中的预测算法,它由一系列以层的形式相互连接权重的处理元件组成,利用一种反向传播来增加网络。多层感知器回归模型如下式所示:
[0025] netk=w1kx1+w2kx2+…+wnkxn+bk
[0026] Ok=f(netk)
[0027] 其中Ok是因变量,x1,x2,...,xn是独立变量,w1k,w2k,...,wnk是与每个输入层相关联的权重,函数f(netk)是激活函数。

发明内容

[0028] 本发明提供的技术方案是一种基于特征选择和集成学习的软件缺陷个数预测方法,包括以下步骤:
[0029] 步骤1,挖掘软件历史数据,从中抽取出n个有用的软件模块。软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数。然后标记软件模块中缺陷的个数。
[0030] 步骤2,提取软件模块中与软件缺陷有关的特征,提取了20个属性特征:加权方法数(wmc),继承树深度(dit),孩子数(noc),对象类之间的耦合度(cbo),类的响应(rfc),内聚缺乏度(lcom),传入耦合(ca),传出耦合(ce),公开方法数(npm),代码行数(loc),数据访问度量(dam),聚合度量(moa),功能抽象度量(mfa),方法间的内聚度(cam),继承耦合(ic),方法间耦合(cbm),平均方法复杂度(amc),最大McCabe环形复杂度(max_cc),平均McCabe环形复杂度(avg_cc)。这20个特征形成了原始的特征集S={A1,A2,…,A20}。在提取n个软件模块的特征和缺陷个数后形成了缺陷数据集D={(x1,y1),(x2,y2),…,(xn,yn)},其中xi=(a1,a2,…,a20)是从第i个软件模块中提取出的20维的特征向量值,yi是第i个软件模块的缺陷个数。
[0031] 步骤3,首先通过以D为训练集在原始特征集S上训练出m个基础回归模型h1(x),h2(x),…,hm(x)。这些基础的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归。每个基本的回归模型预测给定模块的缺陷个数。然后构建集成回归模型 其中 并且wi(i=1,…,m)是基础回归模型的权重。简单起见,本发明中我们将权重设置为1/m。由于缺陷数量必须是非负整数,因此本发明对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数。
[0032] 步骤4,利用步骤3中训练出的集成回归模型H(x)对缺陷数据集D中的n个软件模块进行预测,计算得到该集成回归模型在缺陷数据集D上的预测准确率。预测准确率采用均方根误差RMSE表示,计算公式为:
[0033]
[0034] 其中yi表示对第i个软件模块的缺陷个数真实值,表示第i个软件模块的缺陷个数预测值。
[0035] 步骤5,采用基于包裹式的特征选择方法来滤除不相关和冗余的特征,具体包括:
[0036] 步骤5.1,从当前特征子集Sk(k为当前特征子集中包含的特征个数)中滤除掉一个特征,由于Sk中的每个特征都是可以被滤除的,所以对当前特征子集Sk滤除掉一个特征后,有k个不同的特征子集Sk-1。
[0037] 步骤5.2,基于这k个不同的特征子集Sk-1,训练出k个不同的集成回归模型,分别计算这k个不同的集成回归模型对原始缺陷数据集D中n个软件模块进行预测时的RMSE值。
[0038] 步骤5.3,如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值小于在原始特征子集Sk上训练得到的RMSE值,则说明在特征子集Sk-1上训练得到的集成回归模型具有更高的准确率,当前的特征子集Sk-1相比于原始的特征子集Sk更有用。因此,则保留当前的特征子集Sk-1,然后重复步骤5.1、5.2、5.3。如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值大于在原始特征子集Sk上训练得到的RMSE值,则说明在原始特征子集Sk上训练得到的集成回归模型具有更高的准确率,原始的特征集Sk相比于当前的特征子集Sk-1更有用,则停止特征选择步骤,得到筛选后的特征子集S’。
[0039] 步骤6,通过以D为训练集在特征选择后的特征子集S’上训练出m个基础回归模型h1,h2,…,hm。这些基本的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归。然后构建集成回归模其中 并且wi(i=1,…,m)是基础回归模型的权重,将权重设置为1/m。由于缺陷数量必须是非负整数,因此本发明对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数。
[0040] 步骤7,预测待预测的软件模块的缺陷个数。
[0041] 步骤7.1,提取待预测的软件模块中的特征S’,形成这个软件模块的特征向量值x’。
[0042] 步骤7.2,将步骤7.1得到的待预测的软件模块的特征向量值x’带入到步骤6中训练的集成回归模型中,求得该软件模块的缺陷个数。
[0043] 针对现有的软件缺陷个数预测模型具有不同的预测能力,预测的性能会根据数据集的不同而不同的问题,而且这些模型的性能也容易受到软件缺陷个数预测数据集中不相关的、冗余的特征的影响的问题,因此本发明利用集成学习技术将多个回归模型相结合来预测软件缺陷个数,相比于单个的回归模型,提高了软件缺陷个数预测的准确性。并在此基础上利用包裹式的特征选择方法通过评估每个特征对回归模型性能的贡献来滤除掉软件缺陷个数预测数据集中不相关的、冗余的特征,得到一个新的特征集,该特征集对于建立软件缺陷个数预测模型更为有效,以此提高了预测的准确性。

附图说明

[0044] 图1本发明实施例的基于特征选择和集成学习的软件缺陷个数预测流程图。
[0045] 图2本发明实施例的基于包裹式的特征选择方法示例图。

具体实施方式

[0046] 本发明设计的基于特征选择和集成学习的软件缺陷个数预测方法流程图见附图1,所有步骤可由本领域技术人员采用计算机软件技术实现流程自动运行。实施例具体实现过程如下:
[0047] 步骤1,挖掘软件历史数据,从中抽取出n个有用的软件模块。软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数。然后标记软件模块中缺陷的个数。
[0048] 步骤2,提取软件模块的属性特征,为了阐述方便,假设在实施例中提取了5个属性特征:A1,A2,A3,A4,A5。
[0049] 本实施例在提取5个模块的度量属性和缺陷个数后形成了缺陷数据集D={(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)},其中xi是表示从第i个软件模块中提取的5维特征向量,xi=(a1,a2,a3,a4,a5),yi是第i个软件模块的缺陷个数。
[0050] 缺陷数据集中包含的模块如下:X1={(3.0,1.0,0.0,8.0,14.0),5},X2={(13.0,1.0,0.0,1.0,17.0),4},X3={(4.0,1.0,0.0,4.0,4.0),5},X4={(10.0,1.0,0.0,6.0,
31.0),0},X5={(2.0,0.367,15.143,3.0,1.1429),0}。
[0051] 步骤3,首先通过以D为训练集在原始特征集S上训练出m个基础回归模型h1(x),h2(x),…,hm(x)。这些基本的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归。然后构建集成回归模型其中 并且wi(i=1,…,m)是基础回归模型的权重。简单起见,本发明中我们将权重设置为1/m。由于缺陷数量必须是非负整数,因此本发明对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数。因此,针对步骤2形成的缺陷数据集D,利用集成学习技术构建的回归模型为:
[0052] H(x)=1/6×[h1(a1,a2,a3,a4,a5)+h2(a1,a2,a3,a4,a5)+h3(a1,a2,a3,a4,a5)+h4(a1,a2,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
[0053] 步骤4,利用步骤3中训练出的集成回归模型H(x)对缺陷数据集D中的五个软件模块进行预测,求得第一个软件模块的缺陷个数预测值为c1=4,第二个软件模块的缺陷个数预测值为c2=3,第三个软件模块的缺陷个数预测值为c3=0,第四个软件模块的缺陷个数预测值为c4=2,第五个软件模块的缺陷个数预测值为c5=3,计算得到该集成回归模型在缺陷数据集D上的预测准确率,该预测准确率采用均方根误差RMSE表示,其计算公式为:
[0054]
[0055] 其中yi表示对第i个软件模块的缺陷个数真实值, 表示第i个软件模块的缺陷个数预测值。通过该公式计算出了本实施例训练出的集成回归模型在缺陷数据集D上的rmse=1.51。
[0056] 步骤5,采用基于包裹式的特征选择方法来滤除不相关和冗余的特征。
[0057] 步骤5.1,从当前特征子集Sk(k为当前特征子集中包含的特征个数)中滤除掉一个特征,由于Sk中的每个特征都是可以被滤除的,所以对当前特征子集Sk滤除掉一个特征后,有k个不同的特征子集Sk-1。本实施例中首先对原始特征集S={a1,a2,a3,a4,a5}滤除掉一个特征后,有5种不同的特征子集:{a2,a3,a4,a5}、{a1,a3,a4,a5}、{a1,a2,a4,a5}、{a1,a2,a3,a5}、{a1,a2,a3,a4}。
[0058] 步骤5.2,基于这k个不同的特征子集Sk-1,训练出k个不同的集成回归模型,分别计算这k个不同的集成回归模型对原始缺陷数据集D中软件模块进行预测时的RMSE值。本实施例中利用{a2,a3,a4,a5}这个特征子集构建集成回归模型:
[0059] H1(x)=1/6×[h1(a2,a3,a4,a5)+h2(a2,a3,a4,a5)+h3(a2,a3,a4,a5)+h4(a2,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
[0060] 利用{a1,a3,a4,a5}这个特征子集构建集成回归模型:
[0061] H2(x)=1/6×[h1(a1,a3,a4,a5)+h2(a1,a3,a4,a5)+h3(a1,a3,a4,a5)+h4(a1,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
[0062] 利用{a1,a2,a4,a5}这个特征子集构建集成回归模型:
[0063] H3(x)=1/6×[h1(a1,a2,a4,a5)+h2(a1,a2,a4,a5)+h3(a1,a2,a4,a5)+h4(a1,a2,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
[0064] 利用{a1,a2,a3,a5}这个特征子集构建集成回归模型:
[0065] H4(x)=1/6×[h1(a1,a2,a3,a5)+h2(a1,a2,a3,a5)+h3(a1,a2,a3,a5)+h4(a1,a2,a3,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
[0066] 利用{a1,a2,a3,a4}这个特征子集构建集成回归模型:
[0067] H5(x)=1/6×[h1(a1,a2,a3,a4)+h2(a1,a2,a3,a4)+h3(a1,a2,a3,a4)+h4(a1,a2,a3,a4)+h5(a1,a2,a3,a4)+h6(a1,a2,a3,a4)]
[0068] 计算这五个集成回归模型对缺陷数据集D中软件模块进行预测时的RMSE值。对于集成回归模型H1(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c2=2,c3=3,c4=0,c5=1,求得rmse1=1.14;对于集成学习回归模型H2(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=3,c2=3,c3=3.00,c4=2,c5=2,求得rmse2=0.55;对于集成学习回归模型H3(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=0,c2=1,c3=3,c4=
3,c5=2,求得rmse3=1.30;对于集成学习回归模型H4(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=2,c2=3,c3=2,c4=3,c5=0,求得rmse4=1.22;对于集成学习回归模型H5(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=4,c2=3,c3=3,c4=2,c5=2,求得rmse5=0.84。
[0069] 步骤5.3,如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值小于在原始特征子集Sk上训练得到的RMSE值,则说明在特征子集Sk-1上训练得到的集成回归模型具有更高的准确率,当前的特征子集Sk-1相比于原始的特征子集Sk更有用。因此,则保留当前的特征子集Sk-1,则重复步骤5.1、5.2、5.3。如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值大于在原始特征子集Sk上训练得到的RMSE值,则说明在原始特征子集Sk上训练得到的集成回归模型具有更高的准确率,原始的特征集Sk相比于当前的特征子集Sk-1更有用,则停止特征选择步骤,得到筛选后的特征子集S’。
[0070] 在本实施例中由于在特征子集{a1,a3,a4,a5}上训练得到的集成回归模型具有最小的RMSE值,且该值小于在原始特征集S={a1,a2,a3,a4,a5}上训练得到的集成回归模型的RMSE值,所以在第一次迭代时删除掉a2这个特征。重复步骤5.1、5.2、5.3,继续选择滤除一个特征,有4种不同的特征子集:{a3,a4,a5}、{a1,a4,a5}、{a1,a3,a5}和{a1,a3,a4},使用这4种不同的特征子集构建集成回归模型:
[0071] H1(x)’=1/6×[h1(a3,a4,a5)+h2(a3,a4,a5)+h3(a3,a4,a5)+h4(a3,a4,a5)+h5(a3,a4,a5)+h6(a3,a4,a5)]
[0072] H2(x)’=1/6×[h1(a1,a4,a5)+h2(a1,a4,a5)+h3(a1,a4,a5)+h4(a1,a4,a5)+h5(a1,a4,a5)+h6(a1,a4,a5)]
[0073] H3(x)’=1/6×[h1(a1,a3,a5)+h2(a1,a3,a5)+h3(a1,a3,a5)+h3(a1,a3,a5)+h5(a1,a3,a5)+h6(a1,a3,a5)]
[0074] H4(x)’=1/6×[h1(a1,a3,a4)+h2(a1,a3,a4)+h3(a1,a3,a4)+h3(a1,a3,a4)+h4(a1,a3,a4)+h6(a1,a3,a4)]
[0075] 计算各自的缺陷个数及回归误差:对于集成学习回归模型H1(x)’,预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=4,c2=2,c3=3,c4=4,c5=0,求得rmse1’=1.68;对于集成学习回归模型H2(x)’,预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=3,c2=3,c3=2,c4=4,c5=3,求得rmse2’=0.71;对于集成学习回归模型H3(x)’,预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=4,c2=3,c3=3,c4=1,c5=3,求得rmse3’=
1.09;对于集成学习回归模型H4(x)’,预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=3,c2=3,c3=2,c4=4,c5=4,求得rmse4’=0.84。
[0076] 由于在特征子集{a1,a4,a5}上可以达到最小的RMSE值为0.71,这一个值大于了在特征子集{a1,a3,a4,a5}上训练得到的RMSE值,这说明在对特征子集{a1,a3,a4,a5}滤除一个特征后RMSE的值反而升高,因此停止特征选择步骤,得到筛选后的特征子集S’为{a1,a3,a4,a5}。
[0077] 步骤6,通过以D为训练集在特征选择后的特征子集S’={a1,a3,a4,a5}上训练出m个基础回归模型h1,h2,…,hm。这些基本的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归。然后构建集成回归模型 其中 并且wi(i=1,…,m)是基础回归模型的权重。简单起见,本发明中我们将权重设置为1/m。由于缺陷数量必须是非负整数,因此本发明对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数。
[0078] 步骤7,预测待预测的软件模块的缺陷个数。
[0079] 步骤7.1,对待预测的软件模块提取A1,A3,A4,A5这四个特征,形成如下软件模块数据:X6={(0.6,4.2,7.8,3),?},“?”表示这个软件模块待预测。
[0080] 步骤7.2,将步骤7.1得到的待预测的软件模块的特征向量值xi=(0.6,4.2,7.8,3)带入步骤6中训练的集成回归模型中,求得该软件模块的缺陷个数。最终计算结果为
3.23,由于缺陷个数必为整数,因此四舍五入得到最后的缺陷个数为3。
[0081] 本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。