2、基础知识:类别不平衡的常见场景与评估指标

TinyML 模型部署在资源受限的微控制器上,其训练数据往往来自真实物理世界。与互联网应用中的海量均衡数据不同,传感器采集的物理信号天然具有强烈的类别不平衡特性:设备 99.9% 的时间处于正常运行状态,故障状态极为罕见;用户一天可能只唤醒语音助手几十次,而环境噪声却持续存在;健康监测中异常心拍在数小时的心电数据中可能仅有几十个。这种数据分布的不均衡,直接决定了模型评估方式与训练策略的选择。理解类别不平衡的本质、常见场景以及正确的评估指标,是后续采样、加权与阈值调整方法的基础。

TinyML 类别不平衡:场景 → 数据分布 → 评估指标 传感器异常检测 正常样本 > 99% 异常样本 < 1% 振动/温度/电流 语音唤醒 唤醒词 < 0.1% 非唤醒语音/噪声 > 99.9% 关键词检测 KWS 健康监测 正常心拍 > 98% 异常心拍 < 2% ECG/PPG/血氧 共同数据分布特征 多数类(负样本)占比极高 | 少数类(正样本)稀缺但关键 | 分布随时间漂移 | 标注成本高 准确率 Accuracy 陷阱:多数类主导 99% 准确率可能 毫无实际价值 召回率 Recall 真正例率 TPR 漏报的代价 异常检测核心 F1 Score 精确率与召回率 的调和平均 类别不平衡首选 AUC-ROC 阈值无关评估 排序能力度量 模型调优参考 选择正确评估指标 → 指导采样/加权/阈值调整策略

2.1 类别不平衡的典型场景剖析

TinyML 应用中的类别不平衡并非偶然现象,而是物理世界本质规律的反映。在工业预测性维护中,旋转机械的振动信号在绝大多数时间内处于健康状态,故障特征往往在毫秒级的时间窗口内出现,且不同故障类型的出现频率差异巨大。以电机轴承故障为例,正常数据可能积累数周,而外圈故障数据可能仅有几分钟。这种极端不平衡使得模型如果简单追求整体准确率,会退化为"永远预测正常"的平庸分类器。

语音唤醒场景则呈现出另一种不平衡形态。设备在待机状态下持续采集麦克风信号,唤醒词(如"Hey Siri")的出现时长占比通常低于 0.1%,其余均为环境噪声、电视声音、他人对话等非唤醒内容。更复杂的是,非唤醒语音中可能包含与唤醒词发音相似的混淆词,这些"难负样本"虽然数量少,但对模型性能的影响远大于普通噪声。健康监测领域的不平衡则具有医学特殊性:心电数据中正常窦性心律占据主导,而室性早搏、房颤等异常心拍可能仅占 0.5%-2%,但这些异常恰恰是临床诊断的关键信息。

核心认知:类别不平衡的本质是"信息价值与数据量成反比"。在 TinyML 场景中,少数类样本往往携带最关键的信息——一次设备故障、一次唤醒、一次心律失常,其价值远超千条正常数据。因此,评估模型时必须放弃"准确率至上"的惯性思维,转而关注少数类的识别能力。

2.2 评估指标的数学定义与适用边界

在类别不平衡场景下,准确率(Accuracy)会给出严重误导。假设异常检测任务中正常样本占 99%,模型将所有样本预测为正常,准确率仍高达 99%,但这个模型毫无实用价值。因此,需要引入基于混淆矩阵的精细化指标。混淆矩阵将预测结果分为四类:真正例(TP)、假正例(FP)、真负例(TN)、假负例(FN)。基于此,精确率(Precision)= TP/(TP+FP) 衡量预测为正类的样本中有多少是真正的正类;召回率(Recall)= TP/(TP+FN) 衡量所有真实正类中有多少被正确找出。

F1 Score 是精确率与召回率的调和平均,公式为 F1 = 2 × (Precision × Recall) / (Precision + Recall)。调和平均的特性决定了 F1 对低值更敏感——如果精确率很高但召回率很低,F1 会被拉低,这正好符合不平衡场景的需求:模型不能只挑容易的样本预测,也不能漏掉关键的正类。AUC(Area Under the ROC Curve)则从另一个维度评估模型:它衡量模型将正样本排在负样本之前的概率,与具体分类阈值无关。AUC 的取值范围为 0.5(随机猜测)到 1.0(完美排序),适合在模型训练阶段比较不同架构或特征提取方法的优劣。

