当前位置: 首页 > news >正文

学习时序预测-day 01 XGboost进行时序预测

最近学习负荷时序预测相关模型了解的一些知识点相关的知识可见w-yes6/load-forecasting-learnXGboost就是通过滞后特征或者统计特征等学习时序模型通过树来学习残差然后进行预测的。1. “通过滞后特征或者统计特征等” —— 解决数据重塑因为树模型天生“没有时间概念”你通过滞后特征如shift(24)和滚动统计特征如过去 24 小时均值把原本“前后连贯”的时间线重塑成了一张标准的、包含历史线索的二维监督学习表格。这就是模型的输入。2. “通过树来学习残差” —— 解决核心算法在训练阶段XGBoost 内部的成百上千棵决策树开始接力跑。第一棵树粗糙地预测一个值后面的树则死死盯着前面留下的残差不正确的部分进行针对性纠错。树越建越多残差越来越小历史规律就被这些树的 If-Else 路标牢牢锁定了。3. “然后进行预测的” —— 解决未来推导到了未来虽然我们没有标准答案真实的负荷值但通过shift错位平移我们已经把明天的“特征问卷”准备好了。把明天的特征输入进固定的树群里让数据去“走迷宫”把所有树吐出来的数字加在一起未来的预测值就诞生了。代码示例import warnings import matplotlib.pyplot as plt import numpy as np import pandas as pd import xgboost as xgb # 忽略不必要的警告信息 warnings.filterwarnings(ignore) # # 1. 模拟生成一份电力负荷数据 (以小时为单位) # np.random.seed(42) # 生成 200 个小时的时间序列索引 time_index pd.date_range(start2026-05-01, periods200, freqH) # 模拟带有每日周期波动的负荷数据并加入随机噪声 base_load 100 simulated_load [] for i, t in enumerate(time_index): # 用正弦函数模拟每天 24 小时的周期性波动中午高凌晨低 daily_pattern 30 * np.sin(2 * np.pi * t.hour / 24) noise np.random.normal(0, 5) simulated_load.append(base_load daily_pattern noise) # 组装成 DataFrame df pd.DataFrame(data{load: simulated_load}, indextime_index) # # 2. 特征工程重塑数据赋予模型“历史眼光” # def create_features(data): 把纯时序数据转换成包含时间戳特征和滞后特征的表格数据 df_feat data.copy() # --- 兵团一时间戳特征 (从日期中提取If-Else判断的依据) --- df_feat[hour] df_feat.index.hour # 提取小时 (0-23) df_feat[dayofweek] df_feat.index.dayofweek # 提取星期几 (0-6) # --- 兵团二滞后特征 (直接把过去的历史写在明天的行里) --- # 假设我们只做“单步预测”预测未来1小时所以最小可以从 lag_1 起步 df_feat[lag_1] df_feat[load].shift(1) # 1小时前的负荷 df_feat[lag_2] df_feat[load].shift(2) # 2小时前的负荷 df_feat[lag_24] df_feat[load].shift(24) # 昨天同一时刻的负荷 # --- 兵团三滚动统计特征 (捕捉近期大环境的基线) --- # 基于 lag_1 滚动计算过去 6 小时的平均值防止数据泄露 df_feat[rolling_mean_6h] df_feat[lag_1].rolling(6).mean() return df_feat # 执行特征工程 df_with_features create_features(df) # 注意因为使用了 shift 和 rolling前 24 行数据会产生空值 (NaN)必须剔除 df_with_features df_with_features.dropna() # # 3. 严格按时间先后划分特征 (X) 和标签 (Y) # # 规定哪些是丢给模型走迷宫的“答卷特征” FEATURES [hour, dayofweek, lag_1, lag_2, lag_24, rolling_mean_6h] # 规定哪一个是标准的“未来答案” TARGET load # 划分训练集前 150 个小时的历史 train_df df_with_features.iloc[:150] # 划分测试集最后 26 个小时的未来真相 test_df df_with_features.iloc[150:] X_train, y_train train_df[FEATURES], train_df[TARGET] X_test, y_test test_df[FEATURES], test_df[TARGET] # # 4. 初始化并训练 XGBoost 模型 # # 创建一个 XGBoost 回归树模型 # n_estimators100: 一共建 100 棵树去串行接力纠正残差 # max_depth3: 每棵树的最大深度是 3防止路标太多导致死记硬背过拟合 # learning_rate0.1: 学习率控制每棵树修正残差的步伐大小 model xgb.XGBRegressor(n_estimators100, max_depth3, learning_rate0.1, random_state42) # 让模型开始看历史数据X_train和答案y_train一棵树接一棵树地拟合残差 model.fit(X_train, y_train) # # 5. 带着未来的特征“走迷宫”进行单步预测 # # 此时我们把测试集的特征X_test喂给建好的树模型会顺着路标相加直接吐出预测值 predictions model.predict(X_test) # 将预测结果转化为带有时间索引的 Series方便后面画图对齐 predictions_series pd.Series(predictions, indextest_df.index) # # 6. 结果可视化比对 # plt.figure(figsize(12, 5)) # 画出最后一段已知的训练集历史 plt.plot(train_df.index[-48:], train_df[load][-48:], labelHistory (Last 48h), colorblue) # 画出测试集的真实未来绿色线 plt.plot(test_df.index, y_test, labelActual Future (Truth), colorgreen, linewidth2) # 画出 XGBoost 预测出来的未来红色虚线 plt.plot(test_df.index, predictions_series, labelXGBoost Forecast, colorred, linestyle--, linewidth2) plt.title(Electricity Load Forecasting using XGBoost) plt.xlabel(Time) plt.ylabel(Load (MW)) plt.legend() plt.grid(True) plt.show()
http://www.zskr.cn/news/1396400.html

