首页
/ Darts时间序列预测中的超参数优化与验证集划分策略

Darts时间序列预测中的超参数优化与验证集划分策略

2025-05-27 16:28:56作者:宣海椒Queenly

概述

在时间序列预测项目中,合理的超参数优化和验证集划分是确保模型性能的关键环节。本文将详细介绍如何在Darts框架中实现时间序列预测模型的超参数优化,特别是验证集的正确使用方法。

时间序列数据划分的特殊性

与传统机器学习不同,时间序列数据具有时间依赖性,因此不能简单地随机划分数据集。Darts框架提供了灵活的方法来处理这种特殊性。

典型的时间序列数据划分方案

对于时间范围从2020-01-01到2023-12-31的数据集,推荐采用以下划分方式:

  1. 训练集:2020-01-01至2022-01-01
  2. 验证集:2022-01-01至2022-12-31
  3. 测试集:2023-01-01至2023-12-31

这种划分保持了时间顺序,确保模型不会"看到"未来的数据。

超参数优化实现方法

在Darts中,可以通过以下步骤实现超参数优化:

  1. 定义目标函数:使用验证集评估模型性能
  2. 设置搜索空间:为每个超参数指定可能的取值范围
  3. 运行优化过程:使用Optuna等工具寻找最佳参数组合

关键代码实现

以下是超参数优化阶段的典型代码结构:

def objective(trial):
    # 定义超参数搜索空间
    forecast_horizon = 24
    fc_lags_dict = {}
    for feature in future_cov:
        future_cov_lags_lower_bound = trial.suggest_int(f'fc_lb_{feature}', -96, -1)
        future_cov_lags_upper_bound = trial.suggest_int(f'fc_up_{feature}', 1, 72)
        fc_lags_dict[feature] = list(range(future_cov_lags_lower_bound, future_cov_lags_upper_bound))
    
    # 构建模型
    model = LinearRegressionModel(
        lags=list(range(target_lags_lower_bound, 0)),
        lags_past_covariates=None,
        lags_future_covariates=fc_lags_dict,
        output_chunk_length=forecast_horizon,
        multi_models=True,
    )
    
    # 在验证集上评估模型
    hf_results = model.historical_forecasts(
        series=target_hf[:val_end],
        past_covariates=None,
        future_covariates=future_cov_hf,
        start=val_start,
        retrain=30,
        forecast_horizon=24,
        stride=24,
        train_length=2160,
        verbose=True,
        last_points_only=False,
    )
    
    return return_metrics(hf_results)

最终测试阶段

完成超参数优化后,应在独立的测试集上评估模型性能:

# 使用优化后的参数构建最终模型
final_model = LinearRegressionModel(
    lags=best_lags,
    lags_past_covariates=None,
    lags_future_covariates=best_fc_lags,
    output_chunk_length=24,
    multi_models=True,
)

# 在测试集上评估
test_results = final_model.historical_forecasts(
    series=target_hf,
    past_covariates=None,
    future_covariates=future_cov_hf,
    start=test_start,
    retrain=30,
    forecast_horizon=24,
    stride=24,
    train_length=2160,
    verbose=True,
    last_points_only=False,
)

高级应用:滚动窗口验证

对于需要更频繁更新超参数的情况,可以考虑实现滚动窗口验证策略:

  1. 定义多个连续的验证窗口
  2. 在每个窗口上独立进行超参数优化
  3. 汇总各窗口的优化结果

这种方法虽然计算成本较高,但能更好地适应时间序列中的概念漂移问题。

最佳实践建议

  1. 确保验证集足够大,能够代表数据的整体特性
  2. 考虑季节性因素,验证集应包含完整的季节性周期
  3. 记录每次实验的参数和结果,便于分析比较
  4. 在计算资源允许的情况下,增加验证集的数量或大小

通过合理的数据划分和超参数优化策略,可以在Darts框架中构建出性能优异的时间序列预测模型。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
197
2.17 K
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
208
285
pytorchpytorch
Ascend Extension for PyTorch
Python
59
94
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
973
574
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
549
81
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.02 K
399
communitycommunity
本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息
393
27
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
1.2 K
133