使用XGBoost进行单变量时间序列预测:从数据准备到模型优化
创作时间:
作者:
@小白创作中心
使用XGBoost进行单变量时间序列预测:从数据准备到模型优化
引用
CSDN
1.
https://blog.csdn.net/sinat_41858359/article/details/145704577
本文通过一个具体的案例,逐步讲解了如何使用XGBoost模型进行单变量时间序列预测。内容包括数据读取、格式转换、模型训练、预测、评估等多个环节,并配有详细的代码示例和结果展示。
一、引言
XGBoost 是一种高效的梯度提升树(Gradient Boosting Decision Tree, GBDT)算法。尽管 XGBoost 主要用于监督学习任务(如分类和回归),但通过适当的数据预处理,它也可以用于时间序列预测(Time Series Forecasting)。本文通过一个具体的案例逐步讲解XGBoost模型用于单变量时序数据预测。
二、实现过程
2.1 读取时间序列数据
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.read_csv('data.csv')
data['Month'] = pd.to_datetime(data['Month'])
df = data
sns.set(font_scale=1.2)
plt.rc('font', family=['Times New Roman', 'SimSun'], size=12)
plt.figure()
plt.plot(df['Month'], df['Passengers'], color='b', alpha=0.6, label='Original Time Series')
plt.title('Original Time Series', fontsize=12)
plt.legend()
plt.tight_layout()
plt.show()
2.2 数据格式转换
使用滑动窗口法将时间序列数据转换为监督学习格式:
from sklearn.preprocessing import create_lag_features
df_lagged = create_lag_features(df, lags=10)
X = df_lagged.drop(columns=['Passengers'])
y = df_lagged['Passengers']
2.3 数据集划分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
2.4 模型训练
from xgboost import XGBRegressor
model = XGBRegressor(objective='reg:squarederror', n_estimators=200, learning_rate=0.1, max_depth=5)
model.fit(X_train, y_train)
2.5 模型预测
y_pred = model.predict(X_test)
2.6 模型评估
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.4f}')
可视化预测结果:
plt.figure()
plt.plot(y_test.values, label='Actual', color='g')
plt.plot(y_pred, label='Predicted', color='r', linestyle='dashed')
plt.title('Actual vs Predicted', fontsize=12)
plt.legend()
plt.tight_layout()
plt.show()
查看预测误差的分布情况:
plt.figure()
sns.histplot(y_test - y_pred, bins=30, kde=True, color='purple')
plt.title('Error Distribution', fontsize=12)
plt.tight_layout()
plt.show()
2.7 特征重要性分析
分析哪些滞后变量对预测最重要:
plt.figure()
feature_importance = model.feature_importances_
sns.barplot(x=X.columns, y=feature_importance, palette='viridis')
plt.title('Feature Importance', fontsize=12)
plt.xticks(X.columns, rotation=45)
plt.tight_layout()
plt.show()
2.8 参数调优
使用网格搜索进行参数调优:
from sklearn.model_selection import GridSearchCV
grid_params = {
'n_estimators': [100, 200, 500],
'max_depth': [3, 5, 7],
'learning_rate': [0.01, 0.1, 0.2]
}
grid_search = GridSearchCV(XGBRegressor(objective='reg:squarederror'), grid_params, cv=3, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)
print(f'Best Parameters: {grid_search.best_params_}')
热门推荐
小儿智力发育迟缓的原因了解哪些?
发育迟缓可能与脑有关!还会影响心、肝,不吃药也能解决的方法......
葛根药理作用研究进展
四大混沌神猴:中国古代神话中的神秘存在
掌握这四种方法,轻松搞定五年级小数乘法
西城法院发布邻里纠纷典型案例,明确相邻关系权利边界
小米汽车热销带动股价上扬,海泰科两日涨44%
广东创新红树林保护模式,实现生态修复与养殖双赢
红掌养殖要点:土壤、温度、光照、肥水四大要素详解
法拉第笼:迈克尔·法拉第的神奇发明
冬季驾车防雷击,法拉第笼效应护航
2023消费市场年报:实体经济复苏,七成企业营收增长,产品力成关键
从流程优化到绩效考核:企业后勤提效全攻略
朝阳医院常营院区后勤保障部部署2025年工作,将重点提升服务质量
2024年中国人民公安大学研究生分数线详解及备考指南
五种食材缓解夏日上火,医生推荐清热解毒方案
湿热体质怎么办?7种食材+2款汤水改善方案
A2模具钢:冷作模具界的“硬核”选手
辛选指定茅台鉴定机构称:已检出72瓶“不符合正品特征”
“料”你想不到的多义性
中山陵:融合中西建筑艺术的国父纪念陵寝
郭晓婷新剧《破密》今晚CCTV-8开播
郭晓婷与刘诗诗:一段跨越十多年的神仙友谊
平衡三方利益,破解拼车迟到难题
变色龙变色技能揭秘:自然界中的超级特工
变色龙的生存智慧:职场人如何灵活应对各种挑战
揭秘变色龙:自然界中的伪装大师
燕窝龙眼糖水怎么熬的快
龙眼燕窝食谱:营养搭配与制作技巧详解
药物治疗配合饮食调理,有效缓解冬季咽喉肿痛