利用 XGBoost 进行时间序列预测

news2024/12/25 22:25:19
推荐:使用 NSDT场景编辑器 助你快速搭建3D应用场景

XGBoost 应用程序的常见情况是分类预测(如欺诈检测)或回归预测(如房价预测)。但是,也可以扩展 XGBoost 算法以预测时间序列数据。它是如何工作的?让我们进一步探讨这一点。

时间序列预测

数据科学和机器学习中的预测是一种技术,用于根据一段时间内收集的历史数据(以定期或不定期间隔)预测未来的数值。

与每个观测值都独立于另一个观测值的常见机器学习训练数据不同,时序预测的数据必须按连续顺序排列并与每个数据点相关。例如,时间序列数据可以包括月度库存、每周天气、每日销售额等。

让我们看一下来自 Kaggle 的示例时间序列数据每日气候数据。

import pandas as pd

train = pd.read_csv('DailyDelhiClimateTrain.csv')
test = pd.read_csv('DailyDelhiClimateTest.csv')

train.head()

利用 XGBoost 进行时间序列预测

如果我们看一下上面的数据帧,每个特征都是每天记录的。日期列表示观测数据的时间,并且每个观测值都是相关的。

时间序列预测通常包含数据中的趋势、季节性和其他模式来创建预测。查看模式的一种简单方法是可视化它们。例如,我将可视化示例数据集中的平均温度数据。

train["date"] = pd.to_datetime(train["date"])
test["date"] = pd.to_datetime(test["date"])

train = train.set_index("date")
test = test.set_index("date")

train["meantemp"].plot(style="k", figsize=(10, 5), label="train")
test["meantemp"].plot(style="b", figsize=(10, 5), label="test")
plt.title("Mean Temperature Dehli Data")
plt.legend()

利用 XGBoost 进行时间序列预测

在上图中,我们很容易看到,每年都有一个共同的季节性模式。通过整合这些信息,我们可以了解数据的工作原理,并确定哪个模型可能适合我们的预测模型。

典型的预测模型包括 ARIMA、向量自回归、指数平滑和先知。但是,我们也可以利用XGBoost来提供预测。

XGBoost Forecasting

在准备使用 XGBoost 进行预测之前,我们必须先安装软件包。

pip install xgboost

安装后,我们将为模型训练准备数据。理论上,XGBoost Forecasting将实现基于单个或多个特征的回归模型来预测未来的数值。这就是为什么数据训练也必须在数值中。此外,为了将时间运动纳入我们的XGBoost模型中,我们将时间数据转换为多个数值特征。

让我们首先创建一个函数来从日期创建数字特征。

def create_time_feature(df):
    df['dayofmonth'] = df['date'].dt.day
    df['dayofweek'] = df['date'].dt.dayofweek
    df['quarter'] = df['date'].dt.quarter
    df['month'] = df['date'].dt.month
    df['year'] = df['date'].dt.year
    df['dayofyear'] = df['date'].dt.dayofyear
    df['weekofyear'] = df['date'].dt.weekofyear
    return df

接下来,我们将此函数应用于训练和测试数据。

train = create_time_feature(train)
test = create_time_feature(test)

train.head()

Leveraging XGBoost for Time-Series Forecasting

所需信息现已全部可用。接下来,我们将定义我们想要预测的内容。在此示例中,我们将预测平均温度并根据上述数据制作训练数据。

X_train = train.drop('meantemp', axis =1)
y_train = train['meantemp']

X_test = test.drop('meantemp', axis =1)
y_test = test['meantemp']

我仍然会使用其他信息(例如湿度)来表明XGBoost也可以使用多变量方法预测值。但是,在实践中,我们只纳入我们在尝试预测时知道存在的数据。

让我们通过将数据拟合到模型中来开始训练过程。对于当前示例,除了树的数量之外,我们不会进行太多的超参数优化。

import xgboost as xgb

reg = xgb.XGBRegressor(n_estimators=1000)
reg.fit(X_train, y_train, verbose = False)

在训练过程之后,让我们看看模型的特征重要性。

xgb.plot_importance(reg)

Leveraging XGBoost for Time-Series Forecasting

这三个初始特征对预测的帮助并不大,但时间特征也有助于预测。让我们尝试对测试数据进行预测并可视化它们。

test['meantemp_Prediction'] = reg.predict(X_test)

train['meantemp'].plot(style='k', figsize=(10,5), label = 'train')
test['meantemp'].plot(style='b', figsize=(10,5), label = 'test')
test['meantemp_Prediction'].plot(style='r', figsize=(10,5), label = 'prediction')
plt.title('Mean Temperature Dehli Data')
plt.legend()

