Skip to content
← 模型评估

/knowledge/notes/thresholds-roc-auc

概念笔记 · 模型评估

分类阈值与 ROC 曲线

分类器输出分数,你选一个阈值。这篇笔记讲这个选择为什么重要,它控制什么,怎样衡量权衡。

学于
统计机器学习COMP90051
时间
2023 年第一学期
应用于
人类还是机器?
阅读 / 复习
约 5 分钟阅读2026-10-15

输出分数或概率的分类器要回答的问题,比你想象的多一个:不仅是"这个是正类吗?",还要"我有多大把握才能说是?"。降低阈值会抓到更多正例,但也会误报更多。提高阈值会减少误报,但会漏掉正例。这篇笔记讲的就是这个权衡和怎样衡量它。

01

基本想法

大多数分类器都会产生一个分数:逻辑回归给出概率,线性模型给出一个值,距离型分类器给出相似度。你选一个 阈值,标记所有高于这个值的为正类。这个选择不是在模型里一次定死的,而是一个独立的决策,要根据你的目标来定。

如果你在做病症诊断,漏诊(假负例)可能比误诊(假正例)更严重。你可能会降低阈值,抓到更多病例,即使这样会把一些健康人标记为患者。如果你在批准贷款,情况就反了:虚假放贷会损失钱,所以你提高阈值来更加严格。

混淆矩阵记录四个数:真正例(TP,你说是,你说对了),假正例(FP,你说是,你说错了),真负例(TN,你说否,你说对了)和假负例(FN,你说否,你说错了)。所有指标都是这四个数的某个比例。

02

数学

真正率(敏感度、召回率)是你抓到的所有实际正例的比例:

TPR=TPP=TPTP+FN\mathrm{TPR} = \frac{\mathrm{TP}}{P} = \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}}

假正率是你误标的所有负例的比例:

FPR=FPN=FPFP+TN\mathrm{FPR} = \frac{\mathrm{FP}}{N} = \frac{\mathrm{FP}}{\mathrm{FP} + \mathrm{TN}}

精度回答的是"我说是正例的那些东西,其中有多少真的是正例":

Precision=TPTP+FP\mathrm{Precision} = \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FP}}

召回率是真正率的另一个名字。F₁ 是精度和召回率的调和平均数,是一个单一数字,如果哪一个很低就会给较低的分数:

F1=2⋅Precision⋅RecallPrecision+RecallF_1 = \frac{2 \cdot \mathrm{Precision} \cdot \mathrm{Recall}}{\mathrm{Precision} + \mathrm{Recall}}

ROC 曲线在你改变阈值时,绘制真正率对假正率。一个角落是"所有都标记为正"(高真正率,高假正率)。对面角落是"都标记为否"(低真正率,低假正率)。随机猜测会沿对角线。好的分类器会从对角线上方弯起。曲线下面积(AUC)是一个单数字:0.5 表示随机,1 表示完美。

03

动手试

下面的工具展示两个重叠的分数分布,一个是实际的正例,一个是负例。滑块设定你的阈值。当你移动它时,观察混淆矩阵、指标和 ROC 曲线的变化。

TP: 91
FP: 12
TN: 88
FN: 9
精度: 0.88
召回率: 0.91
F₁: 0.90
在阈值 0.50 处,精度为 0.88,召回率为 0.91,F₁ 为 0.90。
合成数据模拟,带随机种子,同样的设置每次结果都一样。竖线显示你选择的阈值在分数分布上的位置。
  • 把阈值拖到最左。真正率达到 1(你抓到了所有正例),但假正率也达到 1(你把所有负例都标记错了)。
  • 把它拖到最右。真正率下降(你漏掉了正例),假正率仍接近零(你没有误标负例)。
  • 找到那个"肘部",真正率很高、假正率仍然很低。那是 ROC 曲线从对角线向上弯起的地方。
  • 看精度和召回率怎样分化。降低阈值时召回率(真正率)上升,但精度(你预测为正的那些里面,真的是正的比例)下降,因为你多标记了很多负例。

04

我在哪用到它

05

容易出错的地方

06

参考资料