如何用极限机器学习(Extreme Machine Learning)实现未来12个月时序预测
实现2023年12个月时间序列预测的解决方案
当前你的代码仅能对已有测试集做滑动窗口单步预测,要生成2023年未来12个月的预测,核心是递归式多步预测——用模型输出的预测值作为下一次预测的输入,循环迭代生成未来数据。具体步骤如下:
1. 准备初始预测窗口
首先用训练集的统计量对全量数据做标准化,再取最后m个点作为初始输入窗口:
# 用训练集的均值和标准差对全量数据做标准化 data_scaled = (data - mean_train) / sd_train # 取最后m个标准化后的数据点作为初始窗口(确保格式与训练输入一致) current_window = data_scaled[-m:].flatten()
2. 递归迭代生成12个月预测
循环12次,每次预测一个时间步的值,然后更新输入窗口(移除最旧的点,加入新预测的点):
# 存储标准化后的预测值 future_preds_scaled = [] # 循环预测12次 for _ in range(12): # 将窗口转为模型要求的输入形状(与训练时X_train的形状匹配:(1, m)) X_future = current_window.reshape(1, -1) # 调用现有predict函数得到标准化的预测值 pred_scaled = predict(X_future)[0][0] # 保存当前预测值 future_preds_scaled.append(pred_scaled) # 更新窗口:移除第一个元素,添加新预测值 current_window = np.append(current_window[1:], pred_scaled)
3. 反标准化得到真实预测值
将标准化的预测值转换为实际业务数值:
# 用训练集的均值和标准差反标准化 future_preds = np.array(future_preds_scaled) * sd_train + mean_train
注意事项
- 输入形状匹配:确保
X_future的形状与训练时X_train的形状一致(比如你的X_train是(n_samples, m),所以要转成(1, m)) - 误差累积问题:递归预测会逐步累积误差,如果序列波动较大,后期预测误差可能会增大。若要优化,可考虑直接多步预测(训练模型一次性输出12步结果),但实现复杂度更高
- 窗口含义确认:确认
m=14代表的时间步长度(比如14天/14个月),确保初始窗口和迭代逻辑与数据频率匹配
内容的提问来源于stack exchange,提问作者NguyenNguyen
相关产品推荐
相关产品推荐

