4、机器学习基础:掌握特征、标签、训练集/测试集、模型、推理等核心概念,理解监督学习的基本流程

在开始Arduino TinyML项目之前,必须先建立机器学习(Machine Learning, ML)的核心概念框架。TinyML的本质是将机器学习模型压缩并部署到微控制器(如Arduino Nano 33 BLE Sense)上,因此理解数据如何被“喂”给算法、模型如何“学习”以及最终如何“工作”,是选择模型架构、调试数据采集代码和评估部署效果的前提。本章将围绕监督学习这一最主流范式,拆解特征、标签、训练集/测试集、模型与推理这五个关键要素,并梳理从数据到部署的完整流程。

监督学习核心概念与流程 数据采集 传感器原始读数 (加速度/麦克风/光) 特征提取 均值/峰值/FFT (X轴, Y轴, 频域) 数据标注 添加标签 (静止/运动/说话) 数据集 训练集 80% 测试集 20% 模型训练 输入: 训练集(特征+标签) 算法: 决策树/神经网络/KNN 模型评估 用测试集验证 准确率/混淆矩阵 部署与推理 模型转换为C++数组 Arduino上实时预测新数据 准确率不足则调整特征/模型 推理输出 类别概率 (如: 静止 0.9)

上图展示了监督学习从数据到部署的完整闭环。下面我们将逐一深入每个环节,并结合Arduino TinyML的具体场景进行说明。

4.1 核心概念:特征、标签、模型与推理

特征(Feature)是描述一个样本的量化属性。在TinyML中,特征不是原始传感器电压值,而是经过加工的信号特征。例如,使用加速度计检测手势时,原始数据是X、Y、Z三轴的连续读数,但直接将这些原始值送入模型往往效果不佳。我们需要计算窗口内的均值、方差、峰值、过零率,或者通过快速傅里叶变换(FFT)提取频域能量。这些统计量或频域分量才是真正输入模型的特征向量。

标签(Label)是监督学习中人为赋予样本的“正确答案”。对于分类任务,标签是离散的类别;对于回归任务,标签是连续数值。在Arduino项目中,标签通常对应我们想要识别的状态:静止、行走、挥手、拍手、说话等。标签的质量直接决定模型的上限——如果标签错误或模糊,再好的算法也无法学到正确的映射关系。

模型(Model)本质上是特征到标签的映射函数。在传统机器学习中,模型可能是决策树的一组分裂规则,或是支持向量机的一组权重系数;在深度学习中,模型是神经网络中成千上万个连接权重。训练过程就是通过优化算法自动调整这些参数,使得模型在训练数据上的预测误差最小化。

推理(Inference)是指使用训练好的模型对新的、未见过的数据进行预测的过程。在Arduino上,推理意味着将传感器实时采集的数据转换为特征,然后让模型计算输出类别概率。推理阶段要求计算速度快、内存占用低,这正是TinyML面临的独特挑战。

关键理解:训练和推理是两种完全不同的模式。训练通常在PC或云端完成,需要大量计算资源;推理则在Arduino上实时进行,要求极低的延迟和功耗。TinyML的核心工作之一就是将训练好的模型压缩、量化,使其能在资源受限的MCU上高效运行。

4.2 训练集与测试集:评估模型的真实能力

机器学习的目标是让模型在未见过的数据上表现良好,而非仅仅记住训练数据。因此,我们必须将采集到的全部数据划分为两个互斥的子集:训练集(Training Set)和测试集(Test Set)。

训练集用于拟合模型参数,测试集用于评估模型的泛化能力。一个常见的错误是使用训练集来评估模型,这会导致过于乐观的准确率估计。例如,模型可能完全“背下”了训练样本的噪声,但在新数据上表现糟糕——这种现象称为过拟合(Overfitting)。

数据集 用途 典型比例 注意事项
训练集 更新模型参数(权重/分裂点) 70%-80% 必须包含各类别的典型样本
测试集 评估最终模型的泛化性能 20%-30% 训练过程中绝不能“偷看”测试集
验证集(可选) 调整超参数、选择模型 从训练集中划分10%-15% 用于模型选择,而非最终评估

在Arduino TinyML项目中,数据划分需要特别注意时间相关性。如果连续采集了10分钟传感器数据,随机打乱后划分训练集和测试集,会导致同一时间段的数据同时出现在两个集合中,造成数据泄漏。正确的做法是按时间顺序划分:例如前7分钟数据作为训练集,后3分钟作为测试集,确保测试集数据在时间上与训练集不重叠。

4.3 监督学习的基本流程:从数据采集到模型部署

