APP下载

基于非线性集成深度学习的软件模块风险预测

2021-12-10尤姗姗刘雪娇

计算机仿真 2021年11期
关键词:分类器权重样本

尤姗姗,刘雪娇

(杭州师范大学信息科学与技术学院,浙江 杭州 311121)

1 引言

如今计算机中软件的占比不断上升,系统越来越依赖软件,导致软件出现任何程度的风险都会造成计算机系统出现错误、失效和崩溃等情况[1]。通常情况下,为保证软件模块的稳定,有50%以上的资金都用于测试软件风险,浪费了大量人力和财力,所以在开发软件时利用有效的软件风险模块预测方法进行风险预测显得尤为重要[2-3]。

陈曙[4]等人提出基于领域适配的跨项目软件模块风险预测方法,该方法将领域适配和学习预测模型相融合,建立出软件样本相关权重,将权重添加到系统样本中,利用实例权重影响预测模型的训练,将软件样本中的风险数据集分配到训练数据集中,实现软件模块风险预测。该方法在预测软件模块风险前没有对软件模块数据进行预处理,只能在较高维度中进行预测,使得预测难度过大,降低了软件模块风险预测的精度,存在F1分数低的问题。杨杰[5]等人提出基于多源异构的软件模块风险预测方法,该方法首先利用数据统计特征求解出度量元相似度,其次构建不同软件项目的预测模型,输入软件参数,得到输出结果,最后根据结果相似度大小加权整合所有输出结果,实现软件模块风险预测。该方法没有通过主成分分析法对数据进行处理,无法保证数据互不依赖,也不能确保数据在计算过程中不被遗漏,因此软件模块在预测过程中信息数量庞大,且十分分散,大大降低了预测准确率,AUC的面积也会下降,AUC分数随之下降。包振栋[6]等人提出基于迁移学习的软件模块风险预测方法,该方法首先将软件风险预测问题转化为迁移学习问题,以此降低风险预测对训练样本的需求量,且不需要标注风险类别,在样本迁移学习的基础上采用贝叶斯理论预测出源领域风险数据集和目标数据集上的概率参数,得出软件模块风险预测算法,进而实现软件模块风险预测。该方法只是将预测问题进行转化,进而减少数据量,但这一处理会将数据中的有用信息损失掉,为了全面预测数据只能增加工作量,因此加长了预测时间,降低预测效率,也不能保证软件风险预测的总体精度。

为了解决上述方法中存在的问题,提出基于非线性集成深度学习的软件模块风险预测方法。

2 软件模块数据预处理

利用主成分分析法将软件风险数据进行简化,可确保信息损失最小化的同时将数据进行降维[7],因此选择主成分分析法对软件模块风险数据进行预处理。

假设软件模块数据集中包括n个训练样本,且每个训练样本中都含有ρ个观测变量,则此训练数据集的矩阵表达式为

(1)

主成分分析法的本质就是线性组合训练样本中的ρ个观测变量,构成全新的变量,即主成分变量,其表达式为

(2)

简化后的表达式为

Fi=w1ix1+w2ix2+…+wpixρ

(3)

式中,i=1,2,…,p。

上式中每个数据的主成分系数平方和都等于1,其表达式如下所示

(4)

式中,k=1,2,…,p。

在主成分分析法中不同主成分之间互不依赖,其表达式为

COV(Fi,Fj)=0

(5)

式中,i=1,2,…,p,j=1,2,…,p,且i≠j。

在主成分分析法中,软件数据的主成分变量F1可生成主成分变量中最大的主成分方差,其余变量互不相关,F2变量方差小于F1变量方差,以此类推可知Fi变量方差为最小。

经过对主成分分析法的分析可总结出基于主成分分析法的软件数据原始变量的处理过程如下:

步骤一,标准化处理软件风险原始数据集X可获取标准矩阵,其表达式为

X′ij=(xij-xmin)/(xmax-xmin)

(6)