相关文章:

  • Node.js:现代 Web 开发的高性能 JavaScript 运行时
  • java中 (whlie)、 (if else)、( for)、(switch)
  • J Hepatol(IF=33.0)英国帝国理工学院:基于机器学习的影像组学模型在预测肝细胞癌免疫治疗结局中优于临床生物标志物
  • KoalaQA技术解析:现代化知识问答系统的技术架构与应用实践
  • 基于非负矩阵分解的学习者社区构建:从行为数据到兴趣图谱
  • 多模态情感识别中的动态迁移学习:解决模态语义错配的工程实践
  • FK-SENet:基于滤波与自监督的端到端属性图聚类模型解析
  • 构建低成本AI智能体工作流:本地模型与Claude API的混合架构实践
  • 从零到一:Cartographer SLAM与ROS导航实战全解析
  • FortiGate CVE-2022-40684漏洞深度复现与调试实战
  • 3步构建你的知乎知识库:智能备份所有技术内容
  • Pulover‘s Macro Creator 终极指南:从零到精通的自动化脚本生成器
  • 搞定高DPI缩放:在SetParent前后,如何让不同DPI感知的窗口和平共处?
  • X64dbg 中文乱码深度解析:从编码原理到UTF-8/UTF-16修复实战
  • 字节序处理和消息队列的控制
  • StPageFlip:开源JavaScript翻页动画库的深度技术解析与最佳实践
  • pypto:用Python直接写NPU算子,门槛有多低?
  • AIPP硬件预处理:比OpenCV快多少?
  • 2026年游戏电竞椅推荐:拓际TGIF舒适出众 - 17322238651
  • FPGA边缘AI设计空间探索:MathWorks HDL工具箱实测与避坑指南
  • 淘宝客APP源码-自营商城任务墙源码美团外卖CPS广告联的技术难点
  • FPGA硬件加速高光谱异常检测:嵌入式实时处理架构与优化实践
  • 随机数值线性代数在大规模矩阵计算中的应用与优化
  • 如何高效管理B站内容?BilibiliDown跨平台下载方案详解
  • 魔兽争霸3终极优化指南:如何用WarcraftHelper开源工具轻松提升游戏性能
  • 告别光阱能量不均:用Python复现加权GSW算法,手把手教你优化全息光镊
  • 3步搞定:微信聊天记录永久保存的实用方案
  • 影像技术实战27:图片压缩到指定大小不失真?质量二分搜索 + 尺寸兜底方案
  • 迁移学习与通用势函数驱动的高通量材料筛选工作流实践
  • VMware装Linux避坑大全:从CentOS网络连接到Ubuntu中文乱码,一次解决