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

理解PyTorch Forecasting的TimeSeriesDataSet及验证集相关问题

验证集基于time_idx的生成逻辑

整个生成逻辑严格遵循时间序列建模的无数据泄露原则,拆分逻辑可分为三步:

  1. 先确定时间拆分边界
    代码中先计算training_cutoff = data["time_idx"].max() - max_prediction_length,也就是整个数据集的最大时间索引减去预设的预测长度(示例中为20),作为训练集的时间上限。训练集直接筛选所有time_idx <= training_cutoff的样本,保证训练数据不会触及后续要用来做验证的预测窗口。
  2. 复用训练集配置生成验证集
    TimeSeriesDataSet.from_dataset方法会直接继承训练集的所有配置(包括时间列、目标列、分组规则、编码器长度、预测长度等),不需要重复传参,避免配置不一致导致的错误。
  3. 控制验证集的预测起始点
    参数min_prediction_idx=training_cutoff + 1指定了验证集所有样本的预测窗口的第一个时间点必须大于等于training_cutoff + 1,也就是验证集要预测的时间段完全落在训练集的时间范围之外,从根源上避免数据泄露。

举个实际数值例子更容易理解:假设整个数据集的time_idx最大值是100,那么training_cutoff就是80,训练集覆盖时间080的所有数据;验证集的预测窗口是81100(刚好20个预测步),对应的编码器输入(历史60步)就是21~80的历史数据,和训练集的时间范围完全没有重叠的预测部分,符合时间序列建模的拆分规则。

教程未设置测试集的原因

主要是教程的演示属性决定的,常见原因有以下几点:

  • 简化演示流程:教程的核心目标是展示PyTorch Forecasting中TimeSeriesDataSet的定义、N-Beats模型的训练验证逻辑,额外拆分测试集、添加测试集评估代码会增加冗余流程,偏离核心演示目标。
  • 数据集长度限制:如果示例数据集的总时间长度有限,再拆分出独立测试集,会导致训练集的历史数据不足,模型训练效果差,影响教程的演示效果。
  • 验证逻辑满足演示需求:这里用的是时间序列最基础的holdout验证逻辑,单折的验证结果已经足够展示模型的训练效果,对于教程演示来说完全够用。

注意:实际工业落地场景中,必须预留完全未参与训练、验证的独立测试集,用来最终评估模型的泛化能力,教程仅为简化流程省略了该步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:15:05