指标 公式 对少数类的敏感度 TinyML 适用场景
准确率 (TP+TN)/(TP+TN+FP+FN) 极低(被多数类主导) 仅用于类别均衡的基线对比
精确率 TP/(TP+FP) 中等(关注误报代价) 语音唤醒(误唤醒体验差)
召回率 TP/(TP+FN) 高(关注漏报代价) 异常检测(漏报导致事故)
F1 Score 2PR/(P+R) 高(平衡精确率与召回率) 健康监测(误报与漏报均需控制)
AUC ROC 曲线下面积 高(阈值无关) 模型选型与特征评估

在实际 TinyML 项目中,评估指标的选择需要结合部署约束。例如,在电池供电的无线传感器节点上,如果异常检测的误报(FP)会导致系统唤醒并发送无线数据,这会显著增加功耗,此时精确率的重要性上升;而在工业安全监测中,漏报(FN)可能导致设备损坏甚至人员伤亡,召回率则成为首要指标。F1 Score 提供了一种折中方案,但具体权重需要根据应用场景的代价矩阵来调整。

2.3 案例拆解:工业电机轴承故障检测的指标选择

某工厂部署了一套基于加速度计的电机轴承监测系统,MCU 为 Cortex-M4F(主频 80MHz,RAM 64KB),采样率 20kHz,每 10 秒计算一次特征并执行分类。系统目标是检测轴承外圈故障,以便及时停机维护。数据收集阶段,正常振动数据累计 120 小时,而外圈故障数据仅有 40 分钟(通过人为注入故障获得)。初始模型使用随机森林分类器,在测试集上准确率达到 98.7%,但进一步分析发现:模型对故障样本的召回率仅为 12%——即 100 次真实故障中,模型只能发现 12 次,其余 88 次被误判为正常。

这个案例清晰地展示了准确率的欺骗性。98.7% 的准确率看似优秀,但实际部署中,88% 的故障漏报意味着轴承可能在两次巡检之间彻底损坏,导致非计划停机。项目组将评估指标切换为召回率与 F1 Score 后,发现模型性能远未达标。通过调整分类阈值(从默认的 0.5 降低到 0.3),召回率提升至 78%,但精确率从 95% 下降到 61%,F1 Score 从 0.21 提升到 0.68。进一步采用 SMOTE 过采样后,F1 Score 达到 0.82,召回率 85%,精确率 79%。

经验总结:在 TinyML 异常检测项目中,建议同时监控三个指标:召回率(确保不漏报)、精确率(控制误报带来的功耗/运维成本)、F1 Score(综合平衡)。AUC 用于模型训练阶段的架构选择,但在部署前必须结合具体阈值重新评估。此外,由于 MCU 上无法运行复杂的 ROC 曲线计算,应在 PC 端离线完成阈值选择,然后将最优阈值硬编码到固件中。

2.4 常见误区与评估实践建议

第一个常见误区是"只看准确率"。在 TinyML 社区中,不少初学者在或项目报告中仅报告准确率,这在类别不平衡场景下毫无意义。第二个误区是"盲目追求高召回率"。在某些场景下,过高的召回率会导致大量误报,例如语音唤醒中,如果召回率从 95% 提升到 98%,误唤醒次数可能从每天 5 次增加到每天 50 次,用户体验急剧下降。第三个误区是"忽视评估指标的置信区间"。TinyML 测试集通常较小(尤其少数类样本可能只有几十个),此时 F1 Score 的波动范围很大,应使用 Bootstrap 方法计算 95% 置信区间。

另一个容易被忽视的问题是"数据划分方式"。在时间序列数据中,随机划分训练集和测试集可能导致数据泄漏——相邻时间窗口的数据高度相关,模型在测试集上表现良好但实际部署效果差。正确的做法是按时间顺序划分:前 70% 时间的数据用于训练,后 30% 用于测试,且确保测试集中的故障样本来自不同的时间段或不同的设备工况。对于 TinyML 项目,还应在真实硬件上进行评估,因为 MCU 上的浮点精度、内存限制可能影响模型输出,导致 PC 端评估与部署后表现不一致。

风险提示:当少数类样本极少(如少于 30 个)时,任何评估指标都不可靠。此时应优先考虑数据增强(如时间扭曲、噪声注入)或迁移学习,而不是直接训练模型。此外,AUC 在极端不平衡(正类占比 < 0.1%)时可能过于乐观,因为 ROC 曲线对假正例的惩罚不足,建议同时观察 PR(Precision-Recall)曲线,PR 曲线对少数类更敏感。

总结而言,类别不平衡评估的核心原则是:明确少数类的业务代价,选择与之匹配的评估指标,并在真实部署条件下验证。准确率只能作为辅助参考,召回率、精确率、F1 Score 和 AUC 的组合才能全面反映模型在少数类上的真实能力。这些指标不仅用于模型评价,更直接指导后续的采样策略(哪些样本需要过采样)、加权设置(少数类样本的损失权重)以及阈值调整(分类边界向多数类偏移的程度)。