keras 基于LSTM的多变量多步时间序列预测

z9ju0rcb  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(153)

我了解如何为多变量时间序列创建模型,也知道如何为该序列生成多步输出。但是我如何扩展这个模型来处理多个时间序列呢?
我的数据包含许多国家的时间序列,每个国家有5个特征。我的目标是为每个国家提供未来28天的预测。
这是一个多变量时间序列的图(图中未显示其中一个特征):

下面的模型是一个编码器解码器LSTM,能够产生28天的预测(尽管它们不是很准确):

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
lstm_1 (LSTM)                (None, 10)                640
_________________________________________________________________
repeat_vector_1 (RepeatVecto (None, 7, 10)             0
_________________________________________________________________
lstm_2 (LSTM)                (None, 7, 10)             840
_________________________________________________________________
time_distributed_1 (TimeDist (None, 7, 5)              55
=================================================================
Total params: 1,535
Trainable params: 1,535
Non-trainable params: 0
_________________________________________________________________

训练数据被分成7天的周期,每个周期比前一个周期提前一天。示例(但只有一个功能而不是5个):

[1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 5, 6, 7, 8] ...

提供给LSTM的数据具有以下形状:

Train_x shape: (113, 7, 5)
Train_y shape: (113, 7, 5)
Test shape: (4, 7, 5)

如何为187个国家做到这一点?

我发现一个answer说,在训练过程中可以使用国家的名称作为变量。另一个one显示了如何将时间序列数据与分类值合并。
在第二个线程中,最好的方法包括使用分类数据的学习表示添加(或设置)递归层的权重。基本上通过Dense层传递国家名称,并将输出添加到LSTM权重。
我发现了一个关于在Keras中设置层权重的discussion,但它没有显示如何添加权重。
我的主要问题是:

  • 如果Keras模型中的所有节点都必须连接,那么名称的Dense层在哪里?
  • 如何增加权重而不是增加权重(这有什么区别吗)?
  • 有没有更好的方法来预测多个时间序列?
  • 简单地根据每个国家的数据重新训练模型会有多糟糕?
bybem2ql

bybem2ql1#

这个问题被稍微重新表述,使数据具有不同的形状,但模型解决的任务基本上是相同的。
在这个问题中,之前的尝试使用了移动窗口方法来切片数据,这意味着形状的输出(窗口数量,窗口中的天数,特征数量)是从相同形状的输入创建的,尽管有更多的窗口。
在当前版本(在GitHub上找到)中,没有使用移动窗口,而是使用更长的预测范围来创建28天的预测。现在,训练数据具有形状(时间序列的数量,天数,特征的数量)。这使得可以对跨越多个数据并同时具有多个特征的多个时间序列进行预测。
为了使递归模式能够工作,必须保持三维输入形状,并且取消了滑动窗口方法,这不仅符合三维要求,而且还可以产生更好的长期预测。

相关问题