我一直在尝试使用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)吗?
感谢所有能够阐明自己的人。