机器学习速成·分类(2/4):准确率、召回率、精确率与 F1
本文参考 Google 机器学习速成课程 - 分类:准确率、召回率、精确率和相关指标 模块撰写,承接上一篇的混淆矩阵,讲清四个最常用的分类评估指标:准确率、召回率、假正例率、精确率,以及它们怎么选。
一、四大指标总览
上篇的混淆矩阵(TP/FP/FN/TN)可以计算出多个有用的指标。所有指标都基于一个固定阈值计算,且会随阈值变化。 哪一个最有意义,取决于任务、错误代价和数据是否平衡。
| 指标 | 回答的问题 | 公式 |
|---|---|---|
| 准确率 | 所有分类中,对了多少? | $\frac{TP+TN}{TP+TN+FP+FN}$ |
| 召回率(TPR) | 所有真实正例中,逮到了多少? | $\frac{TP}{TP+FN}$ |
| 假正例率(FPR) | 所有真实负例中,误报了多少? | $\frac{FP}{FP+TN}$ |
| 精确率 | 所有”预测为正”中,真有几成是正的? | $\frac{TP}{TP+FP}$ |
二、准确率(Accuracy):最直观,但最容易骗人
准确率 = 所有正确分类占总分类的比例(包含正负两类都算)。
在垃圾邮件例子里,准确率衡量的是所有被正确分类的邮件占比。理想模型没有 FP/FN,准确率 = 1.0。
什么时候好用:
- 数据集平衡(两类样本数量接近)时,准确率可以作为模型质量的粗略指标;
- 通用/未指定任务时,通常是默认评估指标。
什么时候会骗人:
- 数据集严重不平衡(某类只占 1%)时,即使模型 100% 时间都预测为负类,准确率也有 99%——但模型毫无用处。
⚠️ 注意:ML 中”准确率/召回率/精确率”有精确的数学定义,可能和日常用词的含义不同。
三、召回率(Recall)= 真正例率(TPR):“逮住坏蛋”的能力
召回率 = 所有真实正例中,被正确分类为正例的比例,也叫检测概率。
在垃圾邮件例子里,召回率回答的是:“模型逮到的垃圾邮件,占全部垃圾邮件的百分之几?”
理想模型没有 FN,召回率 = 1.0(100% 检测率)。
什么时候更看重召回率:
- 假负例的后果比假正例严重时;
- 比如疾病预测——漏掉一个真病人(FN)远比误报(FP)严重;
- 不平衡数据集中,正例很少时,召回率比准确率更有意义。
四、假正例率(FPR):“误报概率”
FPR = 所有真实负例中,被错误分类为正例的比例,也叫误报概率。
在垃圾邮件例子里,FPR 衡量的是合法邮件被误判为垃圾的比例。理想模型没有 FP,FPR = 0.0。
注意它的波动性:
- 当真实负例非常少时(比如只有 4 个),一个 FP 就让 FPR 变成 25%,两个就变成 50%——波动很大;
- 此时用精确率可能更稳定。
五、精确率(Precision):“预测为正”的可信度
精确率 = 所有被预测为正例的分类中,实际确实是正例的比例。
在垃圾邮件例子里,精确率回答的是:“被丢进垃圾文件夹的邮件里,真有几成是垃圾?” 理想模型没有 FP,精确率 = 1.0。
什么时候更看重精确率:
- 正类别预测的准确性很重要时——比如”标成垃圾的必须是垃圾,别把老板的邮件误删”。
精确率 vs 召回率的反比关系
- 假正例越少 → 精确率越高;假负例越少 → 召回率越高;
- 而提高阈值会减少 FP、增加 FN,降低阈值则相反;
- 因此 精确率和召回率通常此消彼长——提高一个,往往降低另一个。
指标出现 NaN 怎么办?
当除数为 0 时指标为 NaN。例如 TP 和 FP 都为 0 时,精确率分母为 0:
- 可能表示性能完美(可替换为 1.0);
- 也可能来自毫无用处的模型(比如从不预测正例,TP 和 FP 都是 0)。
六、F1 得分(可选进阶):精确率与召回率的调和平均
F1 得分 = 精确率和召回率的调和平均值:
$$\text{F1} = 2 \times \frac{\text{precision} \times \text{recall}}{\text{precision} + \text{recall}} = \frac{2\text{TP}}{2\text{TP} + \text{FP} + \text{FN}}$$
| 情况 | F1 的表现 |
|---|---|
| 精确率 = 召回率 = 1.0 | F1 = 1.0(满分) |
| 精确率 ≈ 召回率 | F1 接近它们的值 |
| 精确率、召回率相差很大 | F1 偏向较差的那个(调和平均的特性) |
对类别不平衡的数据集,F1 通常比准确率更可取。
七、指标选择指南
| 指标 | 什么时候用 |
|---|---|
| 准确率 | 平衡数据集的粗略进度指标;避免用于不平衡数据集 |
| 召回率 | 假负例代价 > 假正例时(如疾病检测、入侵物种预警) |
| 假正例率 | 假正例代价 > 假负例时 |
| 精确率 | 正类别预测的准确性非常重要时 |
| F1 | 需要同时平衡精确率与召回率时 |
实战案例:入侵物种检测
假设一个二元分类器用于检查昆虫诱捕器照片中是否出现危险入侵物种,检到就通知昆虫学家。
- FP(误报) 容易处理:昆虫学家看到照片、标记为误判即可,代价低;
- FN(漏报) 代价极高:漏掉入侵物种可能导致虫害失控。
结论:应针对召回率优化——尽可能逮住所有正例,宁可多误报几次。
总结
| 指标 | 一句话把握 | 何时优先 |
|---|---|---|
| 准确率 | 所有分类里对的比例 | 平衡数据集粗略评估 |
| 召回率 | 真实正例逮到多少 | 漏报代价高时 |
| FPR | 真实负例误报多少 | 误报代价高时 |
| 精确率 | 预测为正的可信多少 | 正预测必须准 |
| F1 | 精确率×召回率调和平均 | 类别不平衡、两者都要 |
一句话:准确率看全局但对不平衡数据会骗人;召回率追问”漏没漏”,精确率追问”准不准”,FPR 追问”误不误”;而 F1 是精确率与召回率的”平均”,偏向差的那一端。