训练LSTM模型后如何预测未来30天的时间序列值
基于已训练LSTM模型实现未来30天时间序列预测
核心思路
当前模型为单步预测模型,仅能输出下一个时间步的预测值。要完成未来30天的预测,需采用滚动预测策略:每一步的预测结果经逆变换还原后,作为下一轮预测的输入特征,循环执行30次即可得到连续的多步预测结果。
具体实现步骤
在现有代码的基础上,添加以下代码块即可完成未来30天的预测:
新增预测代码
# --------------- 未来30天预测逻辑 --------------- # 设置预测天数 n_future_days = 30 # 初始化历史数据池(用于逆差分计算) history_data = list(raw_values) # 初始输入特征:取差分序列的最后一个值 current_feature = [diff_values.values[-1]] # 存储未来预测结果 future_preds = [] for _ in range(n_future_days): # 1. 对输入特征做缩放(复用训练阶段的scaler) scaled_input = scaler.transform(numpy.array(current_feature).reshape(1, 1)) # 2. LSTM单步预测 scaled_pred = forecast_lstm(lstm_model, 1, scaled_input[0]) # 3. 逆缩放得到差分真实值 diff_pred = invert_scale(scaler, scaled_input[0], scaled_pred) # 4. 逆差分还原为原始数据尺度的预测值 raw_pred = inverse_difference(history_data, diff_pred, 1) # 5. 保存预测结果 future_preds.append(raw_pred) # 6. 更新输入特征与历史数据:为下一次预测做准备 current_feature = [diff_pred] history_data.append(raw_pred) # 打印未来30天预测结果 print("未来30天预测值:") for idx, pred in enumerate(future_preds, 1): print(f"第{idx}天: {pred:.2f}") # 可视化历史数据与未来预测 pyplot.figure(figsize=(12, 6)) pyplot.plot(raw_values, label='历史数据') # 生成未来日期对应的索引(可根据原始数据的日期格式扩展) future_indices = range(len(raw_values), len(raw_values)+n_future_days) pyplot.plot(future_indices, future_preds, label='未来30天预测', color='#ff4d4f') pyplot.legend() pyplot.show()
关键细节说明
- 模型状态保持:由于你的LSTM模型设置了
stateful=True,且测试前已通过lstm_model.predict(train_reshaped, batch_size=1)完成状态初始化,滚动预测时无需额外重置状态,模型会自动延续学习到的时序状态。 - 数据变换一致性:所有缩放、逆缩放、差分、逆差分操作必须与训练阶段完全一致,否则会导致预测结果偏离真实尺度。
- 历史数据更新:每一步逆差分计算依赖最新的历史数据,因此必须将每次预测的原始值加入历史数据池,确保后续预测的准确性。
内容的提问来源于stack exchange,提问作者Sohee
相关产品推荐
相关产品推荐

