SMARTWATCH 学习手册有 C 基础 · 嵌入式从零开始
支线四 / 数据、训练与部署 / 02

怎样准备一份能用于训练的数据

先把数据来源、时间和动作答案保存清楚,再划分训练、验证和测试。每条规则都对应一种会把结果变得不可信的具体情况。

接续上一篇:读到了加速度,怎样知道人在走路

1 · 一行采样需要保存什么

CSV 格式示意 · 时间 10 ms 一点,数值仅展示列含义

person,session,split,time_ms,label,ax,ay,az,gx,gy,gz
p1,walk01,train,0,3,0.02,0.01,1.00,0.1,0.0,0.2
p1,walk01,train,10,3,0.03,0.02,1.01,0.2,0.1,0.3

person 表示人员,session 表示一次连续采集,split 指定所属数据集合,time_ms 是采样时刻,label 是已约定动作编号。六个通道用一致的物理单位,本教学脚本约定加速度用 g,角速度用度每秒;其他数据源先转换,不能只因列名一样就混合。

当前手机消息主要传识别结果等业务数据,没有完整六轴原始窗口导出流程。训练用记录要在独立采集程序中增加专用日志输出,或使用有来源说明的公开数据;不能把 App 的分类结果日志当成原始六轴数据。

2 · 动作答案怎样跟上时间

开始记录前统一人员和场次编号,用明确操作标记动作开始、结束。过渡片段可以单独标记或排除;若整场都标走路,喝水、坐下和调整手表也会混进去。记录左右手、表带松紧、传感器量程、采样率及固件版本,以便解释之后的差异。

传感器与主控独立运行,读取一个批次的时刻不等于每个点的实际采样时刻。主线已经讲过 104→100 Hz 对齐,导出时要说明使用原始数据还是重采样数据,并保留丢批与时间缺口信息。

3 · 为什么先按人或场次划分,再切窗口

相邻且高度重叠的窗口不能分到不同集合假装独立。
相邻且高度重叠的窗口不能分到不同集合假装独立。 · 教学示意

如果把同一条长记录切成大量重叠窗口后随机分组,训练和测试可能只差几个点,成绩会显得过于乐观。若要回答“换个人是否仍可用”,应按人员分开;回答同一人的新场次也需保留独立采集。配套脚本采用按人员分开,发现同一个人员跨集合会报错。

4 · 清理数据,不凭空补出动作

先检查时间是否递增、间隔是否接近 10 毫秒、字段是否有限数值,再检查窗口中是否跨标签。示例跳过缺点或标签变化窗口,不把前一次数据反复填充进去。保留被跳过的数量及原因,评估时才能知道哪些场景被排除了。

公开数据需引用原始发布页,阅读许可、佩戴位置、采样率、通道顺序与单位。例如 PAMAP2 资料可以帮助研究,但不能未经转换就套进手表的当前输入。训练、转换和部署的每份配置都应指向具体数据版本。

5 · 把数据规范变成实际检查

train_activity.py 直接读取上述 CSV;每个 split 至少要有一份足够长的有效窗口。真实类标签从零连续编号,并另行保存类名顺序。脚本只用训练集合计算均值和标准差,验证、测试复用它们。

动手观察

拿一条有效记录,制造重复时间、缺一个点、跨集合人员三个错误,观察分别在哪一步被发现。再画出自己的采集日程,把训练、验证和最终测试场次先安排好。

资料与代码