混淆矩阵、精确率、召回率、F1 分别是什么?
简化版
混淆矩阵 是分类结果的 2×2 表,把预测和真实交叉统计成四格:TP(真正例)、FP(假正例)、FN(假负例)、TN(真负例)。基于它定义:精确率(Precision)= TP/(TP+FP)——「预测为正的里面,真正为正的比例」,衡量查准;召回率(Recall)= TP/(TP+FN)——「真正为正的里面,被找出来的比例」,衡量查全。两者常此消彼长。F1 = 精确率和召回率的调和平均 = 2PR/(P+R),综合两者、当二者都要兼顾时用。选哪个看业务:宁可错杀怕误报用精确率(如垃圾邮件),宁可多查怕漏报用召回率(如疾病筛查)。
详细版
混淆矩阵(正类为关注类):
预测正 预测负
真实正 TP FN (FN=漏报)
真实负 FP TN
(FP=误报)
核心指标:
| 指标 | 公式 | 含义 |
|---|---|---|
| 精确率 Precision | TP/(TP+FP) | 预测为正中真正正的比例(查准) |
| 召回率 Recall | TP/(TP+FN) | 真实正中被找出的比例(查全) |
| F1 | 2PR/(P+R) | 精确率召回率的调和平均 |
| 准确率 Accuracy | (TP+TN)/总数 | 整体分对比例(不平衡时失真) |
记忆关键:
- 精确率分母含 FP(误报)——不想误报就提精确率。
- 召回率分母含 FN(漏报)——不想漏报就提召回率。
- 精确率↑ 常导致 召回率↓(调高阈值更谨慎→查准但漏得多),反之亦然。
- F1 用调和平均:只有 P、R 都高 F1 才高,任一很低 F1 就被拉低。
完整版教学
一、从混淆矩阵说起——四个基本量
评估分类模型,先把预测结果和真实标签交叉统计成混淆矩阵。以「正类」为我们关注的类别(如「有病」「欺诈」「垃圾邮件」),四个格子是:
- TP(True Positive,真正例):真实为正、预测也为正——正确抓到。
- FP(False Positive,假正例):真实为负、却预测为正——误报(虚惊一场)。
- FN(False Negative,假负例):真实为正、却预测为负——漏报(放过了)。
- TN(True Negative,真负例):真实为负、预测也为负——正确排除。
记忆技巧:第二个字母是预测(P=预测正/N=预测负),第一个字母是预测对不对(T=对/F=错)。FP 是误报、FN 是漏报——这两个错误的代价往往不同,正是精确率和召回率要分别刻画的。
二、精确率:预测为正的「查准率」
精确率(Precision)= TP / (TP + FP)
分母是「所有被预测为正的样本」,分子是其中「真正为正的」。它回答:「模型说是正的,有多少真的是正的?」 衡量查准、误报少不少。
- 分母含 FP(误报):误报越多,精确率越低。
- 当误报代价高时看精确率。例:垃圾邮件过滤——把正常邮件误判为垃圾(FP)很糟糕(用户漏看重要邮件),所以要高精确率,宁可放过一些垃圾也别误杀正常邮件。
三、召回率:真实为正的「查全率」
召回率(Recall)= TP / (TP + FN)
分母是「所有真实为正的样本」,分子是其中「被模型找出来的」。它回答:「所有真正的正例,模型找出了多少?」 衡量查全、漏报少不少。
- 分母含 FN(漏报):漏报越多,召回率越低。
- 当漏报代价高时看召回率。例:癌症筛查——漏诊一个真病人(FN)后果严重,所以要高召回率,宁可多误报几个(让健康人复查)也别漏掉真病人。
四、精确率和召回率的矛盾——此消彼长
精确率和召回率通常不能兼得,靠调整分类阈值(判为正类的概率门槛)来权衡:
阈值调高(更谨慎才判正)→ 预测正的少而准 → 精确率↑、召回率↓(漏得多)
阈值调低(宽松就判正) → 预测正的多而滥 → 召回率↑、精确率↓(误报多)
极端例子:只把最有把握的 1 个判为正,很可能对(精确率高),但漏掉了其他所有正例(召回率极低);反过来把所有样本都判为正,召回率 100%(一个不漏)但精确率极低(全是误报)。所以要在两者间找平衡——这就需要一个综合指标。
五、F1:精确率和召回率的调和平均
F1 = 2 · P · R / (P + R)——精确率和召回率的调和平均数。
为什么用调和平均而不是算术平均?因为调和平均更偏向较小值:只有当 P 和 R 都比较高时 F1 才高;任意一个很低,F1 就被拉得很低。这正是我们想要的——不能靠一个指标很高、另一个很低来「蒙混」。
- 例:P=1.0、R=0.01,算术平均=0.505(看着还行),但 F1=2×1×0.01/(1.01)≈0.02(暴露了 R 太低的问题)。
- F1 适合精确率和召回率都要兼顾、且类别不平衡的场景。
Fβ 推广:Fβ = (1+β²)PR / (β²P + R),β>1 更重视召回率,β<1 更重视精确率,可按业务侧重调。
六、和准确率的关系——为什么不平衡时别只看准确率
准确率(Accuracy)= (TP+TN)/总数,是最直观的「整体分对比例」。但在类别不平衡时会严重误导:若 99% 是负类,模型「全预测负」准确率就有 99%,看着很高,却一个正例都没抓到(召回率=0)——毫无价值。所以不平衡场景要用精确率、召回率、F1、AUC 而非准确率(详见准确率局限专题)。
平衡准确率 (TPR+TNR)/2 给两个真实类别相同权重,在类别不均衡时比普通准确率更有解释力。F1 完全忽略 TN,因此若正确排除负类也有重要价值,不能只报 F1。
| 指标 | 使用信息 | 典型盲点 |
|---|---|---|
| Accuracy | TP、TN、FP、FN | 多数类可能主导 |
| F1 | TP、FP、FN | 忽略 TN |
| Balanced Accuracy | TPR、TNR | 不表达错误成本 |
七、常见追问
- 精确率和召回率怎么记? 精确率分母含 FP(管误报、查准);召回率分母含 FN(管漏报、查全)。
- 什么时候重精确率/召回率? 误报代价高→精确率(垃圾邮件、推荐);漏报代价高→召回率(疾病、欺诈、安全)。
- F1 为什么用调和平均? 偏向小值,P、R 都高才高,防止一高一低蒙混。
- 多分类怎么算 P/R/F1? 每类分别算,再用 macro/micro/weighted 平均(详见多分类评估专题)。
- 阈值怎么选? 按业务对精确率/召回率的侧重,看 P-R 曲线选合适阈值。
八、用一张混淆矩阵把指标全部算出来
设测试集中 TP=72,FP=18,FN=8,TN=902,总样本 1000。Precision=72/(72+18)=0.80,Recall=72/(72+8)=0.90,F1=2×0.8×0.9/(0.8+0.9)≈0.847;Specificity=902/(902+18)≈0.980。同一矩阵同时揭示正类捕获与负类误报,不能只抄一个 F1。
| 指标 | 分母是谁 | 数值 |
|---|---|---|
| Precision | 所有预测正 | 0.800 |
| Recall/TPR | 所有真实正 | 0.900 |
| Specificity/TNR | 所有真实负 | 0.980 |
| NPV | 所有预测负 | 约 0.991 |
真实正 80 → TP 72 + FN 8
真实负 920 → FP 18 + TN 902
预测正 90 → 其中 80% 真正
精确率和召回率随阈值常呈权衡,但 Precision 本身不保证随阈值严格单调;离散分数和局部排序会让它上下波动。应在验证集上枚举实际候选阈值,并报告置信区间或样本量。
易错点:先声明谁是正类,再写分母;正类一换,TP/FP/FN/TN 和所有指标都会重算。
九、常见误区与追问
- 误区:F1 高就代表负类也表现好。 F1 只由正类 Precision/Recall 构成,不使用 TN。
- 误区:提高阈值时 Precision 数学上必然上升。 召回通常不增,但 Precision 可因分数排序和离散点出现局部下降。
- 追问:Specificity 是什么? 它是 TN/(TN+FP),衡量真实负类被正确排除的比例。
- 追问:Fβ 中 β 大于 1 表示什么? 召回的权重更高,但具体 β 仍应与业务成本对应。
- 追问:样本权重下怎么计算? 四格改为权重和而非简单计数,公式结构不变。
十、加强记忆
混淆矩阵四格:TP 正确抓到、FP 误报、FN 漏报、TN 正确排除。精确率 = TP/(TP+FP)——预测为正中真正的比例(查准,分母含 FP 误报,误报代价高时用,如垃圾邮件);召回率 = TP/(TP+FN)——真实正中被找出的比例(查全,分母含 FN 漏报,漏报代价高时用,如疾病筛查)。两者随阈值通常需要权衡,但 Precision 不保证逐阈值严格单调。F1 = 2PR/(P+R) 是调和平均,P、R 都高才高、任一低就拉低,兼顾两者且不被大量 TN 直接主导,但仍受正类率影响。准确率在类别不平衡时失真(全预测多数类也很高),不平衡要看 P/R/F1/AUC。