利用 XGBoost 进行时间序列预测

从上图可以看出,预测可能看起来略有偏差,但仍遵循整体趋势。让我们尝试根据错误指标评估模型。

from sklearn.metrics import mean_squared_error, mean_absolute_error, mean_absolute_percentage_error

print('RMSE: ', round(mean_squared_error(y_true=test['meantemp'],y_pred=test['meantemp_Prediction']),3))
print('MAE: ', round(mean_absolute_error(y_true=test['meantemp'],y_pred=test['meantemp_Prediction']),3))
print('MAPE: ', round(mean_absolute_percentage_error(y_true=test['meantemp'],y_pred=test['meantemp_Prediction']),3))

RMSE: 11.514

前:2.655

MAPE: 0.133

结果表明,我们的预测可能有13%左右的误差,RMSE在预测中也显示出轻微的误差。可以使用超参数优化来改进模型,但我们已经了解了如何将 XGBoost 用于预测。

结论

XGBoost是一种开源算法,通常用于许多数据科学案例和Kaggle竞赛。通常用例是常见的分类案例,如欺诈检测或回归案例,如房价预测,但XGBoost也可以扩展到时间序列预测。通过使用 XGBoost 回归器,我们可以创建一个可以预测未来数值的模型。

原文链接:利用 XGBoost 进行时间序列预测 (mvrlink.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/918731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【业务功能篇73】web系统架构演变-单体-集群-垂直化-服务化-微服务化

1.服务架构的演 1.1 单体架构 单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层。 单体架构只适合在应用初期,且访问量比较下的情况下使用,优点是性价比很…

Redis五种类型

Redis 基础类型 String 应用场景 缓存功能:string 最常用的就是缓存功能,会将一些更新不频繁但是查询频繁的数据缓存起来,以此来减轻 DB 的压力。 底层实现 如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于…

【2023中国算力大会】高质量建设西部数谷,努力把宁夏打造成算力之都

2023年8月18日—19日,2023中国算力大会在宁夏银川举行,本届大会以“算领新产业潮流 力赋高质量发展”为主题,打造“主题论坛、成果展示、产业推介、先锋引领”四大核心内容,全面展示算力产业发展最新成果,为产业各方搭…

servlet介绍,tomcat容器下载启动

1.1servlet是什么&#xff1f; servlet是一种java程序类&#xff0c;这些类继承了httpservlet类。这些类没有main方法&#xff0c;有两大对象request请求&#xff0c; response响应对象。这些类需要servlet容器才可以运行。 servlet 2.5 servlet 3.0 WEB-INF/web.xml <…

Docker安装并配置Pushgateway

Linux下安装Docker请参考&#xff1a;Linux安装Docker 简介 Pushgateway是Prometheus的一个组件&#xff0c;prometheus server默认是通过Exporter主动获取数据&#xff08;默认采取pull拉取数据&#xff09;&#xff0c;Pushgateway则是通过exporter主动方式推送数据到Pushg…

BlazorServer中C#与JavaScript的相互调用

BlazorServer中C#与JavaScript的相互调用 前言&#xff1a; ​ 虽然BlazorServer中推荐使用C#在razor页面中的替代JavaScript来完成逻辑的编写&#xff0c;但当需要使用第三方的javascript文件/组件里的内容时&#xff0c;则难免要在C#中调用其方法或对象。反之当你的(用到第…

性能调优篇 二、Jvm监控及诊断工具-命令行篇

目录 一、概述1、简单命令行工具 二、jps&#xff1a;查看正在运行的Java程序&#xff08;掌握&#xff09;1、是什么&#xff1f;2、测试3、基本语法 三、jstat&#xff1a;查看jvm统计信息&#xff08;掌握&#xff09;1、是什么&#xff1f;2、基本语法3、补充 四、jinfo&am…

avue-ueditor中隐藏部分工具栏

项目中不需要那么多工具栏,只需要展示部分工具栏 <avue-ueditor v-model"content" v-bind"options" :customConfig"customConfig" :placeholder"placeholder"></avue-ueditor>//按需隐藏或者显示工具栏即可 props: {custo…

数据结构(6)

2-3查找树 2-结点&#xff1a;含有一个键(及其对应的值)和两条链&#xff0c;左链接指向2-3树中的键都小于该结点&#xff0c;右链接指向的2-3树中的键都大于该结点。 3-结点&#xff1a;含有两个键(及其对应的值)和三条链&#xff0c;左链接指向的2-3树中的键都小于该结点&a…

WPF中的数据转换-StringFormat

WPF中的数据转换-StringFormat 前言 字符串格式化。使用该功能可以通过设置Binding.StringFormat属性对文本形式的数据进行转换——例如包含日期和数字的字符串。对于至少一半的格式化任务&#xff0c;字符串格式化是一种便捷的技术。 使用 当设置Binding.StringFormat属性…

因为计算机丢失vcruntime140.dll如何修复,教你如何快速修复

前几天&#xff0c;我在使用电脑时遇到了一个棘手的问题——我的电脑上的一个程序(软件名称)突然无法运行&#xff0c;提示我缺少vcruntime140.dll文件。这让我感到非常烦恼&#xff0c;因为我并不清楚如何解决这个问题。在经过一番尝试和搜索后&#xff0c;我终于找到了解决方…

Java进阶(7)——手动实现LinkedList 内部node类的实现 增删改查的实现 toString方法 源码的初步理解

目录 引出从ArrayList到Linkedlist手动实现ArrayList从ArrayList到LinkedList 总体设计Node类Node的方法&#xff1a;根据index找node 增删改查的实现增加元素删除元素修改元素查询元素 toString方法完整代码List接口类LinkedList的实现测试类 总结 引出 1.linkedList的节点&am…

Unity之 Vector3 的详细介绍以及方法的介绍

文章目录 总的介绍小试牛刀相关的描述的参数看个小例子 总的介绍 当涉及到Unity中的Vector3类时&#xff0c;以下是一些常用的方法和操作&#xff1a; magnitude 方法&#xff1a;返回向量的长度。 float length vector.magnitude;sqrMagnitude 方法&#xff1a;返回向量的平…

Sakana AI致力于打造日本人工智能界的top公司

原创 | 文 BFT机器人 01 Sakana AI创始人 Sakana AI 是一家总部位于东京的突破性创业公司&#xff0c;由前谷歌Brain研究员David Ha和Llion Jones共同创立。David Ha拥有多年且丰富的经验&#xff0c;曾担任Stability AI Ltd的研究负责人&#xff0c;并在Google LLC的日本人工…

ClickHouse领域集大成之作:《ClickHouse入门、实战与进阶》(文末送书)

前言 ClickHouse是大数据实时分析领域的主流选择之一。ClickHouse的目标是向人们提供世界上最快的分析型数据库。在各种OLAP查询引擎评测中&#xff0c;ClickHouse的查询性能横扫各大OLAP数据库引擎&#xff0c;尤其是Ad Hoc即席查询性能&#xff0c;一直遥遥领先。因此&#…

jenkins运行pytest测试用例脚本报错:没有权限,无法写日志PermissionError:[Error 13]Permission denied

报错信息&#xff1a; PermissionError:[Error 13]Permission denied&#xff1a;‘/var/jenkins_home/workspace/deleverySystem/Delivery_System/out_files/logs/waimai_20230823.log’ 解决方法&#xff1a; 在jenkins容器内部输入 chmod -R 777 /var/jenkins_home/works…

Ivanti曝新的MobileIron零日漏洞,正在被恶意利用

美国 IT 软件公司 Ivanti 今天提醒客户&#xff0c;一个关键的 Sentry API 身份验证绕过漏洞正在被恶意利用。 Ivanti Sentry&#xff08;前身为 MobileIron Sentry&#xff09;在 MobileIron 部署中充当 Microsoft Exchange Server 等企业 ActiveSync 服务器或 Sharepoint 服…

Diffusion Models for Image Restoration and Enhancement – A Comprehensive Survey

图像恢复与增强的扩散模型综述 论文链接&#xff1a;https://arxiv.org/abs/2308.09388 项目地址&#xff1a;https://github.com/lixinustc/Awesome-diffusion-model-for-image-processing/ Abstract 图像恢复(IR)一直是低水平视觉领域不可或缺的一项具有挑战性的任务&…

[Go版]算法通关村第十三关黄金——数字数学问题之数论问题(最大公约数、素数、埃氏筛、丑数)

目录 题目&#xff1a;辗转相除法&#xff08;求最大公约数&#xff09;思路分析&#xff1a;辗转相除法&#xff08;也叫欧几里得算法&#xff09;gcd(a,b) gcd(b,a mod b)复杂度&#xff1a;时间复杂度 O ( n l o g ( m a x ) ) O(nlog(max)) O(nlog(max))、空间复杂度 O (…