Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Receiver Operating Characteristic (ROC) Curve

受试者工作特征 (ROC) 曲线会绘制每个阈值对应的真阳性率和假阳性率。了解如何解读 ROC 曲线、AUC 和相关代码。

受试者工作特征(ROC)曲线是一种图表,展示二分类器在所有可能的决策阈值下区分两个类别的能力。它以真阳性率为纵轴、假阳性率为横轴绘图;模型分数使用的每个阈值对应一个点,因此一张图就涵盖了捕获阳性与产生误报之间的所有权衡。曲线下的面积,即曲线下面积(AUC),将整张图概括为一个与阈值无关的数值。这个名称源自第二次世界大战期间的雷达工程,当时它用于衡量雷达接收员区分敌机与噪声的能力;后来,这种方法扩展到了医学、心理学和机器学习(ML)。

ROC 曲线的绘制方法#

曲线上的每个点都来自在某个阈值下计算的混淆矩阵:

  • 真阳性率(TPR),也称召回率或灵敏度:TP / (TP + FN),即模型标记出的实际阳性所占比例。
  • 假阳性率(FPR):FP / (FP + TN),即被错误标记的实际阴性所占比例。FPR 等于 1 减去特异度。

将阈值从高到低移动,曲线会从 (0, 0)(没有任何样本被标记)延伸到 (1, 1)(所有样本都被标记)。如果分类器给所有阳性的排名都高于所有阴性,它会经过左上角;随机猜测的模型会沿对角线变化;如果曲线位于对角线下方,则表示分数的方向反了。AUC 等于随机选取的阳性样本得分高于随机选取的阴性样本的概率,因此 0.5 表示随机猜测,1.0 表示完美区分。绘制曲线需要使用连续分数,例如预测概率或置信度值,因为硬性的 0/1 标签只能提供一个点。以下示例在不平衡数据集上训练逻辑回归分类器,并使用 scikit-learn 的 roc_curve计算其曲线:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, roc_curve
from sklearn.model_selection import train_test_split

# Binary task where 10% of samples are positive
X, y = make_classification(n_samples=5000, weights=[0.9], class_sep=0.8, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)

# ROC analysis needs continuous scores, not hard 0/1 predictions
scores = LogisticRegression().fit(X_train, y_train).predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, scores)
print(f"AUC: {roc_auc_score(y_test, scores):.3f}")

# Each threshold is one point on the curve: higher recall costs more false alarms
for target in (0.80, 0.95):
    i = np.argmax(tpr >= target)  # first point that reaches the target TPR
    print(f"Threshold {thresholds[i]:.2f}: TPR {tpr[i]:.2f}, FPR {fpr[i]:.2f}")

该模型的 AUC 达到 0.963。阈值为 0.44 时,它能找出 82% 的阳性样本,FPR 为 0.01;若要达到 95% 的召回率,则必须将阈值降至 0.02,此时 FPR 会升至 0.26。在这个包含 130 个阳性样本和 1,120 个阴性样本的测试划分中,多找出 18 个阳性样本要付出多产生 279 个误报的代价。

选择工作点#

曲线展示了每个阈值的代价,具体应用则决定哪种代价可以接受:

  • 医学筛查:漏诊肿瘤的代价远高于进行后续扫描,因此筛查工具会在高 TPR 工作点运行,并接受更多需要放射科医生审核的假阳性。
  • 欺诈检测:每笔被拦截的合法付款都会让客户感到不满,因此银行会选择一个既能捕获大多数欺诈交易,又能将 FPR 控制在审核团队和客户都能接受的水平的工作点。
  • 错误代价相同:当两类错误的代价相同时,Youden J 统计量(TPR 减去 FPR)会选出高于对角线最远的点。

Ultralytics YOLO26 分类模型会通过 results[0].probs.data返回每个类别的概率,这是 ROC 分析所需的连续分数;因此,在带标签的验证集上收集某个类别的概率,就能得到该类别的一对其余类别 ROC 曲线,并根据部署环境的代价选择阈值。

精确率-召回率曲线绘制的是精确率与召回率的关系,而非 TPR 与 FPR 的关系。由于 TPR 和 FPR 都在单个类别内计算,阳性样本变得更稀少时,ROC 曲线仍保持不变,但精确率会下降。在欺诈筛查或异常检测等阳性样本稀少的场景中,即便 FPR 很低,误报数量仍可能超过真正检出的数量;一项关于不平衡数据集的 PLOS ONE 研究发现,在这种情况下,精确率-召回率图更有参考价值。目标检测使用精确率-召回率曲线和平均精度均值(mAP)进行评估,原因类似:可计为真阴性的背景区域没有上限,因此 FPR 没有固定的分母。

  • 准确率和 F1 分数:这些是基于单个阈值测得的数值,而 ROC 曲线及其 AUC 概括了所有阈值的表现。
  • 多类别图像分类:每个类别都有一条一对其余类别 ROC 曲线,各类别的 AUC 会取平均值,得到宏平均分数或按类别比例加权的分数;scikit-learn 的 roc_auc_score可通过 multi_class="ovr"进行计算。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来