我了解如何为多元时间序列创建模型,也知道如何为该序列生成多步输出。但是我如何扩展这个模型以适用于多个时间序列?
我的数据包含许多国家/地区的时间序列,每个国家/地区有 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 中设置图层权重的讨论,但它没有显示如何添加权重。
我的主要问题是:
问题稍微重新表述,使数据具有不同的形状,但模型正在解决的任务基本相同。
问题中的先前尝试使用移动窗口方法对数据进行切片,这意味着形状的输出(窗口数、窗口中的天数、特征数)是从相同形状的输入创建的,尽管有更多窗户。
在当前版本中(可在GitHub上找到),未使用移动窗口,而是使用更长的预测范围来创建 28 天的预测。现在训练数据的形状为(时间序列数、天数、特征数)。这使得对跨越多个数据并同时具有多个特征的多个时间序列进行预测成为可能。
必须保持三维输入形状才能使循环模型发挥作用,并且删除滑动窗口方法不仅是为了满足三维要求,而且是为了产生更好的长期预测。