You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加速度计时间序列数据分类:如何划分训练与测试集?

针对独立时间序列加速度数据的数据集划分方案

首先明确核心原则:你的41个CSV是独立时间序列,绝不能直接合并后随机打乱划分训练/测试集——这样会导致同一序列的片段同时出现在训练和测试中,模型会学到时间相关性,泛化到新序列时表现极差。以下是几种合理的方案:

1. 按独立文件(序列)分层划分

这是最推荐的方案,完全符合独立样本的假设:

  • 将41个文件作为独立分组,按分层抽样的方式划分(比如8:2的比例),保证训练集和测试集中4种交通模式的标签比例与整体数据一致。
  • 实现时可以用sklearn.model_selection.StratifiedGroupKFold,把每个文件的索引作为group参数,标签作为y,同时保证分层和分组独立性。
  • 示例代码片段:
    from sklearn.model_selection import StratifiedGroupKFold
    import numpy as np
    
    # 假设每个文件对应一个group,labels是所有文件的标签列表(默认每个文件内标签统一)
    groups = np.arange(41)
    labels = [df['label'].iloc[0] for df in subjects]
    
    sgkf = StratifiedGroupKFold(n_splits=5)  # 5折交叉验证,可调整为固定训练测试划分
    for train_idx, test_idx in sgkf.split(subjects, labels, groups):
        train_files = [subjects[i] for i in train_idx]
        test_files = [subjects[i] for i in test_idx]
        # 后续合并训练文件提取特征,测试文件同理
    

2. 滑动窗口特征提取+按组划分

Random Forest无法直接处理原始时间序列,需先做滑动窗口特征工程:

  • 设定窗口大小(比如1秒=100个采样点,或2秒=200个点,根据数据波动调整),滑动步长(比如50个点,即50%重叠)。
  • 对每个窗口提取特征:时域(均值、标准差、最大值、最小值、三轴相关系数)、频域(FFT后各频段能量、主频率)等,每个窗口生成一个特征向量,标签与窗口所属序列的标签一致。
  • 划分时,将同一原始序列的所有窗口归为一组,保证训练集和测试集的窗口来自不同原始序列,彻底避免数据泄露。

3. 单文件内划分(仅当文件足够长时使用)

如果每个CSV文件包含的时间序列足够长(比如超过10分钟),可以在单个文件内部划分训练和测试段:

  • 比如取每个文件的前80%时间片段做训练,后20%做测试,保证时间上不重叠。
  • 这种方案适合每个文件是同一受试者的连续采集,但泛化能力不如按文件分组的方案,模型可能学到特定受试者的行为模式。

关键注意事项

  • 特征工程优先:必须先把原始时间序列转换成固定维度的特征向量,再输入Random Forest,否则模型无法有效学习。
  • 避免数据泄露:所有特征归一化、统计量计算(比如均值、标准差)必须只在训练集上拟合,再应用到测试集。
  • 标签一致性:如果单个文件内存在多个标签(比如同一序列中切换了交通模式),要保证每个滑动窗口的标签与窗口内的主导标签一致。

内容的提问来源于stack exchange,提问作者Maxl Gemeinderat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:17:25