一种基于Boosting的代价敏感软件缺陷预测方法与流程

文档序号:11952144阅读:291来源:国知局
一种基于Boosting的代价敏感软件缺陷预测方法与流程
本发明公开了一种基于Boosting的代价敏感软件缺陷预测方法,属于软件工程应用的
技术领域

背景技术
:目前对于软件缺陷预测的静态方法在机器学习领域使用的经典学习方法主要有朴素贝叶斯、支持向量机、决策树、BP神经网络、随机森林或者基于这些方法的改进方法等,然而由于这些学习算法有的对于被测试数据有严格的限制,有的处理数据不够准确,导致将其应用于软件缺陷的预测时取得的效果并不理想。并且以上所有的学习方法在小样本情况下,由于并未综合考虑训练数据不足、训练结果的类不平衡、预测过程中误报和漏报代价不等等一系列问题而导致预测效果不理想。现有的基于代价敏感的软件缺陷预测技术中,通常以朴素贝叶斯或者BP神经网络等作为学习器,通过对漏报和误报赋予不同的权值来进行预测,考虑到了漏报与误报代价不等的情况,但是针对小样本的数据集,可供参考的数据集十分有限,并且现有的代价敏感方法对于缺陷预测存在的类不平衡问题考虑得较少,因而导致在小样本的缺陷预测领域的预测性能较弱。目前,在软件的有缺陷类与无缺陷类的不平衡方面,常用的处理方法可归结为过抽样与欠抽样。在小样本的预测方面,常用重抽样以扩大数据集。Boosting被认为是一种提升任一给定弱学习器算法精度的通用方法,其独立于特定的弱学习器,在重抽样方面表现出较好的适应性;同时,由于Boosting是依据不平衡数据集中的预测误差进行权值更新的机制,因此对于平衡数据集也具有一定贡献。然而,由于在计算Boosting抽样中各实例权值时,对于代价敏感考虑得较少,因此并不完全适用于软件缺陷预测。技术实现要素:本发明的发明目的是针对上述
背景技术
的不足,提供了一种基于Boosting的代价敏感软件缺陷预测方法,采用Boosting和代价敏感相结合的方案,在属性子集选择过程中以及权值更新过程中都加入了代价敏感思想,在小样本数据下实现对软件缺陷的精确预测,解决了小样本数据下训练数据不足、预测过程中误报和漏报代价不等而导致预测效果不理想的技术问题。本发明为实现上述发明目的采用如下技术方案:一种基于Boosting的代价敏感软件缺陷预测方法,包括如下步骤:A、对原始数据集预处理后进行T次Bootstrap抽样得抽样集,依据每次抽样的数据集训练预测器,每次抽样后以代价敏感的预测误差为依据删除数据集中的部分属性;使用Bootstrap重抽样训练的预测器对训练数据进行预测并计算预测误差代价,根据训练数据的预测误差代价对各训练数据赋予不同权值用于下次抽样,即整个Bootstrap重抽样过程采用基于代价敏感的机制调整每一次抽样数据集中各实例的权重与属性子集的选择,每次抽样过程结束后都可以计算出其对应的学习器集合,所有抽样过程结束后可得到T个学习器集合,原始数据集包括n个训练数据,每个训练数据对应于一个软件模块的属性集合与缺陷归类;B、根据已有的T个学习器集合,对原始数据集中所有训练数据使用留一法逐一进行预测,最终得出n个预测结果,从n个预测结果中选取最优值作为分类阈值。C、用已有的T个学习器集合预测待预测数据集,将已经得到的分类阈值作为对待预测数据的分类标准以实现待预测数据缺陷的归类划分,待预测数据集包含若干待预测数据,每个待预测数据表征一个待预测模块的属性集合。作为基于Boosting的代价敏感软件缺陷预测方法的进一步优化方案,步骤A中所述每次抽样以代价敏感的预测误差为依据删除数据集中的属性,以k-NN预测器为弱学习器,以各训练数据表征的属性集合为当前属性集,采用基于代价敏感的随机逐一删除属性的子集选择方法查找使预测误差代价最小的k值与属性子集,k为参考的近邻数目,具体方法为:在删除属性后的预测误差代价小于或等于当前属性集上的预测误差代价时,以删除属性后的属性子集、预测误差代价取代当前属性集、当前属性集上的预测误差代价,开始下一次学习;直至删除属性后的预测误差代价大于当前属性集上的预测误差代价时,结束k-NN预测器的学习;其中,costParient(1)=average{cost(1),cost(2),…,cost(i),…,cost(n)},cost(i)=abs(yi-yi^)×CL,yi-yi^>0×CE,yi-yi^<0×1,yi-yi^=0,i=1,2,3...n,]]>costParient(1)为当前属性集上所有训练数据的平均预测误差代价,n为原始数据集中训练数据的个数,cost(i)为当前属性集上第i个训练数据的预测误差代价,yi为原始数据集中第i个训练数据的真实值,为当前属性集上第i个训练数据的预测值,CL为漏报代价,CE为误报代价。作为基于Boosting的代价敏感软件缺陷预测方法的再进一步优化方案,步骤A中所述整个Bootstrap重抽样过程采用基于代价敏感的机制调整每一次从原始数据集中抽取各实例的权重,具体包括如下步骤:A1、计算当前Bootstrap抽样训练的预测器对各训练数据的最大预测误差代价costMax,costMax=max{cost(1),cost(2),…,cost(i),…,cost(n)};A2、计算当前属性集上第i个训练数据预测错误的损失L(i):L(i)=cost(i)costMax,i=1,2,3...n,]]>A3、计算当前属性集上第i个训练数据预测错误的平均加权损失w(i)为当前属性集上第i个训练数据的权重;A4、计算当前Bootstrap抽样训练的预测器的置信度β:A5、计算下一次Bootstrap抽样时各训练数据的权重:为下一次Bootstrap抽样时第i个训练数据的权重;A6、归一化处理步骤A5求得的下一次Bootstrap抽样时各训练数据的权重得到下一次Bootstrap抽样的权重向量。再进一步的,基于Boosting的代价敏感软件缺陷预测方法中,步骤B的具体方法为:B1、由步骤A中Bootstrap重抽样后得到的T个预测器对原始数据集中的各训练数据进行预测,取每个训练数据的T个预测值的中位数为该训练数据的预测结果;B2、依次以每个训练数据的预测结果为分类值寻找分类阈值:根据当前分类值对其它训练数据的预测结果进行分类,其它训练数据的预测结果小于分类值时为正常模块,其它训练数据的预测结果大于或等于分类值时为缺陷模块,计算当前分类值的召回率、误报率、平衡值,选取最大平衡值对应的分类值为分类阈值。再进一步的,基于Boosting的代价敏感软件缺陷预测方法中,步骤C的具体方法为:C1、由步骤A中Bootstrap重抽样后得到的T个预测器对待预测数据集中的各待预测数据进行预测,取每个待预测数据的T个预测值的中位数为该待预测数据的预测结果;C2、比较待预测数据的预测结果和步骤B选取的分类阈值:在待预测数据的预测结果小于分类阈值时,判定待预测数据为正常模块,在待预测数据的预测结果大于或等于分类阈值时,判定待预测数据为缺陷模块。再进一步的,基于Boosting的代价敏感软件缺陷预测方法中,在步骤A之前还包括预处理原始数据集和待预测数据集的步骤,具体方法为:将原始数据集和待预测数据集转换为矩阵形式:原始数据集矩阵的每一行记录一个训练数据的所有属性值和缺陷归类,原始数据集矩阵的每一列记录所有训练数据同一属性的值或缺陷归类,待预测数据集矩阵的每一行记录一个待预测数据的所有属性值,待预测数据集矩阵的每一列记录所有待预测数据同一属性的值;删除无效数据:删除原始数据集矩阵中记录重复数据和无效数据的行以及记录无效属性的列,删除待预测数据集矩阵中记录重复数据的行以及记录无效属性的列;归一化处理:对删除无效数据后的原始数据集矩阵的每一列进行离差标准化处理,对删除无效数据后的待预测数据集矩阵的每一列进行离差标准化处理。本发明采用上述技术方案,具有以下有益效果:(1)本发明将代价敏感应用于小样本的软件缺陷预测中,针对小样本数据不足的特点,采用Boosting技术进行重抽样以扩大数据集,在属性选择时使用代价敏感的随机删除某个属性的子集选择方式,能够防止有价值属性被误删除,同时使得所选择的属性子集有利于减小预测误差代价,在权重更新时使用代价敏感的权重更新机制,对于代价较大的数据集赋予较大权重,能够确保对这类数据进行多次的学习,得到更为合理的集成预测模型,采用本发明经Boosting重抽样训练得到的集成预测模型能够在小样本数据下对软件缺陷进行精确的预测。(2)针对预测过程中所犯的漏报与误报代价不等的问题,通过应用代价敏感算法调整错误代价比例来满足测试者对于误报率和漏报率的特定要求,有助于提高预测精度。(3)本发明提出通过使用k-NN预测器为弱学习器进行集成预测,以避免朴素贝叶斯要求属性之间线性无关的缺陷以及BP神经网络应用于抽样过程中导致时间复杂度过高的缺陷。附图说明图1为基于Boosting的代价敏感软件缺陷预测方法的模型图。图2为基于Boosting的代价敏感软件缺陷预测方法的流程图。具体实施方式下面结合图1与图2对发明的技术方案进行详细说明。通过Bootstrp迭代抽样生成多个不同k-NN的基本预测器集合并以此构建集成k-NN预测器的缺陷预测模型的方法,最终将该模型用于软件缺陷预测领域。抽样过程中使用基于代价敏感的随机逐一删除属性的子集选择方法查找使预测误差代价最小的k值与属性子集,并使用基于预测误差代价敏感的权重更新机制对Bootstrp重抽样中的不同实例赋予相应权值,以此构造权重向量作为下一次的抽样依据,基于新的抽样集,重新寻找使代价最小的k值与属性子集,直至得到所设定个数的基本预测器。由所有基本预测器组成预测性能较高的集成预测器,并将集成预测器用于新软件模块缺陷与否的预测。基于Boosting的代价敏感软件缺陷预测模型图如图1所示。步骤一:通过Bootstrap重抽样构造多个k-NN预测器集合a.在执行训练与预测之前,需要先对原始数据集和待预测数据集进行预处理。首先将训练用的原始数据集与待预测数据集分别转化为矩阵形式:原始数据集矩阵的每一行记录一个训练数据的所有属性值和缺陷归类,原始数据集矩阵的每一列记录所有训练数据同一属性的值或缺陷归类,原始数据集矩阵的行数对应训练数据的个数,列数为属性数目+1,最后一列为缺陷归类;待预测数据集矩阵的每一行记录一个待预测数据的所有属性值,待预测数据集矩阵的每一列记录所有待预测数据同一属性的值,待预测数据集矩阵的行数对应训练数据的个数。预处理的内容还包括删除重复实例、无效实例、无效属性,数据归一化等。重复实例即具有完全一致的属性与缺陷归类的若干行,此时仅保留一行信息;无效实例即具有完全一致的属性,却有不同缺陷归类的若干行,此时需要删除所有不一致信息行;无效属性即对于所有实例信息行,该列信息都相同,此时认为该信息在预测过程中不具备任何作用,因此应删除此列,删除原始数据集矩阵中记录重复数据和无效数据的行以及记录无效属性的列,删除待预测数据集矩阵中记录重复数据的行以及记录无效属性的列。归一化是将训练数据和待预测数据都归一化至[0,1]区间的过程,归一化的目的是为了消除属性之间的量纲影响,增强属性之间的可比性。该模型中对原始数据集的每一列、待预测数据集的每一列分别使用离差标准化(Min-MaxNormalization)进行归一化处理,转换函数如下:x*=x-minmax-min,]]>其中,x为当前列数据,x*为x的归一化值,max为样本某列数据的最大值,min为样本该列数据的最小值。b.重抽样模块首先在原始数据集D(|D|=n)上使用Bootstrap方法采用等概率方法抽取抽取数据集D1(|D1|=n),在D1上使用1-NN方法进行训练求出使得预测误差代价costParient(1)最小的属性子集。训练方式为逐个预测D1中各实例得出预测值,并与真实值比较,当某实例预测值小于真实值时,即存在将有缺陷模块预测为无缺陷模块的风险,此时用误差绝对值乘以漏报代价CL,反之,预测值大于真实值意味着有可能将无缺陷模块预测为有缺陷模块,需用误差绝对值乘以误报代价CE,当预测值与真实值相等时,误差绝对值乘系数1即可。costParient(1)=average{cost(1),cost(2),…,cost(i),…,cost(n)};上式中,cost(i)表示当前属性集上第i个训练数据的预测误差代价,其计算方式为:cost(i)=abs(yi-yi^)×CL,yi-yi^>0×CE,yi-yi^<0×1,yi-yi^=0,i=1,2,3...n,]]>记此时所有实例的平均绝对误差为costParient(1),属性集为uParent(1),costParient(1)为当前属性集上所有训练数据的平均预测误差代价,yi为原始数据集中第i个训练数据的真实值,为当前属性集上第i个训练数据的预测值。c.若训练数据的属性数为m,则从全部属性中使用随机删除的方式,去除一个属性后剩余的m-1个属性记uChild(1),以uChild(1)作为参数再次使用1-NN方法进行训练,记此时得出的平均绝对误差为costChild(1),若costChild(1)<=costParient(1),则令costParient(1)=costChild(1),uParent(1)=uChild(1),对uParent(1)继续进行属性子集的选择与误差代价的计算,直至平均误差代价开始增大,此时costParient(1)中记录的便是使用1-NN预测器预测的误差代价。d.同理使用2-NN预测器进行训练,得出此时的最小误差代价costParient(2),直至计算得到costParient(kMax),k为参考的近邻数目,kMax是预设定参考近邻最大值。e.选取costParient(1)至costParient(kMax)中的最小值所对应的k值与uParent(k)作为基本预测器h1的参数k和u(k),即得到预测模型h1(k,u(k))。f.使用预测模型h1对原始数据集D进行验证,具体步骤如下:(1)首先是计算当前预测器ht预测D中各训练数据的最大预测误差代价costMax:costMax=max{cost(1),cost(2),…,cost(i),…,cost(n)};(2)计算(x,y)∈D的损失,将其映射至[0,1]区间,得到当前属性集上第i个训练数据预测错误的损失L(i):L(i)=cost(i)costMax,i=1,2,3...n;]]>(3)依据当前属性集上第i个训练数据的权重w(i)和预测错误的损失L(i)求得平均加权损失L‾=Σi=1nw(i)L(i);]]>(4)求出当前Bootstrap抽样训练的预测器ht的置信度β:β=L‾1-L‾;]]>(5)上式中β越小,则平均加权误差越小,在依据β进行D中训练数据权重的更新过程中引入代价选择思想,则更新过程为:v(i)=w(i)β1-L(i)×CL,yi-yi^>0×CE,yi-yi^<0×1,yi-yi^=0,]]>v(i)为下一次Bootstrap抽样时第i个训练数据的权重(6)最后进行归一化处理v(i)得到新的权重向量w(i),并根据新的权重向量抽样生成下一次的数据集Dt+1:w(i)=v(i)Σi=1nv(i),]]>g.对每一数据集权重更新后按新的权重向量进行下一次的Bootstrap抽样,并得出新的预测模型h2(k,u(k)),直至达到规定的抽样次数T为止,最终得到T个基本k-NN预测器集合h1,h2…hT。对于某一实例进行近邻选择时由于Bootstrap为有放回的重复抽样,每次抽样过程中可能存在重复的数据实例(xi,yi),i∈(1,n),y∈{0,1},此时选用k-NN得出的预测效果不具有泛化能力,因此近邻选择时搜索的范围应为除去当前数据行外的所有其它原始数据,即D-(xi,yi)。步骤二:通过多个k-NN预测器集合进行阈值选择集成预测的另一关键点是阈值选择部分,阈值选择是为了使该预测模型达到自适应的学习功能而采用的处理方式。该方法从训练集各实例的集成预测结果中选出一个合适的值作为区分待预测模块是否为缺陷模块的阈值,集成预测结果小于该阈值的模块被标记为正常模块,否则便为缺陷模块。首先给出软件缺陷预测的评价准则召回率pd、误报率pf,平衡值bal,定义二值分类的混淆矩阵如下表:表1二值分类的混淆矩阵表分类Positive分类Negative真值PositiveTPFN真值NegativeFPTNpd=TPTP+FN,pf=FPFP+TN,bal=1-(0-pf)2+(1-pd)22,]]>由混淆矩阵表格可知,对于软件整体而言,较高的pd一般会导致较高的pf,因此需要选取bal作为二者之间的平衡值。阈值选择模块中确定阈值的过程即依次以h1、h2……hT的所有预测器逐个对原始实例进行预测,使用T个预测器集合以留一法对原始数据进行预测并计算误差,以T个预测器预测结果的中位数作为当前实例的集成预测结果,预测结束后得到n个集成预测结果。再依次以其中一个集成预测结果作为分类值,其余的预测结果中小于该分类值的被识别为正常模块,否则为缺陷模块,并对比真实值计算当前分类值的pd、pf、bal。从n个bal中选取最大值对应的分类值作为最终的阈值threshold。步骤三:对待预测数据集进行缺陷归类的划分对于待预测的软件模块x,使用预测器集合h1、h2……hT得出T个预测结果,以T个结果的中位数作为待预测模块x的预测结果yPredict,将yPredict与threshold进行对比,若yPredict<threshold,则判定x为正常模块,否则为缺陷模块。经过步骤一、二,对比原有的代价不敏感的boosting软件缺陷预测方法,虽然待预测软件的误报率pf会有较小程度的增加,但却可以较大程度的提高待预测样本的召回率pd。该方法适合于小样本的软件缺陷预测,对于pd值要求较高的军事、航空航天、医疗、金融等领域,该方法可以提供一定参考。综上所述,本发明具有以下有益效果:(1)本发明将代价敏感应用于小样本的软件缺陷预测中,针对小样本数据不足的特点,采用boosting进行重抽样以扩大数据集,在属性选择时使用代价敏感的随机删除某个属性的子集选择方式,能够防止有价值属性被误删除,同时使得所选择的属性子集有利于减小预测误差代价,在权重更新时使用代价敏感的权重更新机制,对于代价较大的数据集赋予较大权重,更够确保这类数据进行多次的学习,得到更为合理的集成预测模型,采用本发明经boosting重抽样训练得到的集成预测模型能够在小样本数据下对软件缺陷进行精确的预测。(2)针对预测过程中所犯的漏报与误报代价不等的问题,通过应用代价敏感算法调整错误代价比例来满足测试者对于误报率和漏报率的特定要求,有助于提高预测精度。(3)本发明提出通过使用k-NN预测器为弱学习器进行集成预测,以避免朴素贝叶斯要求属性之间线性无关的缺陷以及BP神经网络应用于抽样过程中导致时间复杂度过高的缺陷。通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案实质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器,或者网络设备等)执行本发明的实施例或实施例的某些部分所述的方法。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1