图谱连接

草稿

F1 分数

将精确率(precision)和召回率(recall)合并为一个平衡分数。

concept beginner machine-learningmetricsclassification

问题起点:一把尺子看两个问题

在同一组 12 封邮件上:

  • TP = 3
  • FP = 2
  • FN = 3
  • TN = 4

已知:

  • 精确率 P = TP / (TP + FP) = 3 / 5 = 0.6
  • 召回率 R = TP / (TP + FN) = 3 / 6 = 0.5

用户希望得到一个“总评分”。

指标卡片基于固定混淆矩阵计数,精确率为 3/5,召回率为 3/6。
精确率 P60.0%
召回率 R50.0%
算术平均55.0%

暂不代表平衡

F154.5%

下一步计算

计数分母 (2TP + FP + FN)11

第一个朴素想法:算术平均

自然会想到:

P+R2=0.6+0.52=0.55\frac{P + R}{2} = \frac{0.6 + 0.5}{2} = 0.55

看起来像一个合适的平衡数字。

先看算术平均同一输入在算术平均下看起来接近,需要换成平衡感知比较。
使用输入

P = 0.6,R = 0.5

算术平均55.0%
F154.5%
快速判断

算术平均在不同配对下可能接近,但平衡分会显著不同。

它为何会误导

同样的平均值也会出现在两端失衡场景:

  • P = 1.0, R = 0.1
  • P = 0.1, R = 1.0

它们都是 0.55,但单侧很差意味着整体行为仍然有问题。

极端失衡单侧高分会掩盖另一侧的薄弱。
高精确率,低召回率

P = 1.0,R = 0.1

算术平均 = 55.0%

F1 = 18.2%

低精确率,高召回率

P = 0.1,R = 1.0

算术平均 = 55.0%

F1 = 18.2%

核心发明:用调和平均平衡两端

定义为精确率和召回率的调和平均:

F1=2PRP+RF_1 = \frac{2PR}{P + R}

本例代入:

F1=20.60.50.6+0.5=6110.545F_1 = \frac{2\cdot 0.6\cdot 0.5}{0.6 + 0.5} = \frac{6}{11} \approx 0.545

因为弱的一侧会拉低,结果比算术平均更贴近瓶颈。

调和平衡调和结果向较小指标偏移。
Precision
Recall
F154.5%
平衡读数

结果更接近较小的一边,说明弱侧会限制整体分数。

公式与计数形式

也可以直接用计数计算,不依赖先验中间值:

F1=2TP2TP+FP+FNF_1 = \frac{2TP}{2TP + FP + FN}

代入本例:

2323+2+3=6110.545\frac{2\cdot 3}{2\cdot 3 + 2 + 3} = \frac{6}{11} \approx 0.545

在精确率和召回率都有定义的常规情况,两种形式一致。

公式与计数形式对于有效计数,两种形式应给出同一结果。
指标形式

2PR / (P + R) = 2×0.6×0.5/(0.6+0.5)

0.545
计数形式

2×TP / (2×TP + FP + FN) = 2×3 / (2×3 + 2 + 3) = 0.545

一致性检查

两种公式都落在 0.545。

互动演示:预设情景实验

下面切换多个预设,观察 PR、算术平均和 F1 的联动。

F1 平衡实验台

说明: 固定混淆矩阵计数产生的平衡分数约为 0.545。 (TP=3, FP=2, FN=3, TN=4(来自固定样本))

精确率0.6

Numerator = TP, Denominator = TP + FP

召回率0.5

Numerator = TP, Denominator = TP + FN

算术平均0.55

(P + R) / 2

F10.545

2TP / (2TP + FP + FN)

TP3
FP2
FN3
TN4(来自固定样本)

无 JS 回退静态表(与上图一致):

