You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于LSTM实现多特征N天时间序列多步预测

多特征LSTM滚动多步预测实现方案

你的核心需求是基于训练好的LSTM模型,通过滑动窗口滚动预测后续103条多特征数据。核心逻辑是每完成一次单步预测,就将预测结果加入输入窗口,滑动窗口后继续预测下一条,循环直至完成103条数据的预测。

实现步骤与代码

1. 准备初始输入窗口

取数据集中最后一段长度为535的序列作为初始输入窗口(和训练时的输入窗口长度一致),示例中用测试集的最后535条:

# 取测试集最后535条作为初始预测窗口
initial_window = test[-535:]  # shape: (535, 17)
# 调整为模型接受的输入shape: (1, 535, 17)
current_input = initial_window.reshape(1, initial_window.shape[0], initial_window.shape[1])

2. 滚动预测103条数据

初始化空列表存储预测结果,循环执行预测-更新窗口的操作:

# 存储所有预测结果
predictions = []

# 循环预测103条数据
for _ in range(103):
    # 预测下一条数据
    next_pred = model_2.predict(current_input, verbose=0)  # shape: (1, 17)
    # 将预测结果加入列表
    predictions.append(next_pred[0])
    # 更新滑动窗口:移除窗口第一个样本,加入新预测的样本
    window = current_input[0]
    new_window = np.concatenate([window[1:], next_pred], axis=0)
    # 重新调整为模型输入shape
    current_input = new_window.reshape(1, new_window.shape[0], new_window.shape[1])

# 将预测结果转为numpy数组
predictions = np.array(predictions)  # shape: (103, 17)

3. 反归一化还原原始尺度

由于训练前做了MinMaxScaler归一化,需要将预测结果还原为原始数据范围:

# 反归一化
predicted_data = scaler.inverse_transform(predictions)
# predicted_data即为最终的103条多特征预测结果,shape: (103,17)

关键说明

  • 滑动窗口的核心是用预测结果不断更新输入序列,模拟无未来数据的真实预测场景
  • 初始窗口长度必须和训练时的size参数(此处为535)完全一致,否则模型会因输入形状不匹配报错
  • 若要基于整个数据集的最后一段做预测,将initial_window替换为scaled_data[-535:]即可

内容的提问来源于stack exchange,提问作者Werewolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:10:56