【发布时间】:2018-09-22 15:36:32
【问题描述】:
我正在关注本教程LSTM,我想知道如何将其映射到多时间序列输入。我有几个时间序列的数据集,我想预测每个时间序列的未来。我不知道如何将 LSTM 扩展到多个时间序列。
目的是避免为每个时间序列制作模型,因为我有 40k 个时间序列。
谢谢
【问题讨论】:
标签: python tensorflow machine-learning keras lstm
我正在关注本教程LSTM,我想知道如何将其映射到多时间序列输入。我有几个时间序列的数据集,我想预测每个时间序列的未来。我不知道如何将 LSTM 扩展到多个时间序列。
目的是避免为每个时间序列制作模型,因为我有 40k 个时间序列。
谢谢
【问题讨论】:
标签: python tensorflow machine-learning keras lstm
一一处理
只需在这样的循环中执行完全相同的操作:
for epoch in range(numberOfEpochs):
for sequence in yourSequences:
model.reset_states()
#1 - do the entire training for this sequence (1 epoch only)
#you may use "model.train_on_batch" to avoid some overhead in "fit"
#or 2 - do the entire predictoins for this sequence
一起处理
只需将系列打包到输入的第一维中。无需更改模型
定义输入形状时,使用batch_input=(number_of_time_series,length,features) 或batch_input_shape=(number_of_time_series,length,features)。 (您可能需要更小的批量大小,因为 40K 太多了)
shuffle=False。 model.reset_states() 并开始一组新的序列。 。
batch_size = ....
for epoch in range(numberOfEpochs):
firstSeq = 0
lastSeq = firstSeq + batch_size
while lastSeq <= len(sequences):
model.reset_states()
batch = sequences[firstSeq:lastSeq]
#train the entire batch (one epoch only)
#or predict for the entire batch
firstSeq += batch_size
lastSeq += batch_size
【讨论】:
由于您使用单独的时间序列,我认为保持 stateful = True 不是一个好主意。
实际上,您的问题更接近于 LSTM 的“通用”使用。
尝试将您的系列连接到一个二维数组中,其中每一行对应一个系列。然后像这样重塑您的数据:(number_of_series , timesteps (length of a single serie) , 1),然后将其提供给您的网络。
根据您的系列的长度,您可能需要阅读以下内容:https://machinelearningmastery.com/handle-long-sequences-long-short-term-memory-recurrent-neural-networks/
【讨论】:
LSTM 模型在时间序列预测方面的真正潜力可以通过使用所有时间序列构建一个全局模型来加以利用,而不是作为一个单变量模型,它实际上会忽略整个时间序列中可用的任何跨序列信息。
我们通过引入“移动窗口方法”策略来实现您所指的用例,该策略涉及对多输入和输出映射进行建模,您可以在其中汇集具有不同长度的时间序列。在我们的论文[1] 的第 3.4 节中描述了对该策略的更详细讨论。在这里,您基本上为您拥有的给定时间序列集生成多个输入和输出元组,然后将它们汇集在一起用于 LSTM 训练目的。即使您有不同长度的时间序列,这也能适应。
【讨论】: