Darts多协变量时间序列预测:多协变量传入报错及使用咨询
多协变量时间序列预测的Darts库使用问题
我跟着一份教程做多协变量时间序列预测,教程里用.stack()合并两个协变量,但不知道怎么用这个函数添加两个以上的协变量。我尝试了如下代码:
from darts.models import BlockRNNModel my_covariate = (tg.sine_timeseries(length=LENGTH, value_frequency=(1/14), freq='D', column_name='my_covariate') + 0.4 * tg.gaussian_timeseries(length=LENGTH, freq='D')) brnn_melting_and_rain = BlockRNNModel(input_chunk_length=30, output_chunk_length=10, n_rnn_layers=2) brnn_melting_and_rain.fit(flow_train, # past_covariates=melting.stack(rainfalls).stack(rainfalls), past_covariates=[melting,rainfalls,my_covariate], epochs=10, verbose=True) eval_model(brnn_melting_and_rain, past_covariates=melting.stack(rainfalls))
运行后出现如下错误:
ValueError: The provided sequence of target series must have the same length as the provided sequence of covariate series.
我查阅了Darts文档,但未找到关于past_covariates的明确使用指引,包括应传入的数据类型及其他要求。
解决方法
协变量的正确传入方式
past_covariates需要传入单个多变量TimeSeries对象,而非列表。合并多个协变量有两种方式:- 链式调用
.stack():combined_covariates = melting.stack(rainfalls).stack(my_covariate) - 使用
TimeSeries.stack()一次性合并多个序列:combined_covariates = TimeSeries.stack([melting, rainfalls, my_covariate])
- 链式调用
对齐序列长度与时间范围
报错的核心原因是协变量序列和目标序列(flow_train)的长度或时间范围不匹配。可以通过以下方式检查:- 用
len(flow_train)、len(melting)等分别查看各序列长度 - 用
series.start_time和series.end_time确认所有序列的时间区间完全重合
- 用
训练与评估的协变量保持一致
评估模型时,需要传入和训练时相同的合并后协变量,不能只传两个,否则会因输入维度不匹配报错:eval_model(brnn_melting_and_rain, past_covariates=combined_covariates)
内容的提问来源于stack exchange,提问作者M.M
相关产品推荐
相关产品推荐

