CN114706780A - 一种基于Stacking集成学习的软件缺陷预测方法 - Google Patents

一种基于Stacking集成学习的软件缺陷预测方法 Download PDF

Info

Publication number
CN114706780A
CN114706780A CN202210389330.9A CN202210389330A CN114706780A CN 114706780 A CN114706780 A CN 114706780A CN 202210389330 A CN202210389330 A CN 202210389330A CN 114706780 A CN114706780 A CN 114706780A
Authority
CN
China
Prior art keywords
model
test
train
training
sample
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210389330.9A
Other languages
English (en)
Inventor
单纯
张浩伦
廖书妍
周彦哲
彭哲恒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN202210389330.9A priority Critical patent/CN114706780A/zh
Publication of CN114706780A publication Critical patent/CN114706780A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2411Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on the proximity to a decision surface, e.g. support vector machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • G06N20/10Machine learning using kernel methods, e.g. support vector machines [SVM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • G06N20/20Ensemble learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Medical Informatics (AREA)
  • Mathematical Physics (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种基于Stacking集成学习的软件缺陷预测方法,本发明不是人工根据先验知识或者搜索算法进行组合,而是通过Stacking集成学习算法将RF、XGBoost和SVM三个基模型作为初级模型,将缺陷数据集样本特征输入到初级模型中训练且得到三个基模型对待测样本预测为缺陷样本的概率值,然后将三个概率值进行特征组合,作为输入次级模型LR的二次特征,最后将二次特征作为LR的输入,对LR模型进行训练,得到基于Stacking集成学习的软件缺陷预测复合模型(XGBoost‑RF‑SVM)‑LR;也就是说,本发明将四个弱分类器组合成为强分类器,在一定程度上提高了预测的精度。

Description

一种基于Stacking集成学习的软件缺陷预测方法
技术领域
本发明涉及一种基于Stacking集成学习的软件缺陷预测方法,属于软件缺陷预测技术领域。
背景技术
计算机行业近年来的迅猛发展,给全世界几乎所有产业带来了新的活力,现代人的生活已经完全被计算机科学所改变。随着计算机科学不断融入人们的生活,人们越来越离不开软件程序。软件不仅仅作为一种不可或缺的工具,给人们的衣食住行提供便利,还改变了人类的工作方式和思维方式,不断推动文明的进步。
在这样的背景下,软件用户数量不断暴涨,带来了更多的软件需求也带来了一系列问题,如软件系统的功能模块和内部结构愈加复杂、开发人员越来越多、开发难度增加、出现软件缺陷等。其中,软件缺陷是最为严重的问题,轻则影响软件质量导致软件无法实现原有的功能,重则造成经济损失和人身安全。为了避免由软件缺陷导致的经济损失、人身安全等重大事故,对软件进行缺陷预测是很有必要的。在早期就预测出存在缺陷的软件模块,能够使软件从业人员对软件模块进行修改,避免存在缺陷的软件应用到重要的生活领域,提高了软件正确性、可靠性的同时,也保障了软件的安全从而避免了事故的发生。
软件缺陷预测技术诞生于上世纪70年代,该技术通过软件或者模块产生的以某些度量标准对应的历史缺陷数据进行分析。现如今,软件缺陷预测大多使用统计学领域和机器学习领域的方法来探究软件缺陷和软件度量属性的关系,以预测软件模块中软件是否存在缺陷或对软件缺陷数量进行预测。最近几年的时间,人工智能的课题逐步变得活跃,并且延伸至如图像、语音等领域,推进这些领域大步发展。而人工智能同样可以应用到软件缺陷预测领域。相关从业者不再是由一些静态度量和软件度量来判断软件模块是否存在缺陷,而是使用机器学习的算法和统计学的理论,将由软件度量方法得到的软件模块数据制作成软件缺陷数据集,最终建立一些模型进行软件缺陷的预测。目前这一领域也存在一些需要解决的问题:如解决缺陷数据集类不平衡给预测带来的影响、缺陷数据集样本存在异常值等问题。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提出一种基于Stacking集成学习的软件缺陷预测方法,该方法是将软件缺陷数据集中的软件度量作为输入的特征,经过合适的机器学习算法对软件模块进行软件缺陷数量和概率的预测的一种方法。
本发明的技术解决方案是:
一种基于Stacking集成学习的软件缺陷预测方法,该方法的步骤包括:
第一步,使用代码行数度量法提取测试软件样本的一类特征,使用Halstead科学度量法提取测试软件样本的二类特征,使用McCabe度量法提取测试软件样本的三类特征,使用CK度量法提取测试软件样本的四类特征;
第二步,将第一步得到的一类特征、二类特征、三类特征和四类特征进行汇总,得到测试软件的数据集D;
第三步,对第二步得到的数据集D进行数据预处理;
第四步,用RF模型、XGBoost模型和SVM模型构建初级模型,将数据集D分为训练集Dtrain和测试集Dtest,训练集Dtrain样本数量为N,测试集Dtest样本数量为M;
第五步,构建次级模型LR的新训练集Ctrain和新测试集Ctest,将P1,P2,P3合并成为新训练集的样本的Ctrain的二次特征集合Xtrain,将Ytrue_1作为新训练集Ctrain的样本的目标值集合,将T1,T2,T3组合成集合Xtest作为输入到次级模型LR的新测试集Ctest的样本的二次特征集合,将Ytrue_2作为新测试集Ctest的样本的目标值集合,将新训练集{Xtrain,Ytrue_1}训练次级模型LR,将新测试集{Xtest,Ytrue_2}的特征值集合输入训练好的次级模型LR得到预测值Ypredict,初级模型和训练后的次级模型LR形成复合模型;
第六步,将待测试软件样本代入到训练好的复合模型中进行预测,得到待测试软件样本的缺陷预测结果;
第七步,进行复合模型的预测性能的评估;将Ypredict和Ytrue_2进行对比计算,得到复合模型的预测的各评价指标,完成基于Stacking集成学习的软件缺陷预测。
所述的第一步中,一类特征为与代码行数相关的度量元,包括测试软件样本的代码总行数、注释行数、实际运行行数、方法行数。
所述的第一步中,二类特征为测试软件样本的程序长度、程序容量、语言等级、编写效率、编写耗时度量元。
所述的第一步中,三类特征为测试软件样本的循环结构数量、程序选择结构的数量度量元。
所述的第一步中,四类特征为测试软件样本的类中方法数、类继承深度、类的直接子类个数、类的耦合类个数、类中方法调用总数、类内方法引用实例数度量元。
所述的第三步中,对第二步得到的数据集D进行数据预处理的具体步骤包括:(1)去除含有异常值或缺失值的样本;(2)对样本的特征进行标准化处理;(3)统一规范化样本目标值,将有缺陷类样本的目标值设置为1,无缺陷类样本的目标值设置为0。
所述的第四步中,RF模型的训练方法为:首先使用数据集D对RF模型进行训练,采用K折交叉验证法训练,方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_i i∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到RF模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的RF模型中得到预测结果P1i,将测试集输入到经过新训练集Dt_i训练好的RF模型中得到预测结果T1i,直到i>K结束此操作;
复完上述的K次操作之后,得到P11,P12,...,P1k共K个
Figure BDA0003594958940000041
行1列的集合,将它们整合为一个集合P1,此时的P1共有
Figure BDA0003594958940000042
个样本,其值为RF模型训练集Dtrain中样本是正例的概率,并且P1与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T11,T12,...,T1k共K个
Figure BDA0003594958940000043
行1列的集合进行加权平均得到集合T1,此时的T1共有
Figure BDA0003594958940000044
个样本,其值为RF模型对测试集Dtest中样本是正例的概率,并且T1与测试集Dtest的目标值集合Ytrue_2一一对应。
所述的第四步中,XGBoost模型的训练方法为:首先使用数据集D对XGBoost模型进行训练,采用K折交叉验证法训练,方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_i i∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到XGBoost模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的XGBoost模型中得到预测结果P2i,将测试集输入到经过新训练集Dt_i训练好的XGBoost模型中得到预测结果T2i,直到i>K结束此操作;
复完上述的K次操作之后,得到P21,P22,...,P2k共K个
Figure BDA0003594958940000045
行1列的集合,将它们整合为一个集合P2,此时的P2共有
Figure BDA0003594958940000046
个样本,其值为XGBoost模型训练集Dtrain中样本是正例的概率,并且P2与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T21,T22,...,T2k共K个
Figure BDA0003594958940000047
行1列的集合进行加权平均得到集合T2,此时的T2共有
Figure BDA0003594958940000048
个样本,其值为XGBoost模型对测试集Dtest中样本是正例的概率,并且T2与测试集Dtest的目标值集合Ytrue_2一一对应。
所述的第四步中,SVM模型的训练方法为:首先使用数据集D对SVM模型进行训练,采用K折交叉验证法训练,方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_i i∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到SVM模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的SVM模型中得到预测结果P3i,将测试集输入到经过新训练集Dt_i训练好的SVM模型中得到预测结果T3i,直到i>K结束此操作;
复完上述的K次操作之后,得到P31,P32,...,P3k共K个
Figure BDA0003594958940000051
行1列的集合,将它们整合为一个集合P3,此时的P3共有
Figure BDA0003594958940000052
个样本,其值为SVM模型训练集Dtrain中样本是正例的概率,并且P3与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T31,T32,...,T3k共K个
Figure BDA0003594958940000053
行1列的集合进行加权平均得到集合T1,此时的T1共有
Figure BDA0003594958940000054
个样本,其值为SVM模型对测试集Dtest中样本是正例的概率,并且T3与测试集Dtest的目标值集合Ytrue_2一一对应。
有益效果
(1)与现有软件缺陷预测模型相比,本发明中的集成了多个单一模型的复合模型,能够结合基模型的特点进行对软件缺陷的预测。初次模型采用了预测性能较强的XGBoost、能够判断特征重要性的RF以及在查准率上表现突出的SVM。次级模型采用了结构简单的LR,以防止出现过拟合的现象。
(2)复合模型在五项指标中都表现稳定,具有较高的稳定性和精度。与现有的RF、XGBoost和SVM单一模型的预测指标进行对比,除了查准率略低于单一的SVM模型,其余所有指标均远高于其他模型。
(3)与同样是采用Stacking集成策略且在软件缺陷预测领域表现良好分类性能的GBDT-SVM相比,复合模型在五项预测指标中都基本优于GBDT-SVM,并且在多项数据都有较大提升。
(4)复合模型最终预测指标中五项预测指标都超过了0.9,其中准确率超过0.94,查准率高于0.92,AUC值高于0.93。表明该模型的预测性能非常优秀。
(5)将测试样本输入初级模型,分别得到三个不同的基模型对样本是否为缺陷样本的概率值,将概率值进行特征组合作为次级模型的特征输入次级模型,最终得到预测结果0或1(0代表软件模块没有缺陷,1代表软件模块存在缺陷)。
(6)以Stacking集成算法的策略进行模型的创建,在初级模型中使用了三个不同的模型(RF、XGBoost和SVM)作为基模型、次级模型选用了一个单一模型(LR)进行复合模型的构建。在初级模型中选用了两个由Boosting集成算法策略进行集成的模型作为基模型,即RF和XGBoost。这两个分类模型本身就是经过Bagging和Boosting算法,由大量决策树构建的集成模型,具有良好的分类性能。再将这类集成模型作为构建复合模型的基模型,能够大大提升复合模型的预测性能。在初级分类器中使用了SVM作为第三个基分类器。
(7)利用该SVM模型在软件缺陷预测领域中的诸多数据集都能得到较高查准率的特性,将其作为第三个基分类器,使复合模型在查准率上表现更优秀,弥补了RF和XGBoost在查准率上的不足。将测试样本输入初级模型,分别得到三个不同的基模型对样本是否为缺陷样本的概率值,将概率值进行特征组合作为次级模型的特征输入次级模型,最终得到预测结果0或1(0代表软件模块没有缺陷,1代表软件模块存在缺陷)。
(8)本发明可以使用多种不同数量不同种类的算法和模型进行集成以实施对软件缺陷的预测。本研究领域的技术人员可以适当对其中的某一部分进行优化或修改。但是这部分优化和修改仍属于本发明的权利要求保护范围。复合模型的构建中,次级分类器可以更换为同样结构简单的KNN(K最邻近)模型,经实验也有同样出色的分类性能。另外初级分类器中可以再加入一个AdaBoost模型作为初级分类器中的第四个基分类器。
附图说明
图1为整个RF模型的训练过程示意图;
图2为整个次级模型的训练过程及预测过程示意图;
图3为整个复合模型(XGBoost-RF-SVM)-LR的预测过程示意图;
图4为PC4数据集下各模型的分类指标对比制作成可视化折线图;
图5为本发明的方法流程示意图。
具体实施方式
下面结合附图和实施例对本发明做进一步说明。
如图5所示,一种基于Stacking集成学习的软件缺陷预测方法,该方法的步骤包括:
第一步,使用代码行数度量法提取测试软件样本的代码总行数、注释行数、实际运行行数、方法行数等与代码行数相关的度量元,标记为一类特征;
使用Halstead科学度量法提取测试软件样本的程序长度、程序容量、语言等级、编写效率、编写耗时等度量元,标记为二类特征;
使用McCabe度量法提取测试软件样本的循环结构数量、程序选择结构的数量等度量元,标记为三类特征;
使用CK度量法提取测试软件样本的类中方法数、类继承深度、类的直接子类个数、类的耦合类个数、类中方法调用总数、类内方法引用实例数等度量元,标记为四类特征;
第二步,将第一步得到的一类特征、二类特征、三类特征和四类特征进行汇总,得到测试软件的数据集D;
第三步,对第二步得到的数据集D进行数据预处理,具体步骤包括:(1)去除含有异常值或缺失值的样本;(2)对样本的特征进行标准化处理;(3)统一规范化样本目标值,将有缺陷类样本的目标值设置为1,无缺陷类样本的目标值设置为0;
第四步,用RF(随机森林)模型、XGBoost(极端梯度提升)模型和SVM(支持向量机)模型作为三个基模型构建初级模型,将数据集D分为训练集Dtrain和测试集Dtest,训练集Dtrain样本数量为N,测试集Dtest样本数量为M;
RF模型的训练方法为:首先使用数据集D对RF模型进行训练,为了防止过拟合采用K折交叉验证法训练,采用K折交叉验证法训练的方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_i i∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到RF模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的RF模型中得到预测结果P1i,将测试集输入到经过新训练集Dt_i训练好的RF模型中得到预测结果T1i,直到i>K结束此操作;
复完上述的K次操作之后,得到P11,P12,...,P1k共K个
Figure BDA0003594958940000081
行1列的集合,将它们整合为一个集合P1,此时的P1共有
Figure BDA0003594958940000082
个样本,其值为RF模型训练集Dtrain中样本是正例的概率,并且P1与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T11,T12,...,T1k共K个
Figure BDA0003594958940000083
行1列的集合进行加权平均得到集合T1,此时的T1共有
Figure BDA0003594958940000084
个样本,其值为RF模型对测试集Dtest中样本是正例的概率,并且T1与测试集Dtest的目标值集合Ytrue_2一一对应,整个RF模型的训练过程如图1所示;
XGBoost模型的训练方法为:首先使用数据集D对XGBoost模型进行训练,为了防止过拟合采用K折交叉验证法训练,采用K折交叉验证法训练的方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_i i∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到XGBoost模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的XGBoost模型中得到预测结果P2i,将测试集输入到经过新训练集Dt_i训练好的XGBoost模型中得到预测结果T2i,直到i>K结束此操作;
复完上述的K次操作之后,得到P21,P22,...,P2k共K个
Figure BDA0003594958940000085
行1列的集合,将它们整合为一个集合P2,此时的P2共有
Figure BDA0003594958940000086
个样本,其值为XGBoost模型训练集Dtrain中样本是正例的概率,并且P2与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T21,T22,...,T2k共K个
Figure BDA0003594958940000091
行1列的集合进行加权平均得到集合T2,此时的T2共有
Figure BDA0003594958940000092
个样本,其值为XGBoost模型对测试集Dtest中样本是正例的概率,并且T2与测试集Dtest的目标值集合Ytrue_2一一对应;
SVM模型的训练方法为:首先使用数据集D对SVM模型进行训练,为了防止过拟合采用K折交叉验证法训练,采用K折交叉验证法训练的方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_i i∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到SVM模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的SVM模型中得到预测结果P3i,将测试集输入到经过新训练集Dt_i训练好的SVM模型中得到预测结果T3i,直到i>K结束此操作;
复完上述的K次操作之后,得到P31,P32,...,P3k共K个
Figure BDA0003594958940000093
行1列的集合,将它们整合为一个集合P3,此时的P3共有
Figure BDA0003594958940000094
个样本,其值为SVM模型训练集Dtrain中样本是正例的概率,并且P3与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T31,T32,...,T3k共K个
Figure BDA0003594958940000095
行1列的集合进行加权平均得到集合T1,此时的T1共有
Figure BDA0003594958940000096
个样本,其值为SVM模型对测试集Dtest中样本是正例的概率,并且T3与测试集Dtest的目标值集合Ytrue_2一一对应;
第五步,构建次级模型LR(逻辑回归)的新训练集Ctrain和新测试集Ctest;将P1,P2,P3合并成为新训练集的样本的Ctrain的特征值(二次特征)集合Xtrain,将Ytrue_1作为新训练集Ctrain的样本的目标值集合,此时的Xtrain为一个包含N条样本三个特征值的三维N列集合;将T1,T2,T3组合成集合Xtest作为输入到次级模型LR的新测试集Ctest的样本的特征值(二次特征)集合,将Ytrue_2作为新测试集Ctest的样本的目标值集合,此时的Xtest为一个包含M条样本三个特征值的三维M列集合;将新训练集{Xtrain,Ytrue_1}(即Ctrain)训练次级模型LR,将新测试集{Xtest,Ytrue_2}(即Ctest)的特征值集合输入训练好的次级模型LR得到预测值Ypredict,初级模型和训练后的次级模型LR形成复合模型;整个次级模型的训练过程及预测过程如图2所示;整个复合模型(XGBoost-RF-SVM)-LR的预测过程如图3所示。
第六步,将待测试软件样本代入到训练好的复合模型中进行预测,得到待测试软件样本的缺陷预测结果。
第七步,进行复合模型的预测性能的评估;将Ypredict和Ytrue_2进行对比计算,得到复合模型的预测的各评价指标不低于0.9。
以下为第七步中对预测的各评价指标的说明:
软件缺陷的预测属于典型的二分类问题,即预测软件模块是否存在缺陷。对于评价模型预测的好坏,需要引入混淆矩阵的概念。见表2:
Figure BDA0003594958940000101
表2.混淆矩阵混淆矩阵根据Ypredict和Ytrue_2的对比统计出四个值TP、FN、FP和TN。精准度
(accuracy)表示Ypredict中预测正确的样本数量占测试集样本数量的比值:
Figure BDA0003594958940000102
精确率(precision)表示被预测为正例的样本中,预测正确所占的比值:
Figure BDA0003594958940000103
召回率(recall),也可以叫做查全率,表示实际的正例样本中,预测正确所占的比值:
Figure BDA0003594958940000111
F1值(F1-mean)是一个能综合衡量精确率和召回率的性能指标:
Figure BDA0003594958940000112
此外,ROC曲线在二分类问题中可以表示真正例率和假正例率的关系,以真正例率为纵轴以假正例率为横轴绘制曲线。其曲线与y=0和x=1所夹的面积为AUC值,可以表示预测性能的好坏。AUC值越接近1,表示模型预测效果越好。AUC值越接近0.5表示模型分类效果越差。
通过上述五个预测指标可以来评判模型的性能。
下面仅列举NASA MDP数据集中的子数据集PC4作为实施例,进行对复合模型的预测性能的评估,表3为PC4数据集下各模型的分类指标对比。将表中数据制作成可视化折线图,如图4所示:
表3 PC4数据集下各模型的分类指标对比
Figure BDA0003594958940000113

Claims (9)

1.一种基于Stacking集成学习的软件缺陷预测方法,其特征在于该方法的步骤包括:
第一步,使用代码行数度量法提取测试软件样本的一类特征,使用Halstead科学度量法提取测试软件样本的二类特征,使用McCabe度量法提取测试软件样本的三类特征,使用CK度量法提取测试软件样本的四类特征;
第二步,将第一步得到的一类特征、二类特征、三类特征和四类特征进行汇总,得到测试软件的数据集D;
第三步,对第二步得到的数据集D进行数据预处理;
第四步,用RF模型、XGBoost模型和SVM模型构建初级模型,将数据集D分为训练集Dtrain和测试集Dtest,训练集Dtrain样本数量为N,测试集Dtest样本数量为M;
第五步,构建次级模型LR的新训练集Ctrain和新测试集Ctest,将P1,P2,P3合并成为新训练集的样本的Ctrain的二次特征集合Xtrain,将Ytrue_1作为新训练集Ctrain的样本的目标值集合,将T1,T2,T3组合成集合Xtest作为输入到次级模型LR的新测试集Ctest的样本的二次特征集合,将Ytrue_2作为新测试集Ctest的样本的目标值集合,将新训练集{Xtrain,Ytrue_1}训练次级模型LR,将新测试集{Xtest,Ytrue_2}的特征值集合输入训练好的次级模型LR得到预测值Ypredict,初级模型和训练后的次级模型LR形成复合模型;
第六步,将待测试软件样本代入到训练好的复合模型中进行预测,得到待测试软件样本的缺陷预测结果;
第七步,进行复合模型的预测性能的评估;将Ypredict和Ytrue_2进行对比计算,得到复合模型的预测的各评价指标,完成基于Stacking集成学习的软件缺陷预测。
2.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:
所述的第一步中,一类特征为与代码行数相关的度量元,包括测试软件样本的代码总行数、注释行数、实际运行行数、方法行数。
3.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:
所述的第一步中,二类特征为测试软件样本的程序长度、程序容量、语言等级、编写效率、编写耗时度量元。
4.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:
所述的第一步中,三类特征为测试软件样本的循环结构数量、程序选择结构的数量度量元。
5.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:
所述的第一步中,四类特征为测试软件样本的类中方法数、类继承深度、类的直接子类个数、类的耦合类个数、类中方法调用总数、类内方法引用实例数度量元。
6.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:
所述的第三步中,对第二步得到的数据集D进行数据预处理的具体步骤包括:(1)去除含有异常值或缺失值的样本;(2)对样本的特征进行标准化处理;(3)统一规范化样本目标值,将有缺陷类样本的目标值设置为1,无缺陷类样本的目标值设置为0。
7.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:
所述的第四步中,RF模型的训练方法为:首先使用数据集D对RF模型进行训练,采用K折交叉验证法训练,方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_ii∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到RF模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的RF模型中得到预测结果P1i,将测试集输入到经过新训练集Dt_i训练好的RF模型中得到预测结果T1i,直到i>K结束此操作;
复完上述的K次操作之后,得到P11,P12,...,P1k共K个
Figure FDA0003594958930000031
行1列的集合,将它们整合为一个集合P1,此时的P1共有
Figure FDA0003594958930000032
个样本,其值为RF模型训练集Dtrain中样本是正例的概率,并且P1与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T11,T12,...,T1k共K个
Figure FDA0003594958930000033
行1列的集合进行加权平均得到集合T1,此时的T1共有
Figure FDA0003594958930000034
个样本,其值为RF模型对测试集Dtest中样本是正例的概率,并且T1与测试集Dtest的目标值集合Ytrue_2一一对应。
8.根据权利要求7所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:
所述的第四步中,XGBoost模型的训练方法为:首先使用数据集D对XGBoost模型进行训练,采用K折交叉验证法训练,方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_ii∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到XGBoost模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的XGBoost模型中得到预测结果P2i,将测试集输入到经过新训练集Dt_i训练好的XGBoost模型中得到预测结果T2i,直到i>K结束此操作;
复完上述的K次操作之后,得到P21,P22,...,P2k共K个
Figure FDA0003594958930000035
行1列的集合,将它们整合为一个集合P2,此时的P2共有
Figure FDA0003594958930000036
个样本,其值为XGBoost模型训练集Dtrain中样本是正例的概率,并且P2与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T21,T22,...,T2k共K个
Figure FDA0003594958930000041
行1列的集合进行加权平均得到集合T2,此时的T2共有
Figure FDA0003594958930000042
个样本,其值为XGBoost模型对测试集Dtest中样本是正例的概率,并且T2与测试集Dtest的目标值集合Ytrue_2一一对应。
9.根据权利要求8所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:
所述的第四步中,SVM模型的训练方法为:首先使用数据集D对SVM模型进行训练,采用K折交叉验证法训练,方法为:将训练集均分为K份互斥的子数据集{Dtrain_1,Dtrain_2,...,Dtrain_K},重复K次以下操作:
将第i份子数据集Dtrain_i作为验证集Dv_ii∈(1,2,...,K),其余K-1份子数据集作为新训练集Dt_i输入到SVM模型中进行训练,将验证集输入到经过新训练集Dt_i训练好的SVM模型中得到预测结果P3i,将测试集输入到经过新训练集Dt_i训练好的SVM模型中得到预测结果T3i,直到i>K结束此操作;
复完上述的K次操作之后,得到P31,P32,...,P3k共K个
Figure FDA0003594958930000043
行1列的集合,将它们整合为一个集合P3,此时的P3共有
Figure FDA0003594958930000044
个样本,其值为SVM模型训练集Dtrain中样本是正例的概率,并且P3与训练集Dtrain的目标值集合Ytrue_1一一对应,将得到的T31,T32,...,T3k共K个
Figure FDA0003594958930000045
行1列的集合进行加权平均得到集合T1,此时的T1共有
Figure FDA0003594958930000046
个样本,其值为SVM模型对测试集Dtest中样本是正例的概率,并且T3与测试集Dtest的目标值集合Ytrue_2一一对应。
CN202210389330.9A 2022-04-13 2022-04-13 一种基于Stacking集成学习的软件缺陷预测方法 Pending CN114706780A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210389330.9A CN114706780A (zh) 2022-04-13 2022-04-13 一种基于Stacking集成学习的软件缺陷预测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210389330.9A CN114706780A (zh) 2022-04-13 2022-04-13 一种基于Stacking集成学习的软件缺陷预测方法

Publications (1)

Publication Number Publication Date
CN114706780A true CN114706780A (zh) 2022-07-05

Family

ID=82175440

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210389330.9A Pending CN114706780A (zh) 2022-04-13 2022-04-13 一种基于Stacking集成学习的软件缺陷预测方法

Country Status (1)

Country Link
CN (1) CN114706780A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116523136A (zh) * 2023-05-05 2023-08-01 中国自然资源航空物探遥感中心 基于多模型集成学习的矿产资源空间智能预测方法及装置

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108763096A (zh) * 2018-06-06 2018-11-06 北京理工大学 基于深度信念网络算法支持向量机的软件缺陷预测方法
CN111400180A (zh) * 2020-03-13 2020-07-10 上海海事大学 一种基于特征集划分和集成学习的软件缺陷预测方法
CN111522743A (zh) * 2020-04-17 2020-08-11 北京理工大学 一种基于梯度提升树支持向量机的软件缺陷预测方法
CN112131089A (zh) * 2020-09-29 2020-12-25 九江学院 软件缺陷预测的方法、分类器、计算机设备及存储介质
CN112380132A (zh) * 2020-11-20 2021-02-19 北京轩宇信息技术有限公司 基于航天软件缺陷数据集类不平衡的对抗验证方法及装置
CN112465040A (zh) * 2020-12-01 2021-03-09 杭州电子科技大学 一种基于类不平衡学习算法的软件缺陷预测方法
CN112631898A (zh) * 2020-12-09 2021-04-09 南京理工大学 基于cnn-svm的软件缺陷预测方法
WO2021093140A1 (zh) * 2019-11-11 2021-05-20 南京邮电大学 一种跨项目软件缺陷预测方法及其系统
CN113837266A (zh) * 2021-09-22 2021-12-24 西南民族大学 一种基于特征提取和Stacking集成学习的软件缺陷预测方法
CN114064459A (zh) * 2021-10-25 2022-02-18 西安理工大学 基于生成对抗网络和集成学习的软件缺陷预测方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108763096A (zh) * 2018-06-06 2018-11-06 北京理工大学 基于深度信念网络算法支持向量机的软件缺陷预测方法
WO2021093140A1 (zh) * 2019-11-11 2021-05-20 南京邮电大学 一种跨项目软件缺陷预测方法及其系统
CN111400180A (zh) * 2020-03-13 2020-07-10 上海海事大学 一种基于特征集划分和集成学习的软件缺陷预测方法
CN111522743A (zh) * 2020-04-17 2020-08-11 北京理工大学 一种基于梯度提升树支持向量机的软件缺陷预测方法
CN112131089A (zh) * 2020-09-29 2020-12-25 九江学院 软件缺陷预测的方法、分类器、计算机设备及存储介质
CN112380132A (zh) * 2020-11-20 2021-02-19 北京轩宇信息技术有限公司 基于航天软件缺陷数据集类不平衡的对抗验证方法及装置
CN112465040A (zh) * 2020-12-01 2021-03-09 杭州电子科技大学 一种基于类不平衡学习算法的软件缺陷预测方法
CN112631898A (zh) * 2020-12-09 2021-04-09 南京理工大学 基于cnn-svm的软件缺陷预测方法
CN113837266A (zh) * 2021-09-22 2021-12-24 西南民族大学 一种基于特征提取和Stacking集成学习的软件缺陷预测方法
CN114064459A (zh) * 2021-10-25 2022-02-18 西安理工大学 基于生成对抗网络和集成学习的软件缺陷预测方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116523136A (zh) * 2023-05-05 2023-08-01 中国自然资源航空物探遥感中心 基于多模型集成学习的矿产资源空间智能预测方法及装置

Similar Documents

Publication Publication Date Title
CN113256066B (zh) 基于PCA-XGBoost-IRF的作业车间实时调度方法
CN110825644B (zh) 一种跨项目软件缺陷预测方法及其系统
Aliniya et al. A novel combinatorial merge-split approach for automatic clustering using imperialist competitive algorithm
CN108345544B (zh) 一种基于复杂网络的软件缺陷分布影响因素分析方法
CN110008983A (zh) 一种基于分布式模糊支持向量机的自适应模型的网络流量分类方法
CN110147321A (zh) 一种基于软件网络的缺陷高风险模块的识别方法
CN116108758B (zh) 滑坡易发性评价方法
CN111338950A (zh) 一种基于谱聚类的软件缺陷特征选择方法
CN111522743B (zh) 一种基于梯度提升树支持向量机的软件缺陷预测方法
CN113674087A (zh) 企业信用等级评定方法、装置、电子设备和介质
CN111309577B (zh) 一种面向Spark的批处理应用执行时间预测模型构建方法
CN114706780A (zh) 一种基于Stacking集成学习的软件缺陷预测方法
CN114897085A (zh) 一种基于封闭子图链路预测的聚类方法及计算机设备
CN111027636A (zh) 基于多标签学习的无监督特征选择方法及系统
CN110717602A (zh) 一种基于噪音数据的机器学习模型鲁棒性评估方法
Hasanpour et al. Improving rule-based classification using Harmony Search
Chen et al. Wafer map defect pattern detection method based on improved attention mechanism
Marian et al. Software defect detection using self-organizing maps
CN111459838B (zh) 一种基于流形对齐的软件缺陷预测方法及系统
CN113837266A (zh) 一种基于特征提取和Stacking集成学习的软件缺陷预测方法
CN114328221A (zh) 基于特征和实例迁移的跨项目软件缺陷预测方法及系统
CN113448840A (zh) 基于预测缺陷率和模糊综合评价模型的软件质量评价方法
CN112906751A (zh) 一种非监督学习识别异常值的方法
CN116365519B (zh) 一种电力负荷预测方法、系统、存储介质及设备
CN113435655B (zh) 扇区动态管理决策方法、服务器及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination