4、基础知识:F1分数(F1-Score)的由来、调和平均的意义、计算公式、与准确率/召回率的区别及适用场景
在TinyML模型评估中,准确率(Accuracy)是最直观的指标,但在类别不平衡场景下,它往往会给出误导性的结论。例如,一个检测“设备异常振动”的模型,若异常样本仅占全部数据的1%,模型即使完全不学习,只要将所有样本判为“正常”,准确率也能达到99%。这显然不是我们想要的结果。为了更真实地反映模型在少数类上的表现,我们需要同时关注精确率(Precision)和召回率(Recall),而F1分数正是将两者融合为一个综合指标的经典工具。本节将深入剖析F1分数的数学本质、调和平均的独特意义,以及它在TinyML业务决策中的实际应用边界。
4.1 核心原理:从混淆矩阵到F1的数学推导
要理解F1分数,首先必须建立混淆矩阵(Confusion Matrix)的视角。对于二分类问题,模型预测结果与实际标签组合成四种情况:真正例(TP)、假正例(FP)、假负例(FN)、真负例(TN)。精确率与召回率分别从“预测的可靠性”和“覆盖的完整性”两个维度刻画模型性能。
精确率(Precision)回答的问题是:“模型报警说‘有故障’,这个报警有多可信?”在TinyML场景中,例如关键词唤醒(KWS)系统,精确率低意味着频繁误唤醒,这会严重消耗电池电量并打扰用户。其计算公式为:
Precision = TP / (TP + FP)
召回率(Recall)回答的问题是:“实际发生的故障中,模型找回了多少?”在医疗监测或工业预测性维护中,漏报(FN)的代价可能极高——一个未检测到的异常可能导致设备损坏或安全事故。其计算公式为:
Recall = TP / (TP + FN)
然而,在实际模型调优中,精确率与召回率往往是一对矛盾体。提高精确率(减少误报)通常会降低召回率(增加漏报),反之亦然。F1分数正是为了在这两个指标之间寻找一个平衡点而设计的。它定义为精确率与召回率的调和平均:
F1 = 2 × (Precision × Recall) / (Precision + Recall)
调和平均的数学特性决定了F1分数对较小值更敏感。例如,若P=0.9、R=0.5,算术平均为0.7,而调和平均仅为0.64。这意味着F1分数会“惩罚”那些在某一维度上表现明显偏弱的模型,促使开发者追求两个指标的均衡提升。
4.2 判断方法:F1分数的计算流程与阈值选择
在TinyML模型评估中,计算F1分数并非简单的公式套用,而是涉及一个关键的工程决策——分类阈值的选择。大多数TinyML模型输出的是一个概率分数(如0到1之间的softmax输出),需要设定阈值来决定最终分类结果。阈值的高低直接影响TP、FP、FN、TN的计数,进而影响F1分数。
标准计算流程如下:
- 收集预测结果:在验证集或测试集上运行模型,记录每个样本的预测概率和真实标签。
- 设定阈值:默认阈值为0.5,但应根据业务需求调整。例如,在异常检测中,若漏报代价高,应降低阈值以提高召回率。
- 生成混淆矩阵:根据阈值将概率转为类别,统计TP、FP、FN、TN。
- 计算P与R:分别代入公式得到精确率和召回率。
- 计算F1:代入调和平均公式,得到F1分数。
值得注意的是,F1分数是阈值依赖的。同一个模型,在不同阈值下会得到不同的F1值。因此,在模型对比时,应统一阈值设定标准,或使用宏平均F1(对所有类别的F1取平均)和微平均F1(先汇总所有类别的TP/FP/FN再计算)来获得全局视角。对于多分类TinyML任务(如手势识别),通常采用宏平均F1,因为它平等对待每个类别,不受类别样本量影响。
| 指标 | 关注点 | 对不平衡数据的敏感度 | TinyML典型场景 |
|---|---|---|---|
| Accuracy | 整体正确率 | 高(多数类主导) | 类别均衡的简单分类 |
| Precision | 误报成本 | 中 | 关键词唤醒、入侵检测 |
| Recall | 漏报成本 | 中 | 医疗预警、故障检测 |
| F1-Score | P与R的平衡 | 低(综合考量) | 类别不平衡的通用评估 |
4.3 案例拆解:TinyML振动传感器故障检测中的F1应用
我们以一个实际的TinyML工业场景为例。某工厂在旋转机械上部署了基于ARM Cortex-M4的振动分析节点,用于检测轴承故障。模型输入为1秒的加速度计数据(采样率1kHz),输出为“正常”或“故障”的二分类结果。由于故障发生频率低,数据集中正常样本占95%,故障样本仅占5%。
初始模型表现:开发者使用默认阈值0.5,在测试集上得到以下结果:
- TP = 40(正确检测出40个故障样本)
- FP = 10(误报了10个正常样本为故障)
- FN = 10(漏掉了10个故障样本)
- TN = 940(正确识别了940个正常样本)
计算得到:Accuracy = (40+940)/1000 = 98%,看似优秀。但Precision = 40/50 = 80%,Recall = 40/50 = 80%,F1 = 80%。虽然F1看起来尚可,但考虑到故障样本总共只有50个,漏掉10个意味着20%的故障未被发现,这在工业安全中是不可接受的。
调优过程:团队决定降低阈值至0.3,以提升召回率。新结果:TP = 47,FP = 25,FN = 3,TN = 925。此时Precision = 47/72 = 65.3%,Recall = 47/50 = 94%,F1 = 2×0.653×0.94/(0.653+0.94) = 77.1%。虽然F1略有下降,但漏报从10次降至3次,业务风险显著降低。
业务成本分析:每次漏报(FN)可能导致轴承损坏,维修成本约5000元;每次误报(FP)导致停机检查,成本约200元。原模型总成本 = 10×5000 + 10×200 = 52000元;调优后总成本 = 3×5000 + 25×200 = 20000元。尽管F1从80%降至77.1%,但业务成本降低了61.5%。
4.4 常见误区与总结复盘
在TinyML模型评估实践中,围绕F1分数存在几个高频误区,需要特别注意:
误区一:将F1分数视为万能指标。F1分数假设精确率和召回率同等重要,但在许多业务场景中并非如此。例如,在火灾烟雾检测中,召回率的重要性远高于精确率——误报可以接受,但漏报可能造成灾难。此时应使用Fβ分数(β>1时更重视召回率)或直接以召回率为核心指标。
误区二:忽略阈值对F1的影响。很多开发者直接使用默认阈值0.5计算F1,然后进行模型对比。这可能导致两个模型在各自最优阈值下表现不同,但默认阈值下却得出相反结论。正确做法是绘制P-R曲线,比较曲线下面积(AUC-PR),或使用F1最大值作为模型性能的稳健估计。
误区三:在极端不平衡数据上过度依赖F1。当正类样本极少(如<1%)时,即使F1达到0.9,也可能只是少数几个样本的偶然结果。此时应结合置信区间分析,或使用更稳健的指标如Matthews相关系数(MCC)。
误区四:忽视TinyML特有的资源约束。在MCU上部署时,模型的内存占用和推理延迟与评估指标同等重要。一个F1为0.95但需要1MB闪存的模型,可能不如一个F1为0.90但仅需200KB的模型实用。因此,F1分数必须与模型大小、RAM占用、推理时间等工程指标联合评估。
总结复盘:F1分数是TinyML模型评估中不可或缺的工具,它通过调和平均巧妙地将精确率和召回率统一为一个可比较的标量。然而,它的价值在于“辅助决策”而非“替代决策”。在实际项目中,应遵循以下原则:
- 始终从混淆矩阵出发,理解FP和FN的具体业务代价。
- 根据业务场景选择F1、Fβ或直接优化P/R中的单一指标。
- 在阈值选择上,使用验证集进行网格搜索,找到最优工作点。
- 将F1分数与模型压缩率、推理延迟、功耗等TinyML特有指标结合,形成多目标评估体系。