torch 时间序列继续:首次尝试多步预测

我们继续探索使用 torch 进行时间序列预测,转向为多步预测设计的架构。在这里,我们通过多层感知器 (MLP) 增强了“主力 RNN”,以推断未来的多个时间步。

来源:RStudio AI博客

我们从本系列第一篇文章的内容开始:应对多步骤时间序列预测的任务。

本系列第一篇文章

我们的第一次尝试是一种变通方法。该模型经过训练可以提供与下一个时间点相对应的单个预测。因此,如果我们需要更长的预测,我们所能做的就是使用该预测并将其反馈给模型,将输入序列移动一个值(例如,从 \([x_{t-n}, ..., x_t]\) 到 \([x_{t-n-1}, ..., x_{t+1}]\))。

\([x_{t-n}, ..., x_t]\) \([x_{t-n-1}, ..., x_{t+1}]\)

相比之下,新模型将被设计和训练为一次预测可配置数量的观测值。架构仍然是基本的——考虑到任务,尽可能的基本——因此,可以作为后续尝试的基线。

数据输入

我们使用与以前相同的数据,来自 tsibbledata 的 vic_elec。

vic_elec tsibbledata

但与上次相比,数据集类必须改变。虽然以前对于每个批次项目,目标 (y) 都是单个值,但现在它是一个向量,就像输入 x 一样。就像 n_timesteps 曾经(现在仍然)用于指定输入序列的长度一样,现在有第二个参数 n_forecast 来配置目标大小。

dataset y x n_timesteps n_forecast

在我们的示例中,n_timesteps 和 n_forecast 设置为相同的值,但没有必要这样。您可以同样好地对为期一周的序列进行训练,然后预测一天或一个月的发展。

n_timesteps n_forecast

除了 .getitem() 现在返回 y 和 x 的向量之外,关于数据集创建没有太多可说的。以下是设置数据输入管道的完整代码:

.getitem() y x n_timesteps <- 7 * 24 * 2 n_timesteps <- 7 * 24 * 2 n_forecast <- 7 * 24 * 2 n_forecast <- 7 * 24 * 2 batch_size <- 32 batch_size <- 32 vic_elec_get_year <- function(year, month = NULL) { vic_elec_get_year <- function ( year month = NULL ) { vic_elec %>% vic_elec %>% filter filter 日期 ==