跳到主要内容

100 个病人里 1 个患病,一个永远说「没病」的机器,准确率 99%。这个数字一文不值——这一章讲该看什么数。

评价指标:一个准确率骗过所有人

1. 这一章讲什么

三件事: 准确率为什么会在不平衡数据上彻底失灵;

精确率(报出的里多少是对的)回答什么问题;

召回率(该找的找出多少)、F 值、宏/微平均各自回答什么问题; 以及比「答得对不对」更深一层的问题——模型说的「九成把握」有几分可信。

它在全书链条里的位置: 这是第 05 章第五个零件(评价)的完整版。 它也是第 07 章的配套:过拟合靠验证集发现,而「好还是不好」本身, 得靠这一章的指标来说。 后面第 32 章评价大模型、第 33 章评价智能体时, 这套「把一个问题拆成几个数」的思路会原样回来。

只需要第 05 章。

2. 顶层全景

模型在测试集上的每个预测,只有四种结局:
真实为正 真实为负
预测为正 │ 真正例 TP │ 假正例 FP │ ──▶ 精确率:这一行里对的比例
预测为负 │ 假负例 FN │ 真负例 TN │
──▶ 召回率:这一列里捞回的比例

准确率 = (TP+TN)/全体 ← 四个格子的混账,容易被最大的格子( TN )淹没
精确率 = TP/(TP+FP) ← 「报出来的里有多少是真的」
召回率 = TP/(TP+FN) ← 「真的里有多少被报出来」
F 值 = 两者的调和平均
宏/微平均 = 多分类时,先平均还是先汇总——决定小类别有没有被听见
概率校准 = 模型说 0.9 的那批预测里,是不是真有九成对

一句话链条: 一个数(准确率)容易被最多的那一格淹没 → 把四种结局摆开 → 从行和列各问一个问题 → 多分类时还要决定「每类平等」还是「大类说了算」 → 最后再问一句:它对自己的把握,本身准不准。

3. 先看现象:99% 的准确率一文不值

书里有一道习题,把问题推到了极限:正负样本比例 1∶99 的二分类任务, 一个模型把所有样本都预测为负类1

算一下:100 个样本,99 个负例——不属于目标类——全部「预测正确」;

1 个正例——属于目标类——被漏掉。准确率 = 99/100 = 99%。

一个什么都没做的模型,拿到了 99 分。而那个唯一的正例—— 往往正是任务的全部意义(找出的那个病人、那笔欺诈交易、那篇违规内容)—— 被它漏得干干净净。

所以「这个模型准确率 99%」这句话,在回答之前必须先问: 各类别占多少比例? 这就是这一章存在的理由。

4. 准确率到底在数什么

先把被骗的那个数摆清楚。准确率是「预测正确的样本占全体样本的比例」2, 和它对应的是错误率 = 1 − 准确率3

它的毛病不在定义,在它把四种完全不同的结局混成了一个数。 书里把对某一个类别 c 的预测结果分成四种4:

名字含义在那 100 个样本里(全预测为负的模型)
真正例 TP真实为 c,也预测为 c0
假负例 FN真实为 c,被错判成别的1(那个正例被漏了)
假正例 FP真实不是 c,被错判成 c0
真负例 TN真实不是 c,也预测不是 c99

这张 2×2 的表叫混淆矩阵5

准确率的骗局一眼可见了: 它 = (TP+TN)/100 = (0+99)/100。 分子里最大的那一格是 TN——「把负的认成负的」。在不平衡数据里, TN 天然巨大,把「全部都猜负」这种零信息量行为刷成了 99 分。 书里还特意补了一句:对类别 c 来说,TN 这一格「一般不需要关注」6—— 可它偏偏占了准确率分子的大头。

(顺带一个会救命的提醒:中文文献里「准确率」和「精确率」的定义 在有些文献中刚好相反,看书看论文都要按上下文(前后文)判断2。)

5. 拆开看:查得准还是查得全

问题: 不要混账,那就从行和列各问一个问题。

精确率:所有被预测为 c 的样本里,预测对的比例7。 它站在「预测为正」这一行上问:你报出来的警报里,有多少是真的? 对那个全预测为负的模型:TP = 0、FP = 0,精确率 = 0 ÷ 0—— 此时没有定义。这个「没有定义」本身就是信息: 这个模型一次警报都没拉过,谈不上准不准。

召回率:真实为 c 的样本里,被正确预测的比例8。 它站在「真实为正」这一列上问:真的里,你捞出来多少? 同一个模型:TP = 0、FN = 1,召回率 = 0 ÷ 1 = 0。 骗局当场拆穿:99% 的准确率,召回率是零。

