详细内容或原文请订阅后点击阅览
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
(
年
(
日期
)
==
年
(