式中,xmax表示软件原始数据集内风险数据的最大值,xmin表示软件原始数据集内风险数据的最小值。

步骤二,求解出标准矩阵X′的协方差矩阵

(7)

步骤三,运算协方差矩阵R的特征方程|R-λIρ|=0,在其中提取出软件特征值,并根据自大到小的顺序进行排列,得到λ1≥λ2≥…≥λρ,特征值越大代表数据中的主成分影响力越大,根据特征值求解出特征向量,将向量分别记为η1,η2,…,ηρ。

步骤四,在软件数据特征值的基础上运算出软件数据前m个主成分的累计贡献率,通常情况下,提取累计贡献率在85%-95%之间特征值相对应的m个主成分,且m

(8)

将软件数据经过主成分分析法处理后即可将其转换成数量少且互不依赖的软件数据集,进而实现数据降维[8]。

3 非线性集成学习的软件模块风险预测

将经过降维处理后的软件数据进行风险预测,预测包含样本集初始化、权重更新以及预测软件风险三大部分[9]。

3.1 软件训练样本集初始化

非线性集成深度学习方法是通过集成深度学习模式得到非线性分类器,实现训练样本集初始化后,重复进行Boosting学习算法,直到获取大量的弱分类器和相应的权重值后停止Boosting学习算法,根据数据权重值集成所有弱分类器进而构成非线性集成深度学习分类器。

将非线性集成深度学习中的训练样本进行标记,此标签类别具有可靠性,因而可直接在软件训练样本内任意抽取样本进行初始化处理,而其它集成深度学习方法标记的标签中存在“伪类别标签”,导致其方法的标签不可靠,因此在利用非线性集成深度学习进行训练的软件样本必须是未经过其它集成深度学习方法处理的原始软件样本,才可生成质量较高的非线性集成深度学习分类器。

假设在等价计算最小化函数条件下,未标记的训练样本存在风险的概率方程为

(9)

式中,pi表示未标记的软件训练模块xi存在风险的概率。

在等价计算最小化函数条件下,未标记的训练样本不存在风险的概率方程为

(10)

式中,qi表示未标记的软件训练模块xi不存在风险的概率。

(11)

3.2 权重向量更新方案

在多次Boosting运算过程中集成深度学习会生成大量的弱分类器和权重值,提取第t次运算得到的弱分类器和权重值,将其分别记为ft(x)和αt,并根据此次Boosting运算结果更新软件训练样本集的权重向量,更新后的向量记为Dt+1,利用Dt+1即可进行下一次Boosting运算。

通常情况下,集成深度学习会在上一次Boosting运算结果的基础上更新样本的权重向量,但这种更新向量的办法会导致错误分类训练样本的权重过高,反之正确分类样本的权重过低,且在预测风险样本的过程中,此方法未将错误预测风险成本考虑在内,导致测试成本急剧升高,其中将有风险样本预测成无风险样本会造成系统崩溃,可总结出将有风险样本预测成无风险样本比将无风险样本预测成有风险样本所使用的成本会更高,因而在预测软件风险过程中,必须十分注意有风险模块,则软件训练样本中存在风险和不存在风险的更新权重向量方案表达式分别为

(12)

利用上述方案更新权重向量不仅顾忌到Boosting运算结果,又顾忌软件样本自身属性,在分类软件样本的过程中,将存在风险的样本正确分类,其权重不变,而错误分类其权重会升高,将不存在风险的样本正确分类其权重下降,错误分类其权重不变,从而实现在运算过程中突显风险样本,使其更加受关注,尽可能避免将有风险软件预测成无风险软件。

3.3 非线性集成深度学习过程

在更新权重向量的基础上进行下一次Boosting运算,最终得到T个弱分类器和对应权重,融合所有分类器构成非线性集成深度学习分类器,通过此分类器得出软件模块中是否包含风险,则非线性集成深度学习风险预测过程为:

