在KERAS中使用LSTM进行多变量输入单变量多步输出时间序列预测-什么方法?

时间:2018-11-22 16:07:38

标签: keras time-series lstm forecasting multi-step

我一直在尝试使用Keras的LSTM模型的多个功能对产品/ $的销售额进行时间序列预测。我对LSTM建模还是陌生的-我可能做错了事。

我有大约一年半的每小时数据,得出11904个时间步。 这些要素包括几个数值天气数据,以及几个热编码要素,例如星期几,一天中的小时。最后,我想使用每个功能(包括销售)的最后m小时来预测产品销售的接下来的n小时。我举一个小例子,说明如何准备数据。我的时间序列的结构如下:“ T”代表我感兴趣的值,“ a”代表要素时间序列。我目前有41个功能。

dataset=array
 ([['T0', 'a0'],
   ['T1', 'a1'],
   ['T2', 'a2'],
   ['T3', 'a3'],
   ['T4', 'a4'],
   ['T5', 'a5'],
   ['T6', 'a6'],
   ['T7', 'a7'],
   ['T8', 'a8'],
   ['T9', 'a9']], dtype='<U2')

我使用的是滑动窗口方法,因为我只有一个时间序列。

在示例中,我使用了5个先前的时间步长来预测3个提前量。 我的X看起来像这样:

X=array
 ([[['T0', 'a0'],
    ['T1', 'a1'],
    ['T2', 'a2'],
    ['T3', 'a3'],
    ['T4', 'a4']],

   [['T1', 'a1'],
    ['T2', 'a2'],
    ['T3', 'a3'],
    ['T4', 'a4'],
    ['T5', 'a5']],

   [['T2', 'a2'],
    ['T3', 'a3'],
    ['T4', 'a4'],
    ['T5', 'a5'],
    ['T6', 'a6']]], dtype='<U2')

我的目标是这样的:

y=array
 ([['T5', 'T6', 'T7'],
   ['T6', 'T7', 'T8'],
   ['T7', 'T8', 'T9']], dtype='<U2')

第一季度:这是可行的方法吗?我读到LSTM不需要像这样准备数据,因为它能够形成窗口本身。

现在我想用过去的72小时来预测接下来的24小时。 对于我的网络,X和y的形状如下所示:

trainX.shape=(11699, 72, 41) ##### my test was very small
trainY.shape=(11699, 24)

LSTM模型本身:

n_features=41
neurons=50
look_ahead=24
model = Sequential()
model.add(LSTM(input_dim=n_features, output_dim=neurons))
model.add(Dropout(.2))
model.add(Dense(look_ahead))
model.compile(loss='mse', optimizer='rmsprop')
hist=model.fit(trainX, trainY, epochs=20,shuffle=False)

我认为我确实得到了合理的结果(0到0600之间的下垂,最大为1800-2000等),但是我很难理解模型是否确实按照我的意愿去做。

第二季度我的理解是,我输入了41个功能的最后72个时间步,并提出了24个功能的一个时间步-因为我的训练数据是这样构成的。然后,我将其解释为24个时间步。该模型是否学习顺序方面?

Q3 通过将训练数据分成72小时,我失去了比72小时更长的时间/模式吗?

第4季度严格来说,我什至会投入相等的样本吗?与12月相比,7月的72小时完全没有其他天气特征。

第5季度,到目前为止,我仅对数据进行规范化/缩放(MinMaxScaler)。如果某些天气数据或我的销售情况不稳定,我需要事先进行设置吗?

问题6 ,我需要更改什么才能使其学习更长的模式?  我读到太​​多的时间步骤也不好。  我发现了关于有状态LSTM的一些信息,但还没有弄清楚-这是另一种可行的方法吗?我会在那里将输入更改为(1,11699,41)吗?

感谢所有能够阐明自己的人。

0 个答案:

没有答案