F1 预设对照表(无 JS 回退)
预设TPFPFN精确率 P召回率 R算术平均F1
固定样本3230.60.50.550.545
高精确率,低召回率1091.00.10.550.182
低精确率,高召回率1900.11.00.550.182
双高9110.90.90.90.9
无正类证据000不可用不可用不可用不可用
无 TP 的错误0230000

无 JS 回退中的指标解释

交互面板显示的公式是:

  • 精确率:TP / (TP + FP)
  • 召回率:TP / (TP + FN)
  • 算术平均:(P + R) / 2
  • F1:2TP / (2TP + FP + FN)
不可用与零值分支分支要明确区分“不可用”与“0”。
F1 分支表
情形TPFPFN2TP + FP + FN精确率召回率F1
固定样本323110.6000.5000.545
无正类证据0000不可用不可用不可用
无 TP 的错误02350.0000.0000.000

边界与分支约定

情况条件F1
不可用源指标缺失(在“由精确率/召回率推导”路径)不可用
不可用2TP + FP + FN = 0(无正类证据)不可用
有定义的 0TP = 0FPFN 有值0
正常其他有效计数2TP / (2TP + FP + FN)

分母为零的分支负责避免 0/0 变成 NaN;当 TP = 0 但存在 FPFN 时,结果是有定义的 0

公式与计数形式对于有效计数,两种形式应给出同一结果。
指标形式

2PR / (P + R) = 2×0.6×0.5/(0.6+0.5)

0.545
计数形式

2×TP / (2×TP + FP + FN) = 2×3 / (2×3 + 2 + 3) = 0.545

一致性检查

两种公式都落在 0.545。

正确性直觉

F1 依赖的是精确率和召回率:

  • FP 只出现在精确率分母 TP + FP,让精确率下滑;
  • FN 只出现在召回率分母 TP + FN,让召回率下滑;
  • TN 不参与精确率和召回率,也不直接影响 F1。
FP/FN/TN 影响面板FP 与 FN 影响精确率和召回率,TN 不进入公式。
FP

只增加精确率分母。

FN

只增加召回率分母。

TN

不参与 precision/recall,因此不影响 F1。

Fixture

TP=3, FP=2, FN=3, TN=4

复杂度

  • 已有 TP/FP/FN 计数时:O(1)
  • 先扫描样本再计数:O(n),再 O(1) 计算 F1
复杂度先计数后计算,步骤清晰且开销很小。
已有计数

时间 O(1),空间 O(1)。

从原始样本

先扫描一次得到 TP/FP/FN,再 O(1)。

常见误区

常见误区F1 既不是原始准确率,也不是单一召回率。
不是准确率

准确率对 TN/FN 的处理不同。

不是原始召回

F1 先标准化再合成。

不是单侧依赖

精确率和召回率都要强。

  • F1 不是准确率;准确率看的是全部 12 封样本。
  • F1 不是精确率或召回率之一;它是两者合成。
  • F1 不是只有 TN 才能决定;TN 不在精确率/召回率里。
  • 不可用0 不同:当有误报/漏报但 TP = 0 时,应读作 0

图谱连接

节点连接该节点依赖精确率和召回率。
precision

已实现

+
recall

已实现

f1-score

已实现

图中关系是:

  • precision -> f1-score
  • recall -> f1-score

练习

  1. 用两种公式算一遍固定样本的 F1:2PR/(P+R)2TP/(2TP+FP+FN)
  2. 为什么 P = 1.0, R = 0.1P = 0.1, R = 1.0 算术平均同样是 0.55,但 F1 都低得多?
  3. 无正类证据(TP=FP=FN=0)下应渲染什么?
  4. 分别加一条 FP、加一条 FN 后(分别变为 FP=3FN=4)F1 如何变化?
不可用与零值分支分支要明确区分“不可用”与“0”。
F1 分支表
情形TPFPFN2TP + FP + FN精确率召回率F1
固定样本323110.6000.5000.545
无正类证据0000不可用不可用不可用
无 TP 的错误02350.0000.0000.000

图谱连接 : F1 分数