我正在使用LSTM进行时序预测。我的目标是使用25个过去值的窗口,以便为接下来的25个值生成一个预测。我递归地这样做:我使用25个已知值来预测下一个值。将该值追加为已知值,然后移动这25个值并再次预测下一个值,直到我有25个新生成的值(或更多)为止。
我使用"Keras“来实现RNN体系结构:
regressor = Sequential()
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.1))
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.1))
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.1))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'rmsprop', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 10, batch_size = 32)问题:无论前面出现什么顺序,递归预测总是收敛到某个值。



当然,这不是我想要的,我以为生成的序列会根据我以前的情况而有所不同,我想知道是否有人知道这种行为以及如何避免这种行为。也许我做错了什么..。
我试过不同的年代数,但没有多大帮助,实际上更多的年代使情况更糟。更改批大小、单位数、层数和窗口大小也无助于避免此问题。
我使用MinMaxScaler作为数据。
发布于 2018-03-26 14:29:20
如果要使用LSTM进行时间序列预测,则必须尝试每个可能的参数,以找到最佳的可能结果。为了检查您的模型性能,您还应该检查您的列车/验证损失(这可能会显示10个时期太少)。检查您的网络架构。你为什么要用三层?更多的层次并不意味着更好的结果。用不同的学习率尝试不同的优化器。最后,问问自己,你为什么还要用LSTM来预测呢?你试过其他方法吗?LSTM不是魔法,如果没有任何模式可供借鉴,它们就不会有完美的预测,而且您有相当小的样本可供培训。
发布于 2019-05-22 08:26:08
似乎您的RNN对于单变量时间序列的建模来说太复杂了:我建议使用更简单的模型,使用更少的LSTM层。
从长期来看,时间序列预测一直存在收敛到某一均值的问题。实时时间序列被认为受到来自“环境”的“冲击”,导致突然增加或减少。如果你的数据中没有这些冲击,并且不对它们何时发生作出任何假设,那么唯一明智的长期预测将是一些恒定值。你觉得这很直观吗?
其次,使用LSTM进行递归预测会导致错误的大量积累。例如,当预测时间步骤t+ 3时,模型的隐藏状态和输入的数据(在本例中为t+2输入:您对t+2的预测)都会受到一些错误的影响。在训练过程中,只有隐藏的状态受到错误的影响:输入是实际的观测。你知道这会导致这种极端的预测失控吗?
发布于 2018-03-26 11:28:38
对于回归,激活函数通常保持线性。
https://datascience.stackexchange.com/questions/26639
复制相似问题