1.基于生成对抗网络和集成学习的软件缺陷预测方法,其特征在于,包括以下步骤:步骤1,对软件缺陷数据集进行预处理,将预处理后的数据集划分成训练集和测试集,计算训练集数据中缺陷类和非缺陷类数据的比值,记为重采样率;
步骤2,构造生成对抗网络模型,该模型包括生成器和鉴别器两部分;
步骤3,采用生成对抗网络对训练集数据进行训练,至生成对抗网络收敛或达到设置的迭代次数后,得到训练完成的生成对抗网络;
步骤4,使用训练完成的生成对抗网络,根据步骤1计算得到的重采样率,生成新的少数类别缺陷类数据,得到重采样后的训练集;
步骤5,使用集成学习AdaBoost方法,进行软件缺陷强分类器的训练,将步骤4重采样后的训练集输入至软件缺陷分类器,训练完成后;在测试集上检验分类器效果,得到软件缺陷预测评价指标;
所述生成器和鉴别器的损失函数如公式(1)和公式(2)所示:
(1)
(2)
其中DLoss为鉴别器的损失函数,GLoss为生成器的损失函数;生成器和鉴别器均采用Adam优化器,使用学习率(learning rate)、Betas和迭代次数三个超参数;xfake、xtrue、ytrue、yfake分别为生成器生成的伪造数据、真实的少数类别缺陷类数据、真实少数类别缺陷类数据的标签和伪造数据的标签,BCELoss为二元交叉熵损失函数,公式为:其中xi,yi分别为第i个软件缺陷样本和其对应的标签,n为总的样本数;
所述步骤2中生成器包括初始的随机噪声输入层、最终的生成数据输出层以及由线性层、批量归一化层和LeakyReLU激活函数组成的块式结构,在噪声输入层之后的第一个块式结构中不设置批量归一化层,同样在数据输出层的前一个块式结构中也不设置批量归一化层,在数据输出层采用Sigmoid激活函数,噪声输入维度为noise_dim,经过3个块式结构,最终经过输出层的全连接层,输出维度为out_dim;
所述步骤2中鉴别器包括初始的数据输入层,最终的鉴别结果输出层以及由线性层和LeakyReLU激活函数组成的块式结构;输入数据的维度为out_dim,同生成器输出的数据维度相同;鉴别结果输出层采用线性层和Sigmoid激活函数,鉴别器最终的输出结果为0到1的数值;
所述步骤3的步骤为:
步骤3.1,将训练集进行归一化操作,将其数值范围约束到0到1之间;
步骤3.2,将数值范围在0到1的随机噪声输入到生成器G中,生成伪造数据,并将该数据标签记为0;将步骤3.1中归一化后的训练集标签记为1,与伪造数据一同输入至鉴别器D中,区分真实数据和伪造数据;
步骤3.3,重复步骤3.2,至生成对抗网络收敛或达到设置的迭代次数后,得到训练完成的生成器G和鉴别器D;
所述步骤4的具体操作如下:步骤4.1,使用步骤3训练完成的生成对抗网络中的生成器G,根据步骤1中的重采样率k,计算得到需要生成的少样本软件缺陷类数据,将0到1的随机噪声输入至步骤3得到的生成器G中,经过生成器的计算,得到生成的少数类别缺陷类数据;
步骤4.2,对步骤4.1中生成的少数类别缺陷类数据,进行同步骤3.2中归一化操作相反的反归一化操作,与原始的软件缺陷少样本类训练数据合并后,得到重采样后的训练集数据;
所示步骤5的具体操作如下:
步骤5.1,将步骤4中重采样后训练集,进行十折交叉验证的划分,整个训练数据集划分成10份,每一份都将被作为验证集,在训练时对分类器进行检验,重复这个过程10次,最终加权平均得到分类器的训练性能指标,训练过程结束,得到训练完成的软件缺陷强分类器C;
步骤5.2,使用步骤5.1中的软件缺陷强分类器C,在测试集上进行模型分类性能的检验,得到强分类器C在测试集上的分类结果,检验该强分类器在测试集上的分类性能;
所述步骤5.1中软件缺陷强分类器C的训练采用AdaBoost学习方法,训练得到软件缺陷强分类器的过程,见公式(6)、(7)、(8);
(6)
(7)
(8)
其中, 为第m个决策树弱分类器的权重, 为第m个决策树弱分类器, 为集成学习得到的强分类器, 函数用来取m个弱分类器结果加权后的正负, 为第m个决策树弱分类器分类的错误率。