一个完整的监督学习TinyML项目通常包含以下六个步骤,每一步都有其特定的工具和方法。

  1. 数据采集与清洗:使用Arduino板载传感器(如IMU、麦克风、环境光传感器)采集原始数据。采集时需覆盖不同场景、不同用户、不同环境条件,以增强模型的鲁棒性。清洗包括去除异常值、处理缺失数据(通常直接丢弃不完整窗口)。
  2. 特征工程:将原始时间序列转换为有意义的特征向量。对于IMU数据,常用特征包括时域统计量(均值、标准差、均方根)和频域特征(FFT峰值、频谱质心)。特征选择的原则是:尽量用少量特征捕获足够的区分信息,避免“维度灾难”。
  3. 数据标注:为每个样本窗口分配正确的标签。在Arduino项目中,可以通过串口发送命令来实时标注,或者采集后离线标注。标注一致性至关重要——建议制定明确的标注规范,例如“手势从开始到结束的完整窗口标记为对应手势类别”。
  4. 模型训练:在PC端使用Python(scikit-learn、TensorFlow Lite)训练模型。对于初学者,建议从简单的模型开始:逻辑回归、决策树、随机森林或小型全连接神经网络。训练时需监控训练集和验证集的损失曲线,判断是否存在欠拟合或过拟合。
  5. 模型评估与优化:使用测试集计算准确率、精确率、召回率、F1分数等指标。如果准确率不达标,需要返回调整特征或模型结构。对于TinyML,还需考虑模型大小和推理时间——例如,将32位浮点权重量化为8位整数,可以显著减少内存占用。
  6. 部署与推理:将训练好的模型转换为TensorFlow Lite格式,再通过xxd工具生成C语言数组,嵌入Arduino代码中。在Arduino上,每次推理需要完成:读取传感器数据 → 计算特征 → 输入模型 → 获取输出概率 → 执行相应动作(如点亮LED、播放声音)。

经验提醒:在Arduino上调试推理时,建议先使用串口打印输出特征值和模型预测结果,与PC端测试结果进行对比。如果两者不一致,通常是因为特征计算方式不同(如归一化参数不一致)或数据预处理顺序有误。

4.4 案例拆解:基于加速度计的手势识别

让我们通过一个具体的Arduino TinyML项目来串联上述概念。假设我们要实现一个“拍手检测器”,用于控制LED灯的开关。

背景与约束:使用Arduino Nano 33 BLE Sense板载的LSM9DS1 IMU(惯性测量单元),采样频率设为50Hz(每20ms采集一次)。目标是在MCU上实时检测“拍手”动作,响应延迟小于200ms。训练数据需要从3位不同用户采集,每人做50次拍手和50次非拍手动作(如挥手、握拳),总计300个样本。

特征提取方案:每个样本窗口取40个采样点(即0.8秒)。对每个轴(X、Y、Z)计算以下特征:均值、标准差、峰值(最大值-最小值)、过零率。这样每个样本共有3轴 × 4特征 = 12维特征向量。

训练与评估:使用scikit-learn的随机森林分类器(100棵树)。按时间顺序划分:前2位用户的数据作为训练集(200个样本),第3位用户的数据作为测试集(100个样本)。训练后测试集准确率达到96%。混淆矩阵显示,主要错误是将“快速挥手”误判为“拍手”,这是因为两者在加速度幅值上相似。

部署优化:将随机森林模型转换为C数组后,占用约8KB Flash和2KB RAM,完全满足Arduino Nano 33 BLE Sense的存储限制。推理时间约15ms,满足实时性要求。在部署时,我们还在代码中加入了滑动窗口重叠(每次滑动10个采样点),以提高检测的连续性。

结果与复盘:实际运行中,检测准确率约为90%,低于测试集结果。分析原因是现场环境有振动干扰,且用户拍手力度变化较大。改进措施包括:增加训练数据多样性(加入不同力度、不同方向的拍手)、增加频域特征(FFT能量比)、以及使用更复杂的模型(如1D卷积神经网络)。

风险提示:在TinyML项目中,不要盲目追求高测试集准确率。测试集准确率是在离线数据上计算的,而实际部署时传感器噪声、用户差异、环境变化都会导致性能下降。建议在部署前进行至少一周的现场测试,收集真实场景数据来评估模型的稳定性。

4.5 常见误区与总结

初学者在理解机器学习基础时,常犯以下错误,需要特别警惕:

  • 误区一:数据越多越好,忽略数据质量。如果标注错误率高,更多数据只会让模型学到更多错误模式。应定期检查标注一致性,必要时重新标注。
  • 误区二:特征越多越好。高维特征不仅增加计算负担,还可能导致过拟合。在TinyML中,每增加一个特征,模型大小和推理时间都会增加,应优先选择物理意义明确、区分度高的特征。
  • 误区三:用训练集准确率来宣传模型性能。这是严重的学术不端和工程失误。必须使用独立的测试集来报告最终性能。
  • 误区四:忽略数据划分的时间顺序。在时间序列数据中,随机打乱划分会导致数据泄漏,使测试集结果虚高。
  • 误区五:认为模型越复杂越好。在MCU上,复杂模型(如深度神经网络)可能无法在有限内存和计算能力下运行。应优先考虑简单模型,如决策树、逻辑回归,它们往往在小型数据集上表现更好且更易部署。

总结来说,监督学习是TinyML应用的基础范式。理解特征、标签、训练集/测试集、模型和推理这五个核心概念,掌握从数据采集到部署的完整流程,是开发任何端侧AI应用的第一步。在实际项目中,建议遵循“简单模型优先、数据质量至上、充分验证再部署”的原则,逐步迭代优化。