LSTM回归问题中单步预测和多步预测的区别

问题描述 投票:0回答:1

我正在使用 keras LSTM 进行时间序列预测。这是一个回归问题,我想预测接下来的 5 个值。数据来自传感器,如下所示,其中 x 轴是采样时间,ordenates 轴是要预测的值:

为了对此提供更好的解释,让我们想象一下实际时刻由红线标记,并且我想预测下一个值(绿色箭头),因此在这种情况下,我可以预期在标记的值之后出现大幅下降红色,长期稳定:

换句话说,我想预测数值大幅下降的情况,例如下图中红色标记的情况,这样我就可以反击这种大幅下降:

到现在为止,我已经能够进行单步预测了。当我进行训练+预测时,结果非常好(蓝色是实际值,橙色是训练集的预测,绿色是验证集的预测):

为了提供 LSTM,我使用以下函数:

# convert an array of values into a dataset matrix valid for keras LSTM format
def create_dataset(dataset, look_back=1):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back), 0]
        dataX.append(a)
        dataY.append(dataset[i + look_back, 0])
    return np.array(dataX), np.array(dataY)

我使用的 LSTM 网络如下所示:

model = Sequential()
model.add(LSTM(4, input_shape=(1, look_back)))
model.add(Dense(1))

其中look_back是预测所基于的值窗口(5个值)。由于我的输出层是一个,我得出结论,这是一个单步预测,因此如果我实时使用它,我将只确定地预测下一个值。问题是我想一次预测多个值。最初,我使用像this这样的递归预测。有了它,我得到了以下预测,其中蓝色是窗口值,橙色是预测值:

我的问题是:

  1. 如何从单步转为多步?我想我需要改变密集输出层的大小?我还需要更改 LSTM 输入数据的格式吗?
  2. 5 个值的多步预测是否比 5 个值的单步预测更好?
  3. 最后但并非最不重要的一点是,LSTM 是预测这种大幅下降的最佳方法吗?
keras time-series lstm forecasting multi-step
1个回答
0
投票

如何从单步转为多步?我想我需要改变密集输出层的大小?我还需要更改 LSTM 输入数据的格式吗?

是的,你说得对。不,也不必更改输入数据。

5 个值的多步预测是否比 5 个值的单步预测更好?

更好地定义。如果你所说的更好是指w.r.t.准确度,那么 5 个单步预测可能会比 5 个步预测更准确,因为单步预测将考虑更近期的历史值(您案例中的

look_back
值)。一般来说,较长的预测比较短的预测更难,因为在长期预测中,当您尝试进一步预测未来的未来值时,误差往往会累积。

最后但并非最不重要的一点是,LSTM 是预测这种大幅下降的最佳方法吗?

这很大程度上取决于您的数据,只有通过实际评估不同的模型,您才能回答这个问题。你可以尝试:

  • N-HiTS
  • N-节拍
  • TimeGPT(基础模型)
  • LLMTime(使用大型语言模型来预测下一个值)
  • Time-LLM(也使用LLM)
© www.soinside.com 2019 - 2024. All rights reserved.