Page 314 - 《软件学报》2021年第7期
P. 314
2232 Journal of Software 软件学报 Vol.32, No.7, July 2021
rate,简称 FNR)、查准率(precision)、查全率(recall)和 F1 度量(F1-measure).
FPR 又称作误报率: FPR FP /(FP TN
).
FNR 又称作漏报率: FRN FN /(TP FN ).
查准率度量分类器正确输出的真阳性(占总输出的)比率: Precision TP /(TP FP ).
查全率度量分类器实际输出的真阳性(占总真阳性的)比率: Recall TP /(TP FN ).
F1 度量以调和平均数的方式平衡查准率和查全率: 12F Precision Recall /(Precision Recall
).
上述 5 个评价指标的取值范围均落于[0,1]之间,其中,Precision、Recall 和 F1 属于效益型度量指标,即数值
越大表示分类器的预测性能越好;相反,FPR 和 FNR 属于成本型效益指标,即数值越小越好.对于一个理想的缺
陷倾向性分类器而言,其既不会漏报缺陷(即 FNR 0,Recall )也不会误报缺陷(即 FPR 0,Precision 1 ),此
1
时,综合指标 F11.但在实际中,分类器很难做到这么理想,经常会“顾此失彼”,因此需要考察模型的多个方面.
4.4 实验环境与参数设置
实验环境为 Intel i7-6700K CPU、24G RAM、1T ROM 及 1 块 GeForce GTX 1080ti 11G 显卡.使用的深度
学习建模工具为 TensorFlow 1.3.0,缺陷预测分类器的建模工具为 Scikit-learn 0.19.1,编程语言为 Python 3.6.6.
使用的 C/C++代码词化工具为 Python 第三方库 Clang 7.0.0,其依赖工具 LLVM 7.0.0 和 Microsoft Visual Studio
14.0 的支持.
本文关于经验性参数的设置采用经典的格点搜索方法,通过五折交叉验证实验求均值后对比得到,其中,下
一节将以重要参数为例,详细展示模型参数的选取过程.具体地,CNDePor 方法中语言模型的超参数设置如下:
词频阈值=5(BE 数据集的词汇表大小 V BE =4496,RME 数据集的词汇表大小 V RME =3059);词向量维度 dim w =800;
LSTM 层数 N layer =1;LSTM 层的隐含节点 dim h =800;Dropout 方法的节点保留概率 P keep 均为 0.5;按时间展开步
长 N step =50;批处理的大小 N batch =30;训练轮数 N epoch =10,且每轮均对样本序列进行随机排序;允许的最大梯度范
数 grad max =5;LSTM 单元遗忘门偏置的初始值为 0,网络其他参数的初始值按[0.08,0.08]的均匀分布随机设置;
模型优化使用 SGD 算法,自适应学习率 rate 参数=7、=0.5;加权语言模型的权重比例系数选取范围为
[20].CNDePor方法的缺陷预测阶段,我们选取了广泛应用的 SVM和 RF分类器 [3,34,55,56] 进行对比实验,其中 SVM
的参数设置为:惩罚系数 C penalty =5,少数类的权重为 2,核函数为径向基核,径向基尺度参数 1/(2 2 ) 10 , 5 其余
参数为默认配置;RF 的参数设置为:决策树数量 N DT =15,特征的划分准则基于信息增益,其余参数为默认配置.
在利用分类器进行缺陷预测时,我们对度量元数据进行了标准化处理,采用的方法是 Min-Max 标准化,即将各维
度属性线性缩放至[0,1]之间.
5 实验过程与结果分析
实验针对表 3 所示的切片粒度数据集,利用五折交叉验证方法验证本文 CNDePor 在切片粒度缺陷预测方
面的应用性能.该方法的阶段 I(语料库学习阶段)是利用 W-NLM 学习代码样本.表 4 列出了在两种缺陷数据集
的五折交叉验证实验中语言模型获得的性能指标,其中包括平均困惑度(perplexity,简称 PP)值和耗时情况.
Table 4 5-fold cross validation results of language model
表 4 语言模型的五折交叉验证结果
BE-ALL 数据集 RME-ALL 数据集
语言模型 平均困惑度 平均耗时(s) 平均困惑度 平均耗时(s)
训练集 测试集 训练集 测试集
正向 1.556 1.523 800.5 1.398 1.409 466.8
W-NLM(=1)
逆向 1.554 1.523 785.3 1.401 1.412 459.5
正向 1.550 1.692 792.9 1.420 1.570 460.6
W-NLM(=10)
逆向 1.547 1.691 783.7 1.422 1.571 459.5
正向 1.550 1.727 792.8 1.421 1.630 460.8
W-NLM(=20)
逆向 1.547 1.727 786.0 1.421 1.637 460.9