代码之家  ›  专栏  ›  技术社区  ›  deKeijzer

在预测和地面真相之间有系统偏差的LSTM

  •  0
  • deKeijzer  · 技术社区  · 7 年前

    目前,我认为我在LSTM模型中经历了一个系统性的偏移,在预测和地面真值之间。从现在开始继续下去的最佳途径是什么?

    模型架构,以及预测和;地面真值如下所示。这是一个回归问题,目标的历史数据加上5个其他相关特征 X y . 当前输入序列 n_input 长度为256,其中输出序列 n_out 这是一个。简化后,前256个点用于预测下一个目标值。

    X 标准化了。均方误差用作损失函数。使用具有余弦退火学习率的Adam作为优化器( min_lr=1e-7 , max_lr=6e-2 ).

    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    cu_dnnlstm_8 (CuDNNLSTM)     (None, 256)               270336    
    _________________________________________________________________
    batch_normalization_11 (Batc (None, 256)               1024      
    _________________________________________________________________
    leaky_re_lu_11 (LeakyReLU)   (None, 256)               0         
    _________________________________________________________________
    dropout_11 (Dropout)         (None, 256)               0         
    _________________________________________________________________
    dense_11 (Dense)             (None, 1)                 257       
    =================================================================
    Total params: 271,617
    Trainable params: 271,105
    Non-trainable params: 512
    _________________________________________________________________
    

    增加LSTM层中的节点大小,添加更多LSTM层(使用 return_sequences=True )或者在LSTM层之后添加密集层似乎只会降低精度。如有任何建议,将不胜感激。

    enter image description here

    有关图像的其他信息。y轴是一个值,x轴是时间(以天为单位)。NaN已被零取代,因为在这种情况下,地面真值永远无法达到零。这就是为什么数据中会出现奇怪的异常值。

    编辑: 我对模型做了一些修改,提高了准确性。架构是相同的,但是所使用的功能已经改变。目前,仅将目标序列本身的历史数据用作特征。与此同时,, 换了这么多 128 Adam 对于 SGD ,均方误差和平均绝对误差,最后对NAN进行插值,而不是用0代替。

    验证集上的提前一步预测看起来很好:

    enter image description here

    enter image description here

    值得注意的是,该偏移量也出现在x<的列车组上~430: enter image description here

    1 回复  |  直到 7 年前
        1
  •  6
  •   sdcbr    5 年前

    看起来您的模型拟合过度,总是返回上一个时间步的值作为预测。您的数据集可能太小,无法拥有具有如此多参数的模型。你需要求助于对抗过度拟合的技术:积极的退出,添加更多的数据,或者尝试更简单、更少过度参数化的方法。

    这些答案可能包含一些有用的信息:

    LSTM Sequence Prediction in Keras just outputs last step in the input

    LSTM model just repeats the past in forecasting time series

    LSTM NN produces “shifted” forecast (low quality result)

    Keras network producing inverse predictions

    Stock price predictions of keras multilayer LSTM model converge to a constant value

    Keras LSTM predicted timeseries squashed and shifted

    LSTM Time series shifted predictions on stock market close price

    Interesting results from LSTM RNN : lagged results for train and validation data

    最后,请注意,根据数据集的性质,可能根本没有在数据中发现任何模式。在人们试图用LSTM预测股市时,你会看到很多这种情况(关于如何预测彩票号码,存在一个关于stackoverflow的问题)。

        2
  •  -1
  •   UofT PLAGARISM DETECTOR    5 年前

    答案比我们想象的要简单得多。。。 我看到很多人说这是由于过度拟合和数据量过大造成的。其他一些人表示,这是由于重新缩放。 经过几次尝试,我找到了解决方案: 在将数据馈送到RNN之前,尝试执行去趋势化。 例如,您可以对数据进行简单的二次多项式拟合,从而得到多项式公式。并且可以减少与公式值相对应的每个数据值。然后我们得到一个新的数据集,我们可以将它反馈给LSTM,在预测之后,我们可以将趋势添加到结果中,结果应该会更好。

    推荐文章