精确率、召回率与 F1 详解

精确率(Precision)、召回率(Recall)与 F1 是分类任务中最常用的细粒度指标 trio。相比 Accuracy,它们按类别拆开「查准」与「查全」,并在类别不平衡时更可靠。

段末注释:F1 是 Precision 与 Recall 的调和平均;macro 先算每类 F1 再平均,micro 先汇总 TP/FP/FN 再算全局 P/R/F1。

系列索引:微调评估指标导读


一、直观含义(以单类为例)

以「预测为 fear」为例,混淆计数:

预测 fear 预测非 fear
真 fear TP FN
真非 fear FP TN
  • Precision(查准率):你说是 fear 的里,有多少真是 fear
    (\text{P} = \frac{TP}{TP + FP}) — 「宁缺毋滥」
  • Recall(查全率):真是 fear 的里,你抓住了多少
    (\text{R} = \frac{TP}{TP + FN}) — 「宁滥毋缺」
  • F1:P 与 R 的调和平均
    (F1 = \frac{2PR}{P + R})

人话:P 衡量「误报多不多」,R 衡量「漏报多不多」,F1 在二者间折中。


二、使用场景与所需数据

场景 推荐平均方式
多类不平衡(如情绪、意图) macro F1
多标签分类 每标签算 P/R/F1 再 macro;或 sample-wise
大类主导、关心总体 TP/FP micro F1(≈ accuracy 在多类 one-hot 下)
关心样本量加权 weighted F1

数据要求:离散标签 (\hat{y}_i, y_i \in {1,\ldots,C});生成式任务需先解析输出为标签字符串。


三、计算方式

3.1 多类 macro / micro / weighted

对类别 (c),记 (P_c, R_c, F1_c):

平均 公式 特点
macro (\frac{1}{C}\sum_c F1_c) 小类与大类等权;不平衡任务首选
micro 全局合并 TP/FP/FN 后算 F1 受大类主导
weighted (\sum_c \frac{n_c}{N} F1_c) 按 support 加权

3.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from sklearn.metrics import f1_score, classification_report

label_names = ["sadness", "joy", "love", "anger", "fear", "surprise"]

macro_f1 = f1_score(
y_true, y_pred,
labels=label_names,
average="macro",
zero_division=0,
)

# 每类明细
report = classification_report(y_true, y_pred, labels=label_names, zero_division=0)
print(report)

classification_report 输出每类的 precision、recall、f1-score、support,是微调报告的标准附件。

3.3 数值示例

六类情绪、基座零样本评估:macro_f1 = 0.482,accuracy = 0.625。macro 更低说明少数类 F1 拖累整体——若只看 accuracy 会高估模型。


四、如何解读

模式 可能原因
某类 recall 极低 模型很少预测该类;或常与它类混淆
某类 precision 极低 模型乱预测到该类
macro_f1 ↑ 但 accuracy ↓ 少数类改善、多数类略降——业务上可能仍更好
各类 F1 均低 基座能力弱或 prompt 与任务不匹配

微调验收:优先看 macro_f1 delta;若业务只关心某一类(如「anger 不能被漏掉」),单独盯该类的 recall。


五、局限性与常见误用

  1. 依赖标签解析规则:生成式输出 Fear.fearful 是否算对,需在评估脚本中统一规范化。
  2. macro 对小类方差大:某类 test 仅 5 条,F1 波动剧烈。
  3. F1 隐含 P/R 等权:若业务更怕 FN,应直接优化 recall 或看 PR 曲线。
  4. 不能反映排序质量:推荐系统 top-k 需 MAP、NDCG 等。
  5. 与 train loss 无单调关系:loss 低不保证 macro F1 升。

六、与其他指标的关系

指标 关系
Accuracy 平衡二分类时 F1 与 accuracy 相关;多类不平衡时分化
混淆矩阵 矩阵对角线对应各类 TP;off-diagonal 解释 P/R 低的原因
Token-level F1(SQuAD 等) 字符/词 span 重叠 F1,非分类 F1;见 QA 评估

七、实践建议

  1. 多类微调报告:macro_f1 + classification_report + 混淆矩阵,accuracy 作补充。
  2. zero_division=0 避免某类未预测时报错。
  3. 对比微调前后时,固定 labels= 参数列表,防止类别顺序变化导致不可比。
  4. 生成式评估慢,可先用较小 EVAL_LIMIT 看趋势,正式实验再放大。
-------------本文结束感谢您的阅读-------------