1)在高斯函数运算软件基础上求解软件模块间的相似度,则相似度表达式为:

(13)

2)初始化软件训练样本集

3)更新权重向量

求解出可更新软件样本集的权重向量公式,获取t+1次弱分类器和其权重,不间断地更新分类器直到Boosting运算结束停止更新。

利用权重将存在风险的软件模块和不存在风险的软件模块仔细分类,并凸显出存在风险的软件模块,实现软件模块的风险预测。

4 实验与结果

为了验证所提方法的整体有效性,在内存为8G,CPU是3.20GHz的硬件环境下对所提方法、文献[4]方法和文献[5]方法进行F1分数、AUC分数和混淆矩阵的测试。

4.1 F1分数

任意选取6组数据在μ为0.1,0.2,0.3,0.4,0.5的环境下计算出三种风险预测方法的平均F1数值,μ是软件模块训练集中已标记模块和未标记模块的比值,即μ越大,则被标记的软件模块越多,图1为不同方法的F1分数对比结果。

图1 μ不同时三种方法的F1分数

根据图1可知,随着μ值越来越大,三种风险预测方法的F1数值都有所上升,说明风险预测效果都有提升,但所提方法的上升能力最强,这是因为所提方法在预测软件模块风险前对软件模块数据进行了预处理,降低了数据维度,进而降低了风险预测难度,提高了软件模块风险预测的精度。

4.2 AUC分数

当μ等于0.1,0.2,0.3时,三种软件模块风险预测方法在5组数据集中的AUC分数如表1、表2和表3所示。

表1 μ为0.1时三种方法的AUC分数

表2 μ为0.2时三种方法的AUC分数

表3 μ为0.3时三种方法的AUC分数

AUC分数越接近1说明方法的风险预测效果越好,根据表中数据可知,所提方法的AUC分数更接近1,可证明所提方法的风险预测效果更好,这是因为所提方法利用主成分分析法在保证数据不被损失的情况下将数据进行降维,保证软件模块在预测过程中信息十分全面,需要分类的数据数量较少,大大增加了预测准确率,增大AUC的面积值,进而提高了AUC分数。

4.3 混淆矩阵

混淆矩阵是判断学习分类问题优劣的重要指标,混淆矩阵中的每列表示预测类别,每列总和就是预测该类别的数据总数,每行表示数据的实际类别,每行总数表示此类别的实际风险数据数量,现选取150个软件模块数据,测试不同方法的混淆矩阵,结果如表4、表5和表6所示。

表5 文献[4]方法混淆矩阵

表6 文献[5]方法混淆矩阵

根据表4、表5和表6可知,所提方法正确预测第一类别的数据数量是43个,其余两种方法分别是30个和29个,第二类别所提方法正确预测的数据数量是45个,其余两种方法分别是39个和36个,第三种类别预测出的风险数据数量仍是所提方法最高,这是因为所提方法提前将软件数据处理成互不依赖的精简数据,但其中又含有大量有用信息,因此在预测过程中不仅加快预测时间,又保证了软件风险预测的总体精度。

5 结束语

为解决目前方法所存在的问题,提出基于非线性集成深度学习的软件模块风险预测方法,该方法首先对软件模块数据进行预处理,并将训练集初始化以及更新权重,获取非线性集成深度学习分类器,进而实现软件模块风险预测,解决软件模块风险预测效果差的问题,提高工作效率的同时大大提高了软件测试精度。

猜你喜欢

分类器权重样本
少样本条件下基于K-最近邻及多分类器协同的样本扩增分类
权重望寡:如何化解低地位领导的补偿性辱虐管理行为?*
学贯中西(6):阐述ML分类器的工作流程
基于朴素Bayes组合的简易集成分类器①
权重常思“浮名轻”
规划·样本
为党督政勤履职 代民行权重担当
权重涨个股跌 持有白马蓝筹
人大专题询问之“方城样本”
基于AdaBoost算法的在线连续极限学习机集成算法