草稿
F1 分数
将精确率(precision)和召回率(recall)合并为一个平衡分数。
问题起点:一把尺子看两个问题
在同一组 12 封邮件上:
TP = 3FP = 2FN = 3TN = 4
已知:
精确率 P = TP / (TP + FP) = 3 / 5 = 0.6召回率 R = TP / (TP + FN) = 3 / 6 = 0.5
用户希望得到一个“总评分”。
暂不代表平衡
下一步计算
第一个朴素想法:算术平均
自然会想到:
看起来像一个合适的平衡数字。
P = 0.6,R = 0.5
算术平均在不同配对下可能接近,但平衡分会显著不同。
它为何会误导
同样的平均值也会出现在两端失衡场景:
P = 1.0, R = 0.1P = 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%
核心发明:用调和平均平衡两端
定义为精确率和召回率的调和平均:
本例代入:
因为弱的一侧会拉低,结果比算术平均更贴近瓶颈。
结果更接近较小的一边,说明弱侧会限制整体分数。
公式与计数形式
也可以直接用计数计算,不依赖先验中间值:
代入本例:
在精确率和召回率都有定义的常规情况,两种形式一致。
2PR / (P + R) = 2×0.6×0.5/(0.6+0.5)
2×TP / (2×TP + FP + FN) = 2×3 / (2×3 + 2 + 3) = 0.545
两种公式都落在 0.545。
互动演示:预设情景实验
下面切换多个预设,观察 P、R、算术平均和 F1 的联动。
F1 平衡实验台
说明: 固定混淆矩阵计数产生的平衡分数约为 0.545。 (TP=3, FP=2, FN=3, TN=4(来自固定样本))
Numerator = TP, Denominator = TP + FP
Numerator = TP, Denominator = TP + FN
(P + R) / 2
2TP / (2TP + FP + FN)
无 JS 回退静态表(与上图一致):
| 预设 | TP | FP | FN | 精确率 P | 召回率 R | 算术平均 | F1 |
|---|---|---|---|---|---|---|---|
| 固定样本 | 3 | 2 | 3 | 0.6 | 0.5 | 0.55 | 0.545 |
| 高精确率,低召回率 | 1 | 0 | 9 | 1.0 | 0.1 | 0.55 | 0.182 |
| 低精确率,高召回率 | 1 | 9 | 0 | 0.1 | 1.0 | 0.55 | 0.182 |
| 双高 | 9 | 1 | 1 | 0.9 | 0.9 | 0.9 | 0.9 |
| 无正类证据 | 0 | 0 | 0 | 不可用 | 不可用 | 不可用 | 不可用 |
| 无 TP 的错误 | 0 | 2 | 3 | 0 | 0 | 0 | 0 |
无 JS 回退中的指标解释
交互面板显示的公式是:
- 精确率:
TP / (TP + FP) - 召回率:
TP / (TP + FN) - 算术平均:
(P + R) / 2 - F1:
2TP / (2TP + FP + FN)
| 情形 | TP | FP | FN | 2TP + FP + FN | 精确率 | 召回率 | F1 |
|---|---|---|---|---|---|---|---|
| 固定样本 | 3 | 2 | 3 | 11 | 0.600 | 0.500 | 0.545 |
| 无正类证据 | 0 | 0 | 0 | 0 | 不可用 | 不可用 | 不可用 |
| 无 TP 的错误 | 0 | 2 | 3 | 5 | 0.000 | 0.000 | 0.000 |
边界与分支约定
| 情况 | 条件 | F1 |
|---|---|---|
| 不可用 | 源指标缺失(在“由精确率/召回率推导”路径) | 不可用 |
| 不可用 | 2TP + FP + FN = 0(无正类证据) | 不可用 |
| 有定义的 0 | TP = 0 且 FP 或 FN 有值 | 0 |
| 正常 | 其他有效计数 | 2TP / (2TP + FP + FN) |
分母为零的分支负责避免 0/0 变成 NaN;当 TP = 0 但存在 FP 或 FN 时,结果是有定义的 0。
2PR / (P + R) = 2×0.6×0.5/(0.6+0.5)
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。
只增加精确率分母。
只增加召回率分母。
不参与 precision/recall,因此不影响 F1。
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)。
常见误区
准确率对 TN/FN 的处理不同。
F1 先标准化再合成。
精确率和召回率都要强。
F1不是准确率;准确率看的是全部 12 封样本。F1不是精确率或召回率之一;它是两者合成。F1不是只有 TN 才能决定;TN 不在精确率/召回率里。不可用与0不同:当有误报/漏报但TP = 0时,应读作0。
图谱连接
已实现
已实现
已实现
图中关系是:
precision -> f1-scorerecall -> f1-score
练习
- 用两种公式算一遍固定样本的 F1:
2PR/(P+R)与2TP/(2TP+FP+FN)。 - 为什么
P = 1.0, R = 0.1和P = 0.1, R = 1.0算术平均同样是0.55,但 F1 都低得多? - 无正类证据(
TP=FP=FN=0)下应渲染什么? - 分别加一条
FP、加一条FN后(分别变为FP=3或FN=4)F1 如何变化?
| 情形 | TP | FP | FN | 2TP + FP + FN | 精确率 | 召回率 | F1 |
|---|---|---|---|---|---|---|---|
| 固定样本 | 3 | 2 | 3 | 11 | 0.600 | 0.500 | 0.545 |
| 无正类证据 | 0 | 0 | 0 | 0 | 不可用 | 不可用 | 不可用 |
| 无 TP 的错误 | 0 | 2 | 3 | 5 | 0.000 | 0.000 | 0.000 |
图谱连接 : F1 分数