两个数为什么必须一起看: 把它们推向极端最容易懂—— 「见人就报警」召回率 100% 但精确率惨不忍睹;「十年报一次、次次都对」 精确率满分但召回率没法看。只报一个数,都是在藏另一个数。

F 值:精确率和召回率的调和平均9。 调和平均的特性是被较小的那个数拖住——两个数里任何一个塌了,F 值就跟着塌, 这正是它被造出来的原因。一般形式带一个权衡系数 β,β = 1 时叫 F1 值, 是最常用的版本9

多分类时还有最后一道工序:各类的数怎么汇总。 书里给了两种平均10:

做法怎么算谁在说话
宏平均先算每一类的指标,再对各类取算术平均每个类别一票,小类别也能被听见
微平均先把所有类别的 TP/FP/FN 汇总,再算指标每个样本一票,大类别说了算

书里给了两条关键读法11:类别样本数量不均衡时, 宏平均更能反映小类别上的性能,微平均更容易受大类别影响; 而单标签多分类任务里,精确率、召回率、F1 的微平均往往相同, 而且和准确率关系密切——也就是说,报微平均约等于换了个说法报准确率。

6. 模型说 0.9 的时候,有几分把握

前面所有指标只问「答得对不对」。但模型输出的是一个概率,还有一层可问:

书里的例子:一个分类模型经常给出 0.9 的预测概率, 那么在这些预测里,应该大约有 90% 是对的。 如果实际只有 60% 对,它的准确率可能不低, 但它的「把握」是虚高的12这个要求叫概率校准。

什么时候这件事要命?书里的回答:医疗诊断、金融风控、自动驾驶—— 这些场景里模型不只是给答案,还要给出可靠的置信度, 拿不准的时候交给人工复核13

和校准连在一起的是不确定性估计,书里把它拆成两个来源14:

数据的不确定性 数据本身有噪声、类别边界本来就模糊
── 数据再多也去不掉

模型的不确定性 训练数据有限、或分布变了,模型对某些区域不了解
── 理论上能靠更多数据、更好模型压下去

这两个来源的治法完全不同:前者该学会「说不知道」, 后者该补数据。一个校准良好的模型,会把两种不确定区分开报出来—— 「这道题本身模糊」和「这种题我没见过」,是两种完全不同的警报。

7. 完整流程回看

到这里,第 05 章那张流程图的两半可以合上了15:

训练阶段 训练集 + 验证集 + 模型 + 损失函数 + 优化算法 ──▶ 学好的模型
评价阶段 测试集 + 学好的模型 + 评价指标 ──▶ 性能报告

注意两个阶段用的是不同的数据、不同的目标: 训练阶段最小化的是替身损失(交叉熵),评价阶段算的是这一章的指标。 第 05 章说「训练的目标和评价的目标不是同一个数」, 这一章就是后半句的全部内容。

8. 主走查:100 个样本、1 个正例,两个 99 分模型

输入: 100 个样本,1 个正例、99 个负例。两个模型都是为演示构造的。

模型甲:全部预测为负。

TP = 0 FP = 0 FN = 1 TN = 99

准确率 = (0 + 99) / 100 = 99%
精确率 = 0 / 0 没有定义(一次警报没拉过)
召回率 = 0 / 1 = 0
F1 = 跟着没有定义

模型乙:预测 2 个为正,其中 1 个真、1 个冤。

TP = 1 FP = 1 FN = 0 TN = 98

准确率 = (1 + 98) / 100 = 99% ← 和模型甲一模一样
精确率 = 1 / (1 + 1) = 0.5
召回率 = 1 / (1 + 0) = 1.0
F1 = 2 × 0.5 × 1.0 / (0.5 + 1.0) = 0.67

两个模型准确率同为 99%,其余指标天差地别。「99% 准确率」的错觉,当场被打掉。

再把宏平均和微平均也走一遍(拿模型乙,两个类别各算一份):

正类: P = 0.5 R = 1.0 F1 = 0.67
负类: P = 98/98 = 1.0 R = 98/99 = 0.99 F1 ≈ 0.995

宏平均精确率 = (0.5 + 1.0) / 2 = 0.75 ← 小类别(正类)拉了它一把
微平均精确率 = (1 + 98) / 100 = 0.99 ← 大类别(负类)说了算

