使用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_}')
热门推荐
四柱八字:千年的文化传承与现代应用
四柱八字排盘:传统文化还是科学预测?
重庆渝中区,凭什么成为非标商业“天生秀场”?
程式新手必看!盘点7种常见语法错误与3大解决方法,让你快速提升正确率!
边际效用递减:消费与生产的经济决策法则
剑桥论坛聚焦佛教医学:60位学者跨学科探讨东西方医疗智慧
天妃宫遗址:天津城市原生点的重要历史见证
文旅部发布12条冰雪旅游线路,推动区域协同四季运营
解密股市波动:五大因素如何影响股票价格
麻雀为何是花鸟画中的常客?解读其多重文化寓意
兰花的生存智慧:用"粪臭"吸引甲虫授粉
板栗减肥真的靠谱吗?一文揭秘板栗的减肥奥秘
减脂期吃板栗:科学食用指南
平衡工作与健康:职场孕妇全方位健康管理指南
专家“籽多多”:备孕到孕期的全面科学指导
黄姓宝宝取名,学《长安十二时辰》
2024龙年黄姓宝宝取名攻略:结合文化寓意与五行八字
2025除夕夜家庭活动全攻略:传统与创意结合,打造暖心年夜饭
年夜饭:从分餐到合食,团圆文化历久弥新
饺子VS年糕,春晚VS围炉:南北方除夕夜习俗对比
蛋白粉最佳饮用时间:三个黄金时段效果翻倍
把握运动后黄金30分钟,蛋白质补充正当时
力量与耐力不同:运动后蛋白粉的科学摄入指南
冬季暖心面食推荐:羊肉烩面制作工艺详解
跑步机心率区间设定:个性化训练指南
错走车道怎么办?高速和城市道路应对全攻略
从荞麦面到智能定制:中式面点营养升级新趋势
酥脆板面VS筋道手擀面:谁是你的面食之王?
北京抻面筋道,广州烧卖皮薄:南北面食的工艺传承
魔兽世界:10H奥杜尔还没通?10个BOSS小技巧,新手也能2小时速推