首页 文章

LSTM - 时间序列预测

提问于
浏览
0

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

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

谢谢

3 回答

  • 0

    Process one by one

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

    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
    

    Process all together

    只需在输入的第一维中打包系列 . 模型中无需更改

    定义输入形状时,请使用 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

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

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

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

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

  • 0

    LSTM模型用于时间序列预测的真正潜力可以通过使用所有时间序列构建全局模型来开发,而不是作为单变量模型,实际上忽略了您的时间序列中可用的任何交叉序列信息 .

    我们通过引入“ Moving Window Approach ”策略来实现您所指的用例,该策略涉及对多输入和输出映射进行建模,您可以在其中汇集具有不同长度的时间序列 . 有关此策略的更详细讨论,请参阅 section 3.4 在我们的论文[1]中 . 在这里,您基本上为您给定的一组时间序列生成多个输入和输出元组,然后将它们汇集在一起以用于LSTM培训目的 . 即使您有不同长度的时间序列,这也适用 .

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

相关问题