宏平均 0.75、微平均 0.99,同一个模型、同一份预测—— 0.75 在说「你对那个最重要的类别其实只有五成把握」, 0.99 在说「总体很好」。该听哪个,取决于你在乎的是小类别还是大账本。 (微平均 0.99 正好等于准确率,印证了书里「两者关系密切」那句话11。)

9. 作者的判断与证据

书里给了明确定义的: 准确率、四种结局、精确率、召回率、F 值、 宏/微平均的公式,全部写死2478910

书里给了重要提醒的: 中文「准确率/精确率」在有些文献中定义刚好相反2; 宏平均 F1 在文献里还有另一种写法(先算各类 F1 再平均), 比较两篇文章的结果时,要先核对用的是哪套定义10

书里点到为止的: AUC、ROC 曲线、PR 曲线、Top-N 准确率只给了名字, 指向别的教材16。本书从简,这一章也照此办理—— 它们的共同思想仍是「调阈值(判为正类的分界线),把四种结局的此消彼长画出来」。

书里把校准落到实处的: 「经常给 0.9 的预测,这批里就该约九成对」 是书里给出的操作性定义12,不是比喻。

10. 边界与局限

阈值问题没有展开。 精确率和召回率都依赖「概率多大算正类」这条线, 调这条线换来的整套权衡(ROC、PR 曲线)书里只点名16

校准只说了「是什么」,没说「怎么修」。 让一个模型的概率变得可信(温度缩放等做法)不在这本书的覆盖范围, 书里只定义了问题和它和高风险场景的关系。

多标签、排序、生成类任务的指标都没讲。 那些任务里「一个样本可以同时属于多个类」或「答案是一整段话」, 这一章的 2×2 表格装不下——第 32 章评价大模型时会遇到它的继任者。

11. 可带走的

  1. 报准确率之前先报类别比例——1∶99 时,全猜多数类也是 99 分;
  2. 混淆矩阵只有四格:TP、FP、FN、TN,所有分类指标都是这四格的除法;
  3. 精确率问「报出来的里有多少真」,召回率问「真的里有多少捞出来」——只报一个就是藏另一个;
  4. F 值用调和平均,谁塌跟谁塌——这是它比算术平均诚实的原因;
  5. 精确率为 0÷0 时没有定义,而「没有定义」本身就是诊断信息;
  6. 宏平均让每类一票,微平均让每个样本一票——不均衡时它们讲的故事完全不同;
  7. 微平均往往约等于准确率——报微平均约等于没换指标;
  8. 说 0.9 的那批预测里就该约九成对,这叫概率校准;
  9. 「题本身模糊」和「这种题没见过」是两种不确定,治法完全不同;
  10. 训练用替身损失,评价用真实指标——两个阶段的数据和目标都不一样。

12. 原文地图

