基于粒子群优化和随机森林的软件故障预测
一、引言
软件故障预测是软件开发生命周期(SDLC)中软件测试的重要组成部分。如今,软件系统广泛应用于制造、安全、金融、商业等众多领域,甚至在飞机、航天飞机等复杂场景中也不可或缺。当组织为客户开发软件时,有责任提供高质量、可靠的软件。为确保软件可靠性,公司往往需投入大量时间、资金和资源来手动检查和纠正软件故障。
软件故障主要源于软件中的故障模块,软件故障预测是一项机器学习分类任务,旨在根据静态代码特征区分易故障模块和非易故障模块。然而,手动预测软件缺陷对于包含大型模块的软件来说,既繁琐又耗时,成本也很高。因此,大多数组织采用自动化预测器来聚焦故障模块,使软件开发人员能更快速、详细地分析软件的缺陷部分。
目前,有多种自动化预测器借助机器学习算法(如随机森林(RF)、朴素贝叶斯(NB)、支持向量机(SVM)、神经网络(NN)等)来更准确地检测软件故障。同时,还可使用参数优化方法(如梯度下降、粒子群优化(PSO)和遗传算法(GA))来优化预测模型的参数,以提高故障预测的准确性。
二、相关工作
- PSO求解非线性方程组 :Jaberipour等人提出了一种使用PSO算法求解非线性方程组的方法,将非线性方程组转化为最小化问题并求解,还通过一些标准问题验证了新PSO算法的效率。
- 处理软件缺陷预测中的不平衡数据 :Rodriguez等人研究了多种机器学习技术和性能指标,用于处理软件缺陷预测中的不平衡数据。他们使用了NASA MDP数据集的两个版本,一个包含不平衡数据,另一个通过预处理消除了不平衡。研究发现,虽然消除不平衡后的数据表现更好,但如果数据收集得当,预处理时不一定需要去除重复数据。
- 克服软件缺陷预测数据集中的类不平衡问题 :Chinnathambi和Lakshmi提出了一种克服软件缺陷预测数据集中类不平衡问题的方法,通过进化方法生成基于多样性的合成样本,确保合成样本位于聚类边界并消除分布度量中的异常值,该方法在召回率和误报率方面表现出色。
- PSO和GA与SVM结合 :Alsghaier和Akour将PSO和GA与SVM结合,并将混合模型的结果与SVM分类器进行比较,结论是SVM与优化算法的集成提高了预测性能。
- 机器学习技术在软件故障预测中的性能评估 :有作者对机器学习技术在软件故障预测中的性能进行了系统的文献综述,评估了多种机器学习模型,发现随机森林在所有研究中表现优于其他模型。
- 软件故障预测研究中的常用指标和算法 :Singh和Chug的研究旨在找出软件故障预测研究中常用的指标、数据集、技术和算法,以及哪种算法表现更好。他们发现静态代码指标、混合指标、过程指标、NASA数据集、决策树、人工神经网络和支持向量机是最常用的,线性分类算法、神经网络和决策树的表现优于其他算法。
从文献调查可以看出,决策树和随机森林在所有分类器中表现较好,当这些分类器与参数优化结合使用时,分类性能会得到提升。这也是本研究探索分类器和粒子群优化算法在软件故障预测中作用的动机。
三、粒子群优化(PSO)
PSO是一种基于随机种群的元启发式算法,灵感来源于自然界中的鸟群或鱼群。在PSO中,每个粒子代表待优化函数的一个可能解,每个粒子在N维问题空间中以位置$x_i = (x_{k1}, x_{k2}, …, x_{kN})$和速度$v_i = (v_{k1}, v_{k2}, …, v_{kN})$移动。
粒子的初始化是随机的,它们在N维问题空间中迭代移动,每次迭代后,每个粒子的个人最佳位置(pbest)和所有粒子的全局最佳位置(gbest)会更新,所有粒子会朝着最优解移动。粒子的速度和位置通过以下两个方程更新:
$v_{k i} = w × v_{k i} + c_1 × r_1 × (pbest_{k i} - x_{k i}) + c_2 × r_2 × (gbest_{k i} - x_{k i})$
$x_{k + 1 i} = x_{k i} + v_{k + 1 i}$
其中,惯性权重$w$控制速度向量,$r_1$和$r_2$是在0到1之间均匀分布的随机整数,$v_{k i}$是第$i$个粒子在第$k$次迭代时的速度,$x_{k i}$是第$i$个粒子在第$k$次迭代时的当前解(或位置),$c_1$和$c_2$是正的常数,也称为收缩因子。$v_{max}$是速度限制,用于防止粒子在搜索空间中快速移动而错过有希望的解,它根据问题的范围设置。
上述公式包含三个部分:惯性项($w × v_{k i}$)、认知项($c_1 × r_1 × (pbest_{k i} - x_{k i})$)和社会项($c_2 × r_2 × (gbest_{k i} - x_{k i})$)。惯性项$w$用于平衡粒子的探索和开发,取值范围通常为0.9到0.4或0.2,它决定了每个粒子先前速度对当前迭代的贡献。由于PSO通常能收敛到全局最优解,但早期收敛存在困难,因此使用收缩因子来确保PSO的早期收敛。根据文献调查,惯性项在平衡粒子的探索和开发方面优于收缩因子。
四、随机森林(RF)
随机森林是一种集成方法,由多个决策树组成。每个决策树给出一个预测,根据问题的不同,取决策树预测结果的多数或中位数/平均值作为最终预测结果。随机森林可以解决回归和分类问题,算法简单易用且效果显著。在分类问题中,考虑决策树的多数预测结果;在回归问题中,取决策树连续值预测的中位数/平均值作为最终输出。此外,随机森林还能处理具有多种特征类型和高维度的大型数据集。随机森林的参数及其可接受的搜索空间如下表所示:
| 参数 | 解释 | 参数搜索空间 |
| — | — | — |
| n_estimator | RF中的决策树数量 | [10, 100] |
| max_features | 每个决策树进行决策时允许使用的最大特征数 | [1, n_features
] (
n_features取决于每个数据集的特征数量) |
| max_depth | 每个决策树允许的最大深度 | [5, 50] |
| min_samples_split | 每个决策树可分配的样本数 | [2, 11] |
| min_samples_leaf | 决策树进行决策所需的最小叶子数 | [1, 11] |
| criterion | 确定分割质量 | [0, 1] |
五、数据集
本研究使用美国国家航空航天局(NASA)度量数据计划(MDP)的软件缺陷数据集来构建软件故障预测模型。每个NASA软件系统或子系统的数据集包含每个组成模块的静态代码指标,每行代表一个模块,除最后一列外的每列代表软件的属性,最后一列指定该模块是否有故障。因此,这是一个分类任务,模块被分为非故障模块和故障模块。具体数据集信息如下表所示:
| 数据集 | 属性数量 | 实例数量 | 非故障实例 | 故障实例 |
| — | — | — | — | — |
| CM1 | 22 | 498 | 449 | 49 |
| KC1 | 22 | 1183 | 869 | 314 |
| KC2 | 22 | 522 | 415 | 107 |
| MC1 | 40 | 9466 | 9398 | 68 |
| MC2 | 41 | 161 | 109 | 52 |
| PC1 | 22 | 549 | 479 | 70 |
| PC2 | 38 | 5589 | 5566 | 23 |
| PC3 | 39 | 1563 | 1403 | 160 |
| PC4 | 39 | 1458 | 1280 | 178 |
六、PSO与随机森林模型(PSO - RF)
从随机森林的参数表可以看出,有六个参数(n_estimators、max_features、max_depth、min_samples_split、min_samples_leaf和criterion)会影响随机森林的准确性。为了提高模型的准确性,需要确定这些参数的最佳组合。
在PSO中,每个参数被视为一个维度,粒子在创建的N维空间中随机分布。为了优化随机森林的六个参数,所有粒子在六维空间中以随机值(在其搜索空间范围内)初始化。然后,根据PSO的方程,每次迭代后更新每个粒子的pbest和所有粒子的gbest。经过一定次数的迭代,粒子会收敛到所选目标函数的最小值,该最小值的坐标即为能最准确预测软件故障的最佳参数组合。
同时,从数据集信息可以发现,大多数NASA MDP数据集存在类不平衡问题,即故障实例的数量远少于非故障实例。本研究采用过采样技术来解决这个问题,即复制少数类实例以调整数据集中的类分布,使其与多数类平衡。调整后的数据集经过预处理,可作为训练集、验证集和测试集用于模型。采用三重交叉验证技术将数据集划分为训练数据和验证数据,有助于有效构建模型。此外,还定义了目标函数,并使用随机森林分类器与PSO结合,对故障和非故障软件模块进行分类。
以下是PSO - RF模型的操作步骤:
1.
参数初始化
:在六维空间中,为所有粒子随机初始化随机森林的六个参数值(在其搜索空间范围内)。
2.
迭代更新
:根据PSO方程,每次迭代更新每个粒子的pbest和所有粒子的gbest。
3.
解决类不平衡
:采用过采样技术复制少数类实例,调整数据集的类分布。
4.
数据预处理
:对调整后的数据集进行预处理,得到训练集、验证集和测试集。
5.
交叉验证
:使用三重交叉验证技术将数据集划分为训练数据和验证数据。
6.
定义目标函数
:确定用于评估模型性能的目标函数。
7.
分类
:使用随机森林分类器与PSO结合,对故障和非故障软件模块进行分类。
通过上述步骤,可以构建一个基于PSO - RF的软件故障预测模型,利用该模型可以更准确地预测软件中的故障模块。
graph LR
A[参数初始化] --> B[迭代更新]
B --> C[解决类不平衡]
C --> D[数据预处理]
D --> E[交叉验证]
E --> F[定义目标函数]
F --> G[分类]
以上是该模型的流程图,展示了从参数初始化到最终分类的整个过程。通过这个流程,可以清晰地看到PSO - RF模型的构建和运行步骤,有助于更好地理解和应用该模型进行软件故障预测。
基于粒子群优化和随机森林的软件故障预测
七、结果与讨论
在使用PSO优化参数后,将随机森林分类器作为归纳算法,考虑的性能指标包括准确率得分和AUC值,具体结果如下表所示:
| 数据集 | PSO–RF 准确率 | PSO–RF AUC |
| — | — | — |
| CM1 | 96.02 | 0.96 |
| KC1 | 90.01 | 0.91 |
| KC2 | 87.89 | 0.88 |
| MC1 | 99.85 | 0.99 |
| MC2 | 85.51 | 0.88 |
| PC1 | 96.10 | 0.97 |
| PC2 | 99.94 | 0.99 |
| PC3 | 96.48 | 0.97 |
| PC4 | 96.27 | 0.96 |
将该模型在不同数据集上的准确率得分与其他文献中模型的准确率得分进行比较,结果如下表所示:
| 作者及年份 [参考文献] | 检查的数据集 | 现有工作的平均准确率 | 提出模型(PSO + RF)的平均准确率 |
| — | — | — | — |
| Alsghaier 和 Akour (2020) | CM1, KC1, KC2, MC1, MC2, PC1, PC2, PC3, PC4 | PSOGA–SVM = 88.27 | 94.23 |
| Banga 和 Bansal (2020) | CM1, KC1, MC2, PC1, PC2, PC3, PC4 | KNN = 71.74
SVM = 64.07 | 94.33 |
| Singh 和 Chug (2017) | CM1, KC1, KC2, PC1 | NB = 83.84
NN = 86.36 | 92.50 |
另外,Yucalar等人提出使用随机森林和多层感知器等集成预测器来检测软件故障,性能指标为曲线下面积得分。本研究提出的模型比该文献中使用的所有集成预测器表现更好,具体比较结果如下表所示:
| 数据集 | 提出模型的 AUC 值 | [3] 中集成预测器的最大 AUC 值 |
| — | — | — |
| CM1 | 0.96 | 0.77 |
| KC1 | 0.91 | 0.87 |
| MC2 | 0.88 | 0.76 |
| PC1 | 0.97 | 0.86 |
| PC3 | 0.97 | 0.83 |
从以上表格可以看出,提出的 PSO–RF 模型优于所有具有基线参数的其他分类器,也优于 PSO 与支持向量机结合的模型。
八、结论
软件故障预测对于任何公司都至关重要,使用自动预测器而非人工手动预测,能大幅减少检测软件故障所需的时间、资源、人力和资金。自动预测器使软件更可靠,因为开发软件耗时,长期手动维护繁琐,而这些预测器能在短时间内识别故障,并在软件早期阶段进行修复。
本文使用 PSO 优化随机森林分类器的参数,PSO 作为搜索算法检测软件故障,随机森林作为归纳算法,评估指标为准确率和曲线下面积得分。研究发现,提出的模型优于所有具有基线参数的其他分类器,以及 PSO 与支持向量机结合的模型。所使用数据集的准确率得分范围为 88% 到 99%,AUC 得分也表现良好。
以下是对整个研究过程的总结列表:
1.
问题提出
:软件故障预测重要但手动预测成本高,引出自动预测器。
2.
相关研究
:回顾多种软件故障预测相关研究,发现决策树和随机森林结合参数优化效果好。
3.
模型构建
:介绍 PSO 和随机森林原理,使用 NASA MDP 数据集,采用 PSO - RF 模型,解决类不平衡问题。
4.
结果验证
:通过准确率和 AUC 等指标验证模型优于其他对比模型。
graph LR
A[问题提出] --> B[相关研究]
B --> C[模型构建]
C --> D[结果验证]
这个流程图展示了整个研究从问题提出到结果验证的完整过程,有助于理解研究的逻辑架构。通过本研究,为软件故障预测提供了一种更有效的方法,未来可进一步探索优化模型,以适应更多复杂的软件场景。
超级会员免费看
949

被折叠的 条评论
为什么被折叠?



