睡眠拓展:为什么一次判断需要更长时间
从三十秒记录的统计特征出发,解释五个窗口怎样组成输入,以及实时运行时的时间对齐与数据缺失为什么重要。
1 · 先明确当前判断任务
当前 sleep_model 输出清醒与睡眠两个结果,不是完整多阶段睡眠分期。数据来自运动、光学、心率、温度与时间等特征。历史文件中有其他维度和模型,阅读时以实际编译和当前接口为准。
睡眠表现是较长时间变化,单个加速度点不能说明已经睡着。先按三十秒整理一个统计窗口,观察运动强弱、光学变化和心率间期等特征,再讨论分类。
2 · 从原始样本到 56 个特征
sleep_features_feed 接收原始 104 Hz 运动批次及最多 25 个 100 Hz 光学样本,与活动模型的 100 Hz 重采样输入不同。每个三十秒窗口形成 56 个特征;均值、离散程度、频带或间期等统计必须与训练定义一致。
心率变异性涉及心搏间隔,漏掉光学样本可能影响峰值与间期,不能用旧样本补齐后继续当完整记录。当前实现会让缺失窗口失效,教程先画缺口如何传播到输入有效性。
3 · 五个窗口,究竟表示哪个时刻
五份 56 维特征组成 280 维输入,覆盖约 150 秒。若训练定义以中间窗口为标签,左右各两份提供上下文,在线运行要等到之后两份完成,意味着对应时间上的约一分钟等待。
当前工程按积累的连续窗口组装输入,具体输出对应哪一时刻要和原训练标签定义核对。不能简单把每次调用时刻当成无延迟的睡眠发生时刻;图中分别标出采样时段、被判断窗口和计算结果到达时间。
4 · 树模型与神经网络接口有什么联系
当前睡眠模型为树集成的 C 推理实现,接口接收 280 个 float,输出 [P(wake),P(sleep)]。前面训练的数据准备、独立评估与输入一致性仍适用,但内部不是照搬活动网络的卷积层,也不需要假装所有模型都通过相同 stai 包装。
main.c 中先确认特征就绪,再获取特征并调用 sleep_model_predict,读取第二项作为睡眠输出。沿调用而不是只读旧头文件说明判断真实行为。
5 · 怎样描述结果才符合验证范围
需要独立记录作为参考,明确标签来源、时间对齐和缺失比例。设备佩戴场景与原始研究数据可能不同,分类分数不能代替临床诊断。教程讲清计算与评估方法,不以代码中的历史成绩宣称当前手表具有同等效果。
在时间轴上画五个三十秒窗口,标出中间标签何时可输出。删去一个批次后,说明哪份统计和哪次 280 维输入受到影响。