第3章 F1分数定义与数学推导:调和平均数归纳总结

做分类模型评估时,光看准确率往往不够。尤其是正负样本不平衡的场景——比如欺诈检测、罕见病筛查。这时候,精确率(Precision)和召回率(Recall)就成了两个绕不开的指标。但问题来了:两个指标往不同方向走,怎么综合成一个数?F1分数就是答案。它在信息检索、NLP、医疗诊断这些领域几乎是标配。我当年第一次接触时也在想:为什么非要用调和平均数?直接取个平均值不行吗?嗯,这一章我们就把它彻底说透。

3.1 从混淆矩阵说起

在正式推导之前,快速回顾一下基础。混淆矩阵里的四个数字决定了所有分类指标:

实际\预测正类(Positive)负类(Negative)
正类(Positive)TP(真正例)FN(假负例)
负类(Negative)FP(假正例)TN(真负例)
  • 精确率:P = TP / (TP + FP) —— 预测为正的样本里,有多少猜对了。
  • 召回率:R = TP / (TP + FN) —— 真正的正样本里,我们找回了多少。

这两个指标天然存在矛盾。你让模型严格一点,精确率上去了,但可能漏掉很多正样本,召回率就掉下来。反过来放宽阈值,召回率升高,精确率又低了。F1就是把这对矛盾融合成一体的桥梁。

3.2 F1分数的数学定义

F1分数的标准公式长这样:

F1 = 2 * (P * R) / (P + R)

这个形式,其实就是精确率和召回率的调和平均数。我第一次看到这个公式时觉得挺简洁,但心里嘀咕:为什么不是 (P+R)/2 这种算术平均?别急,下面我们专门拆解调和平均数的直觉。

核心记忆点:F1只有在P和R都高时才高。如果其中一个很低,哪怕另一个是1,F1也会被拉低。

3.3 调和平均数:为什么不是算术平均?

调和平均数的定义是:对于一组正数x,y,其调和平均数为 2xy/(x+y)。它和算术平均、几何平均有什么区别?

平均类型公式特点
算术平均(x+y)/2对极端值不敏感,大值拉高整体
几何平均√(x·y)偏向小值,但不如调和平均强烈
调和平均2/(1/x + 1/y)最惩罚不均衡,更靠近较小的数

举个例子:假如P=1.0(完美精确),R=0.2(召回很低)。算术平均是0.6,而调和平均只有0.333。哪个更合理?你想想看,一个模型说“我找到的都很准,但只找到20%的正样本”,在大多数业务里这种表现根本不能接受。调和平均老实交代了短板,算术平均却粉饰太平。我习惯用F1的另一个原因是:它和我们想要的行为高度一致——模型不能偏科。

3.4 F1分数的推导过程

从历史角度看,F1最早源于信息检索领域。标准的推导从召回率R和精确率P出发,目标是找到一个综合度量,使得:

  1. 当P=R时,度量等于两个值。
  2. 度量值受较小值影响更大。
  3. 形式简单、对称。

把调和平均写成倒数形式:

1/F1 = 1/2 * (1/P + 1/R)

这等价于求倒数的算术平均再取倒数。为什么要绕这一步?因为倒数的算术平均在数值上更稳定,且当P或R为0时,调和平均直接为0,不会出现未定义的情况。我在做原始数据清洗时经常遇到P或R为0的极端模型,此时用公式每次都能正确报出0分,而算术平均还给我一个非零值——这不坑人嘛。

实现小技巧:在Python代码里为了避免除零错误,一般先计算分母,单独处理P+R=0的情况:

def f1_score(p, r):
    if p + r == 0:
        return 0.0
    return 2 * p * r / (p + r)

3.5 加权变体:Fβ分数

有时候我们对召回率和精确率的重视程度不一样。比如癌症筛查,宁可多召回(甚至误报),也不能漏诊。这时候就需要Fβ分数:

Fβ = (1 + β²) * (P * R) / (β² * P + R)

其中β用来控制召回率的权重:

  • β = 1 → F1,同等重要
  • β = 2 → F2,召回率权重更高
  • β = 0.5 → F0.5,精确率权重更高

表里总结一下:

β值名称偏向常见场景
0.5F0.5精确率搜索结果质量
1F1平衡通用二分类
2F2召回率医疗筛查、欺诈检测

我曾经遇到的坑:有一回用F2评估模型,β=2,结果模型为了追求高召回率,几乎把所有样本都判为正类,精确率掉到0.1。F2值虽然看起来还行(0.18),但实际业务无法接受。后来我改成同时监控P和R,不让单个指标蒙蔽双眼。记住:Fβ只是辅助,不能替代人工审查P和R的绝对值。

3.6 知识体系图解

下面这张SVG图把F1分数的核心逻辑、三个平均数的对比、以及加权变体串在一起,方便你整体把握:

F1分数核心逻辑图:调和平均数的角色 精确率 P 召回率 R 调和平均 2·P·R —— P + R F1 分数 三种平均数的对比(P=0.9, R=0.3示例) 算术平均 0.60 几何平均 0.52 调和平均(F1) 0.45 调和平均更受较小值影响,如实反映模型短板。 F1 = 0.45 比算术平均 0.60 更符合实际业务判断。

我的个人习惯:在项目初期,我会同时看F1和F2。如果F1和F2差距很大,就说明P和R严重不均衡,需要调整阈值或做数据增强。有一次在命名实体识别任务中,F1=0.82但F2只有0.75,我发现召回率拖了后腿,于是重点改进了未登录词的处理逻辑,最后F1升到了0.87。你看,多一个视角就能发现问题。

总结一下这章内容:F1分数本质上就是精确率和召回率的调和平均数。它用最直接的方式惩罚了偏科模型,是二分类问题中衡量整体性能的可靠单值指标。掌握调和平均数的数学直觉,你就能在实战中快速判断什么时候用F1,什么时候用Fβ,以及如何向业务方解释为什么F1比准确率更靠谱。好了,接下来我们开始做练习题,记得亲手算一遍混淆矩阵里的F1值。