You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

全正类别预测集绘制ROC曲线出现警告及空图的解决方法问询

问题原因

ROC曲线和AUC指标的计算逻辑依赖测试集中同时存在**正样本(标签1,异常)和负样本(标签0,正常)**两类数据:
假阳性率(FPR)的计算公式为 FPR = 假阳性样本数 / 总真实负样本数,你当前测试集全为正样本,总真实负样本数为0,FPR无法计算,因此scikit-learn会抛出UndefinedMetricWarning警告,输出的fpr、tpr结果无效,绘制的ROC图自然为空。

解决方法

1. 优先调整测试集(最合理方案)

在测试集中补充标签为0的正常样本,确保测试集同时覆盖两类数据,再运行原有ROC绘制代码即可正常出图。
如果只是临时测试代码功能,可以临时给y_test和preds补充少量负样本测试,示例代码如下:

import matplotlib.pyplot as plt
import sklearn.metrics as metrics

# 补充负样本后的测试集
y_test = [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# 对应预测结果,可根据实际情况调整
preds = [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1]
fpr, tpr, threshold = metrics.roc_curve(y_test, preds)
roc_auc = metrics.auc(fpr, tpr)
plt.title('Receiver Operating Characteristic')
plt.plot(fpr, tpr, 'b', label = 'AUC = %0.2f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

2. 更换适配单类场景的评估指标

如果当前阶段确实无法获取带负样本的测试集,不要强行使用ROC/AUC指标,可更换为适配当前场景的评估方式:

  • 直接计算分类准确率:当前所有预测结果和真实标签一致,准确率为100%,可直接作为当前阶段的效果参考
  • 后续收集到含负样本的测试集后,再使用ROC/AUC、PR曲线等二分类通用指标评估效果

内容的提问来源于stack exchange,提问作者Fabio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:57:05