【问题标题】:LSTM - time series predictionsLSTM - 时间序列预测
【发布时间】:2018-09-22 15:36:32
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: python tensorflow machine-learning keras lstm


    【解决方案1】:

    一一处理

    只需在这样的循环中执行完全相同的操作:

    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
    

    【讨论】:

      【解决方案2】:

      由于您使用单独的时间序列,我认为保持 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/

      【讨论】:

        【解决方案3】:

        LSTM 模型在时间序列预测方面的真正潜力可以通过使用所有时间序列构建一个全局模型来加以利用,而不是作为一个单变量模型,它实际上会忽略整个时间序列中可用的任何跨序列信息。

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

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

        【讨论】:

        • 请在答案中包含文档的相关部分,以便链接断开,答案仍然有意义。
        • @Dragonthoughts 感谢您的周到反馈。我更新了答案以仅反映论文的相关部分。
        猜你喜欢
        • 2018-11-16
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        • 2017-10-03
        • 2020-07-21
        • 2021-09-30
        相关资源
        最近更新 更多