Page 238 - 《软件学报》2026年第7期
P. 238
刘子扬 等: 基于个性化联邦学习的跨项目软件缺陷预测方法 2923
计算架构进行模型训练和推理. 网络结构参数方面, Transformer 模型维度设置为 32, 多头注意力机制采用 2 个注
意力头, Transformer 层数设为 1 层. 训练参数配置中, 客户端数量设定为 5 个, 本地训练步数为 3 步, 批次大小为
32, 全局训练轮数为 50 轮, 学习率采用 1E−3, 并使用 AdamW 优化器. 差分隐私参数设置中, 跨项目实验的隐私预
算 ε 设为 5.0, 隐私失败概率 δ 设为 1E−5, 噪声乘数为 0.8, 梯度裁剪范数阈值为 1.0, 采用高斯噪声机制保护客户
端隐私. 联邦学习参数包括个性化系数 β 设为 0.3, 模型性能权重 α 设为 0.8, 客户端选择比例为 0.6. 损失函数参数
方面, 采用 Focal Loss 处理类别不平衡问题, 其中, α = 0.25, γ = 2.0; 正则化参数中, dropout 率在不同层设置为
0.1–0.2, 以防止过拟合. 本文的框架开源至: https://anonymous.4open.science/r/PRIDE-SDP-4FE/.
5 结果分析与讨论
为评估 PRIDE-SDP 方法的有效性, 我们研究了以下 5 个问题.
● RQ1: PRIDE-SDP 相较于其他跨项目缺陷预测方法是否更好?
为全面评估 PRIDE-SDP 框架的有效性, 本文选择了 8 种具有代表性的跨项目缺陷预测方法作为基线进行对
比实验. 这些方法涵盖了该领域的主要技术路径: 传统机器学习方法 (LR)、深度学习方法 (DPDF)、迁移学习方
法 (eCPDP)、预训练模型方法 (CodeBERT-PT)、基于注意力机制的异构预测方法 (MNAFM)、生成对抗网络方法
(AC-GAN) 以及联邦学习方法 (ALMITY、Fed-OLF). 选择这些基线方法的主要考虑因素包括: (1) 技术路径的多
样性和代表性; (2) 方法的先进性和在相关领域的影响力; (3) 实现的可获得性以确保实验结果的可重复性. 实验结
果表明, 在大多数情况下, PRIDE-SDP 框架的综合性能显著优于其他 8 种跨项目缺陷预测基线方法. 如表 2 所示,
PRIDE-SDP 在 5 个不同的数据集组上, 尤其在 AUC、F1-score 和 G-mean 这 3 个关键评估指标上, 展现出了强大
的竞争力和优越性, 证明了其在处理项目异构性方面的有效性.
表 2 各个跨项目缺陷基线方法在全部数据集组的对比结果
数据集组 评估指标 PRIDE-SDP LR DPDF eCPDP CodeBERT-PT MNAFM AC-GAN Fed-OLF ALMITY
AUC 0.758 4 0.585 0.636 5 0.532 4 0.567 4 0.570 5 0.713 4 0.724 5 0.644 3
Accuracy 0.678 5 0.591 2 0.560 9 0.406 7 0.576 7 0.578 2 0.644 5 0.654 2 0.625 8
Precision 0.724 3 0.653 0 0.695 5 0.431 5 0.623 4 0.604 3 0.688 9 0.698 7 0.603
Recall 0.585 5 0.379 3 0.283 1 0.574 2 0.501 2 0.577 1 0.563 4 0.563 4 0.570 6
MDP
F1-score 0.630 2 0.476 3 0.347 3 0.490 9 0.555 7 0.567 1 0.619 8 0.623 4 0.586 3
Specificity 0.771 5 0.802 6 0.838 8 0.239 2 0.658 9 0.579 3 0.723 4 0.745 1 0.741 3
G-mean 0.657 7 0.547 5 0.465 9 0.358 2 0.574 7 0.513 1 0.638 4 0.647 8 0.650 3
Balance 0.678 5 0.591 2 0.560 9 0.406 7 0.580 1 0.671 2 0.643 4 0.654 2 0.655 9
AUC 0.672 2 0.656 9 0.602 0.518 0 0.575 6 0.727 8 0.623 4 0.644 5 0.666 3
Accuracy 0.623 1 0.646 7 0.643 7 0.507 0 0.568 5 0.677 2 0.608 9 0.608 9 0.639 4
Precision 0.618 0.650 5 0.637 1 0.502 9 0.598 7 0.659 9 0.615 6 0.623 4 0.618 5
Recall 0.525 5 0.485 9 0.530 8 0.533 4 0.498 5 0.601 2 0.502 3 0.498 7 0.579 2
GitHub-Python
F1-score 0.542 8 0.556 1 0.574 8 0.465 9 0.544 0 0.628 9 0.553 3 0.553 4 0.598 2
Specificity 0.793 3 0.779 4 0.744 1 0.515 0 0.642 3 0.741 2 0.704 5 0.712 3 0.738
G-mean 0.588 7 0.614 8 0.626 6 0.422 0.565 9 0.667 5 0.594 9 0.595 6 0.653 8
Balance 0.659 4 0.632 6 0.637 4 0.524 2 0.570 4 0.601 2 0.603 4 0.605 5 0.658 6
AUC 0.711 0.668 8 0.647 2 0.703 1 0.618 4 0.700 6 0.692 3 0.683 4 0.650 9
Accuracy 0.661 4 0.665 3 0.666 9 0.658 6 0.606 5 0.659 1 0.653 4 0.644 5 0.626 2
Precision 0.645 3 0.703 1 0.685 6 0.662 1 0.612 3 0.622 6 0.678 9 0.656 7 0.629 7
Recall 0.624 2 0.498 1 0.552 0 0.562 5 0.598 7 0.596 9 0.583 4 0.597 8 0.594 9
ReLink
F1-score 0.624 5 0.581 9 0.606 9 0.601 2 0.605 4 0.612 0 0.627 6 0.625 6 0.611 8
Specificity 0.670 1 0.808 5 0.767 5 0.754 0 0.623 4 0.626 0 0.713 4 0.688 9 0.738 3
G-mean 0.631 3 0.634 1 0.649 8 0.647 9 0.610 9 0.659 9 0.645 1 0.642 5 0.662 7
Balance 0.647 2 0.653 3 0.659 7 0.658 2 0.611 1 0.611 5 0.648 4 0.643 4 0.666 6