主题原书章原文位置
1∶99 全预测为负第2章 机器学习概述text/03-ch02.txt:1352(搜「一个模型将所有样本」)
准确率与错误率第2章 机器学习概述text/03-ch02.txt:454(搜「最常用的评价指标为准确率」) · text/03-ch02.txt:463(搜「和准确率相对应的就是错误率」)
中文术语歧义提醒第2章 机器学习概述text/03-ch02.txt:460(搜「含义需要根据上下」)
四种结局第2章 机器学习概述text/03-ch02.txt:478(搜「真正例(True Positive」) · text/03-ch02.txt:485(搜「假负例」) · text/03-ch02.txt:492(搜「假正例」) · text/03-ch02.txt:500(搜「这种情况一般不需」)
混淆矩阵第2章 机器学习概述text/03-ch02.txt:502(搜「所示的混淆矩阵」)
精确率与召回率第2章 机器学习概述text/03-ch02.txt:519(搜「所有预测为类别」) · text/03-ch02.txt:526(搜「真实属于类别」)
F 值第2章 机器学习概述text/03-ch02.txt:532(搜「为精确率和召回率的调和平均」) · text/03-ch02.txt:536(搜「用于平衡精确率和召回率的重要性」)
宏平均与微平均第2章 机器学习概述text/03-ch02.txt:540(搜「先分别计算每一类的指标」) · text/03-ch02.txt:555(搜「在所有类别上汇总统计量」) · text/03-ch02.txt:557(搜「更能反映小类别上的性能」)
概率校准第2章 机器学习概述text/03-ch02.txt:568(搜「大约应有 90% 是正确的」)
不确定性估计第2章 机器学习概述text/03-ch02.txt:576(搜「后者常称为模型不确定性」)
完整流程第2章 机器学习概述text/03-ch02.txt:580(搜「训练阶段需要用到训练集」)
AUC/ROC/PR第2章 机器学习概述text/03-ch02.txt:561(搜「ROC」)

Footnotes

  1. 出处:「第2章 机器学习概述」第 1352 段(text/03-ch02.txt:1352,搜「一个模型将所有样本」)。 这是习题 2-7 的题干:「在一个正负样本比例为 1∶99 的二分类任务中, 一个模型将所有样本都预测为负类。1)计算该模型的准确率;2)说明为什么该模型并不好; 3)应结合哪些评价指标进行分析?」

  2. 出处:「第2章 机器学习概述」第 454 段(text/03-ch02.txt:454,搜「最常用的评价指标为准确率」)。 同页边注:「由于中文的模糊性,关于准确率和下文提到的精确率的定义在有些文献中刚好相反, 具体含义需要根据上下文进行判断。」 2 3 4

  3. 出处:「第2章 机器学习概述」第 463 段(text/03-ch02.txt:463,搜「和准确率相对应的就是错误率」)。

  4. 出处:「第2章 机器学习概述」第 478 段(text/03-ch02.txt:478,搜「真正例(True Positive」)、 第 485 段(搜「假负例」)、第 492 段(搜「假正例」)与第 499 段(搜「真负例」)。 2

  5. 出处:「第2章 机器学习概述」第 502 段(text/03-ch02.txt:502,搜「所示的混淆矩阵」)。

  6. 出处:「第2章 机器学习概述」第 500 段(text/03-ch02.txt:500,搜「这种情况一般不需」)。 原文:「对于类别 c 来说,这种情况一般不需要关注。」

  7. 出处:「第2章 机器学习概述」第 519 段(text/03-ch02.txt:519,搜「所有预测为类别」)。 原文:「精确率:所有预测为类别 c 的样本中预测正确的样本比例。」 边注:精确率也叫精度或查准率。 2

  8. 出处:「第2章 机器学习概述」第 526 段(text/03-ch02.txt:526,搜「真实属于类别」)。 原文:「召回率:真实属于类别 c 的样本中,正确预测的样本比例。」 边注:召回率也叫查全率。 2

  9. 出处:「第2章 机器学习概述」第 532 段(text/03-ch02.txt:532,搜「为精确率和召回率的调和平均」) 与第 536 段(text/03-ch02.txt:536,搜「用于平衡精确率和召回率的重要性」)。 原文:「β 用于平衡精确率和召回率的重要性,一般取值为 1。β = 1 时的 F 值称为 F1 值。」 2 3

  10. 出处:「第2章 机器学习概述」第 540 段(text/03-ch02.txt:540,搜「先分别计算每一类的指标」) 与第 555 段(text/03-ch02.txt:555,搜「在所有类别上汇总统计量」)。 原文还提醒:有些文献把宏平均 F1 定义为各类 F1 的直接平均,「两种写法都较常见, 因此在比较结果时需要留意具体定义」。 2 3

  11. 出处:「第2章 机器学习概述」第 556 段(text/03-ch02.txt:556,搜「微平均往往相同」) 与第 557 段(text/03-ch02.txt:557,搜「更能反映小类别上的性能」)。 2

  12. 出处:「第2章 机器学习概述」第 568 段(text/03-ch02.txt:568,搜「大约应有 90% 是正确的」)。 原文:「一个分类模型如果经常给出 0.9 的预测概率,那么在这些预测中大约应有 90% 是正确的; 若实际正确率只有 60%,模型虽然可能有较高准确率,但它的置信度明显偏高。 这类问题称为概率校准。」 2

  13. 出处:「第2章 机器学习概述」第 578 段(text/03-ch02.txt:578,搜「交给人工复核或采取更保守的决策策略」)。

  14. 出处:「第2章 机器学习概述」第 576 段(text/03-ch02.txt:576,搜「后者常称为模型不确定性」)。 原文:「一个模型的不确定性通常来自两方面:一是数据本身存在噪声或类别边界模糊, 即使有无限数据也难以完全消除;二是训练数据有限或分布变化导致模型对某些区域了解不足。 前者常称为数据不确定性,后者常称为模型不确定性。」

  15. 出处:「第2章 机器学习概述」第 580 段(text/03-ch02.txt:580,搜「训练阶段需要用到训练集」)。 原书图 2.6,本节按其结构重画。

  16. 出处:「第2章 机器学习概述」第 561 段(text/03-ch02.txt:561,搜「ROC」)。 原文提到了 AUC、ROC 曲线、PR 曲线与 TopN 准确率,详细内容指向《机器学习》[周志华, 2016] 第 2 章。 2