基于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
相关产品推荐
相关产品推荐

