LSTM - 时间序列预测

时间:2018-04-12 13:01:57

标签: python tensorflow machine-learning keras lstm

我正在关注本教程LSTM,我想知道如何将其映射到多时间序列输入。我有几个时间序列的数据集,我想预测每个时间序列的未来。我不知道如何将LSTM扩展到几个时间序列。

目标是避免为每个时间序列制作模型,因为我有40k的时间序列。

谢谢

3 个答案:

答案 0 :(得分:0)

逐个处理

在这样的循环中完全相同:

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
  • 如果您的批次不是40k,请确保处理每批的整个长度(整个培训或预测),然后使用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

答案 1 :(得分:0)

由于您使用的是单独的时间序列,我不认为保持有状态= True是一个好主意。

实际上,您的问题更接近于LSTM的“通用”使用。

尝试在2d数组中连接你的系列,其中每一行对应一个系列。然后重塑您的数据:( number_of_series,timeteps(单个系列的长度),1),然后将其提供给您的网络。

根据系列的长度,您可能需要阅读:https://machinelearningmastery.com/handle-long-sequences-long-short-term-memory-recurrent-neural-networks/

答案 2 :(得分:-1)

可以通过使用所有时间序列构建全局模型(而不是作为单变量模型)来利用LSTM模型进行时间序列预测的真正潜力,而该模型实际上忽略了整个时间序列中可用的任何交叉序列信息。

我们通过引入“ 移动窗口方法”策略来实现您所指的用例,该策略涉及对多个输入和输出映射进行建模,您可以在其中合并具有不同长度的时间序列。关于该策略的更详细讨论,请参见我们论文的第3.4节。在这里,您基本上会为给定的时间序列集生成多个输入和输出元组,然后将它们合并在一起以进行LSTM训练。即使您有不同长度的时间序列,也可以容纳。

[1] https://arxiv.org/pdf/1710.03222.pdf