2、基础知识:机器学习模型精度概念、过拟合与欠拟合、数据集划分及评估指标

在Edge Impulse平台上进行边缘端模型开发时,模型精度是衡量模型性能的核心标尺。然而,精度并非一个孤立的数字,它背后涉及数据分布、模型容量、训练策略与评估方法之间的复杂博弈。本章将系统梳理机器学习模型精度的本质含义、过拟合与欠拟合的成因与识别方法、数据集划分的原则,以及准确率、F1分数等评估指标的适用场景与局限性。理解这些基础知识,是后续排查精度下降问题的前提——只有知道“理想状态”是什么样,才能准确判断“异常状态”出在哪里。

模型精度问题根源分析框架 数据层问题 • 标注噪声/错误 • 类别不平衡 • 训练/验证分布不一致 • 数据量不足 • 传感器采集环境差异 模型层问题 • 模型容量不足(欠拟合) • 模型过于复杂(过拟合) • 特征提取不充分 • 超参数设置不当 • 量化精度损失 训练与评估层问题 • 学习率不当 • 批次大小不合适 • 验证集划分不合理 • 评估指标选择错误 • 早停策略失效 诊断路径:训练损失 → 验证损失 → 测试集表现 → 部署后表现 逐层对比,定位精度下降的根源所在 过拟合信号 训练损失↓ 验证损失↑ 训练/验证差距持续扩大 欠拟合信号 训练损失和验证损失均偏高 两者接近但精度不达标

2.1 模型精度的本质与度量

核心原理:模型精度(Accuracy)在分类任务中通常指预测正确的样本数占总样本数的比例。但在边缘计算场景下,精度并非一个静态值,它受到数据分布漂移、传感器噪声、环境变化等多重因素影响。Edge Impulse平台上的精度报告通常包含训练精度、验证精度和测试精度三个层次,它们分别反映模型在已知数据、调参数据和全新数据上的表现。真正有意义的精度是模型在未见数据上的泛化能力,而非对训练数据的记忆能力。

精度的层次性理解:在Edge Impulse工作流中,模型训练完成后会生成一个混淆矩阵和精度报告。训练精度高但验证精度低,往往意味着模型过拟合;两者都低则可能欠拟合或数据本身存在问题。部署到MCU后,由于浮点转定点量化、内存限制等因素,实际推理精度通常会有1%-3%的下降,这是正常现象。若下降超过5%,则需要检查量化配置或模型结构是否过于敏感。

精度类型 定义 Edge Impulse中的获取方式 用途
训练精度 模型在训练集上的分类正确率 训练完成后自动生成 判断模型是否充分学习
验证精度 模型在验证集上的分类正确率 训练过程中实时计算 用于早停和超参数调优
测试精度 模型在完全未见过的测试集上的正确率 使用Testing Sample评估 评估真实泛化能力
部署精度 模型在目标硬件上实际推理的正确率 部署后通过串口/日志回传 验证端到端效果
经验提醒:在Edge Impulse中,建议将测试集样本单独保留,不要参与任何训练或验证过程。每次调整模型后,用同一测试集评估,才能横向对比不同版本的模型优劣。

2.2 过拟合与欠拟合:识别与应对

核心原理:过拟合(Overfitting)指模型在训练数据上表现优异,但在新数据上表现糟糕,本质是模型记住了训练样本的噪声和细节,而非学习到普适规律。欠拟合(Underfitting)则相反,模型容量不足,连训练数据都无法充分拟合。在Edge Impulse的模型训练曲线中,过拟合表现为训练损失持续下降而验证损失在某个epoch后开始上升;欠拟合则表现为两条曲线都居高不下且趋于平缓。

判断方法:最直接的方法是观察Edge Impulse训练页面中的损失曲线和精度曲线。若训练精度接近100%而验证精度低于90%,且差距超过5个百分点,基本可判定过拟合。若训练和验证精度都低于80%,且增加训练轮次后无明显提升,则可能欠拟合。此外,混淆矩阵中若某一类别被系统性误判为另一类别,也提示数据分布或特征提取存在问题。

案例拆解:振动传感器故障诊断模型的过拟合排查
背景:某工业设备预测性维护项目,使用Edge Impulse训练振动数据分类模型,目标是在Cortex-M4 MCU上实现轴承故障识别。
初始现象:训练精度达到99.2%,验证精度为87.5%,测试精度仅为82.1%。部署到设备后,实际运行精度降至78%左右。
分析过程:首先检查数据采集环节,发现训练数据来自实验室环境,振动台架固定稳定;而现场设备存在启停冲击、负载波动等干扰。其次,查看Edge Impulse的频谱图,发现模型过度依赖特定频率峰值,而这些峰值在现场环境中被背景噪声掩盖。
操作步骤:① 增加现场采集数据,按7:2:1划分训练/验证/测试;② 在Edge Impulse中启用数据增强(添加随机噪声、时间偏移);③ 将Dense层从64维降至32维,增加Dropout 0.3;④ 重新训练后,训练精度降至94%,验证精度提升至91%,测试精度达到89.5%。
结果对比:部署后实际精度提升至87%,虽然仍低于实验室测试值,但已满足生产要求。
复盘经验:过拟合的根源往往不在模型参数,而在数据分布与真实场景的偏差。先解决数据代表性,再调整模型复杂度,顺序不能颠倒。

常见误区:许多开发者一看到验证精度下降就立即增加正则化或Dropout,却忽略了数据本身的问题。在Edge Impulse中,如果训练数据本身存在标注错误或类别不平衡,任何正则化手段都无法根治。另一个误区是过度依赖早停(Early Stopping),在验证损失开始上升时立即停止训练,但有时这只是局部波动,应设置更大的耐心值(Patience)观察多个epoch。

2.3 数据集划分:训练/验证/测试的科学比例

核心原理:数据集划分是模型评估可信度的基石。训练集用于学习参数,验证集用于调超参数和早停,测试集用于最终评估。三者的数据分布必须独立同分布(i.i.d.),否则评估结果会产生偏差。在Edge Impulse中,默认按80/10/10划分,但实际比例应根据数据总量和类别分布动态调整。

操作流程:Edge Impulse的Dashboard页面提供数据划分工具,支持按类别比例分层采样。对于小数据集(少于1000个样本),建议采用70/15/15划分,并考虑使用K折交叉验证来获得更稳定的评估。对于不平衡数据集,应确保每个类别在三个子集中的比例与原始分布一致,避免某一类在测试集中缺失。

数据总量 训练集比例 验证集比例 测试集比例 注意事项
< 500 70% 15% 15% 建议使用交叉验证
500 - 5000 80% 10% 10% 分层采样保证类别比例
> 5000 85% 7.5% 7.5% 可适当增加测试集绝对数量
风险提示:在Edge Impulse中,如果使用“Auto Split”功能,系统会随机划分数据。但随机划分可能导致某一类样本在测试集中过少或过多。务必在划分后检查每个类别的样本数量分布,必要时手动调整。

2.4 评估指标:准确率、精确率、召回率与F1分数

核心原理:准确率(Accuracy)在类别均衡时是直观有效的指标,但在类别不平衡场景下会掩盖模型对少数类的失效。精确率(Precision)衡量预测为正类的样本中真正为正类的比例,召回率(Recall)衡量实际正类样本中被正确预测的比例。F1分数是两者的调和平均,在类别不平衡时比准确率更能反映模型真实性能。在Edge Impulse的混淆矩阵中,可以逐类查看这些指标。

选择策略:对于故障检测类应用(如设备异常报警),漏报(假阴性)的代价远高于误报(假阳性),此时应优先关注召回率。对于垃圾邮件过滤等场景,误报(将正常邮件判为垃圾)的代价更高,应优先关注精确率。F1分数适合需要平衡两者的通用场景。在Edge Impulse的“Model Testing”页面,系统会输出每个类别的Precision、Recall和F1-score,以及Overall Accuracy。

小型场景化说明:假设一个语音唤醒词检测模型,测试集包含900个“非唤醒词”和100个“唤醒词”。模型A将所有样本都预测为“非唤醒词”,准确率为90%,但召回率为0%,F1分数为0。模型B正确识别了80个唤醒词,但将50个非唤醒词误判为唤醒词,准确率为87%,召回率80%,精确率61.5%,F1分数为69.6%。显然,模型B虽然准确率略低,但实际可用性远高于模型A。在Edge Impulse中,仅看准确率会得出错误结论,必须结合F1分数评估。

常见误区:在Edge Impulse中,很多用户只关注Overall Accuracy,忽略逐类指标。当某一类样本极少时,即使该类全部预测错误,整体准确率可能仍在90%以上。此外,F1分数有宏平均(Macro)和微平均(Micro)之分,Edge Impulse默认使用宏平均,即每个类别的F1分数取算术平均,这在小类别上更敏感。若你的应用对特定类别有硬性要求,应在“Model Testing”结果中单独查看该类的指标。

经验总结:在Edge Impulse中排查精度问题时,建议按以下顺序检查:① 确认测试集划分是否合理,是否存在数据泄漏;② 查看混淆矩阵,定位哪些类别容易混淆;③ 对比训练/验证/测试精度差距,判断过拟合程度;④ 检查部署后的量化损失是否在可接受范围;⑤ 最后才考虑调整模型结构或超参数。这个顺序能帮助你快速缩小问题范围,避免盲目调参。