使用skforecast进行时间序列预测

时间序列预测是数据科学和商业分析中基于历史数据预测未来价值的一项重要技术。它有着广泛的应用,从需求规划、销售预测到计量经济分析。由于Python的多功能性和专业库的可用性,它已经成为一种流行的预测编程语言。其中一个为时间序列预测任务量身定制的库是skforecast。

在本文中,将介绍skforecast并演示了如何使用它在时间序列数据上生成预测。skforecast库的一个有价值的特性是它能够使用没有日期时间索引的数据进行训练和预测。

数据集

我在本文中使用的数据集来自Kaggle,它通过加速度计数据提供了一个全面的窗口来了解各种体育活动。我们这里只提取了其中一个参与者的代表步行活动的加速信号。

数据集见这里:https://avoid.overfit.cn/post/de4e26b02fb74fb58c65ac2f86dce87c

超参数调优和滞后选择

第一步:将时间序列信号分为训练集、验证集和测试集。

 end_train = 2500end_val = 2750data_train = acc_x_walking[:end_train]data_val = acc_x_walking[end_train:end_val]data_test = acc_x_walking[end_val:]

Skforecast采用了类似于Sickit-Learn的结构,这是一个很多人都熟悉的框架。所以对五个模型进行超参数调优和选择滞后是一个简单的过程。

RandomForestRegressor、GradientBoostingRegressor、Ridge、LGBMRegressor和XGBRegressor都可以用于预测连续数值的回归模型。所以我们可以确定每个模型的最佳参数,使均方误差最小化。然后这些改进的参数将被整合到模型中来预测步行活动。

滞后决定了过去的滞后值(时间步长)的最大数量,这些滞后值将被用作预测未来的特征。它表示有多少过去的观测将被视为预测下一个观测的输入特征。

步长指定进入未来进行预测的步数。它表示预测范围或模型应该预测的时间步数。

 # Models to comparemodels = [RandomForestRegressor(random_state=42), GradientBoostingRegressor(random_state=42),Ridge(random_state=42),LGBMRegressor(random_state=42),XGBRegressor(random_state=42)]# Hyperparameter to search for each modelparam_grids = {'RandomForestRegressor': {'n_estimators': [10, 50, 100], 'max_depth': [5, 15, 30, 45, 60]},'GradientBoostingRegressor': {'n_estimators': [10, 50, 100], 'max_depth': [5, 15, 30, 45, 60]},'Ridge': {'alpha': [0.01, 0.1, 1]},'LGBMRegressor': {'n_estimators': [10, 50, 100], 'max_depth': [5, 15, 30, 45, 60]},'XGBRegressor': {'n_estimators': [10, 50, 100], 'max_depth': [5, 15, 30, 45, 60]}}# Lags used as predictorslags_grid = [2, 5, 7]df_results = pd.DataFrame()for i, model in enumerate(models):print(f"Grid search for regressor: {model}")print(f"-------------------------")forecaster = ForecasterAutoreg(regressor = model,lags      = 2)# Regressor hyperparametersparam_grid = param_grids[list(param_grids)[i]]results = grid_search_forecaster(forecaster         = forecaster,y                  = data_train,param_grid         = param_grid,lags_grid          = lags_grid,steps              = 250,refit              = False,metric             = 'mean_squared_error',initial_train_size = 50,fixed_train_size   = True,return_best        = False,n_jobs             = 'auto',verbose            = False,show_progress      = True)# Create a column with model nameresults['model'] = list(param_grids)[i]df_results = pd.concat([df_results, results])df_results = df_results.sort_values(by='mean_squared_error')df_results.head(10)

超参数调整过程的结果是一个DF,表示所使用的模型及其各自的均方误差和各种参数,如下所示。

通过超参数整定,得到的模型最优参数为:

GradientBoostingRegressor

  • max_depth=30
  • n_estimators=10
  • lags = 2

Ridge

  • alpha=1
  • lags = 2

RandomForestRegressor

  • max_depth=5
  • n_estimators=100
  • lags = 7

LGBMRegressor

  • max_depth=15
  • n_estimators=10
  • lags = 5

XGBRegressor

  • max_depth=5
  • n_estimators=10
  • lags = 2

预测

我们现在知道了应用于模型的最佳参数,可以开始训练了。将数据分成训练集和测试集。我们在上面分成验证机和测试集的原因是,测试集没有参与超参数调优过程的,所提它对于模型仍然是完全未知的。

 # Split train-teststep_size = 250data_train = acc_x_walking[:-step_size]data_test = acc_x_walking[-step_size:]

下一步是创建和拟合预测模型。

 # Create and fit forecaster# GradientBoostingRegressorgb_forecaster = ForecasterAutoreg(regressor = GradientBoostingRegressor(random_state=42, max_depth=30, n_estimators=10),lags      = 2)# Ridger_forecaster = ForecasterAutoreg(regressor = Ridge(random_state=42, alpha=1),lags      = 2)# RandomForestRegressorrf_forecaster = ForecasterAutoreg(regressor = RandomForestRegressor(random_state=42, max_depth=5, n_estimators=100),lags      = 7)# LGBMRegressorlgbm_forecaster = ForecasterAutoreg(regressor       = LGBMRegressor(random_state=42, max_depth=15, n_estimators=10),lags            = 5,)# XGBRegressorxgb_forecaster = ForecasterAutoreg(regressor       = XGBRegressor(random_state=42, max_depth=5, n_estimators=10),lags            = 2,)# Fitgb_forecaster.fit(y=data_train)r_forecaster.fit(y=data_train)rf_forecaster.fit(y=data_train)lgbm_forecaster.fit(y=data_train)xgb_forecaster.fit(y=data_train)# Predictgb_predictions = gb_forecaster.predict(steps=step_size)r_predictions = r_forecaster.predict(steps=step_size)rf_predictions = rf_forecaster.predict(steps=step_size)lgbm_predictions = lgbm_forecaster.predict(steps=step_size)xgb_predictions = xgb_forecaster.predict(steps=step_size)

下图展示了五种模型的预测结果很明显,除梯度增强外,所有模型都产生了平线的预测。这里的原因有很多,比如说对于其他几个模型,因为我们是介绍skforecast,所以没有设置全部的超参数,导致可能还没有拟合,这个可以再进行调整。

结论

skforecast是在Python中掌握时间序列预测的一个非常好的选择。它简单易用,是根据历史数据预测未来价值的好工具。

在本文的整个探索过程中,使用skforecast的特征来调整超参数,并为基本回归模型(如RandomForestRegressor, GradientBoostingRegressor, Ridge, LGBMRegressor和XGBRegressor)选择滞后。

skforecast的一个显著优势是用户友好的文档,它清楚地解释了模型的功能和参数。如果您正在寻找一种轻松有效的方法来探索时间序列预测,skforecast是一个非常好的选择。

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

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

相关文章

栈详解(C语言)

文章目录 写在前面1 栈的定义2 栈的初始化3 数据入栈4 数据出栈5 获取栈顶元素6 获取栈元素个数7 判断栈是否为空8 栈的销毁 写在前面 本片文章详细介绍了另外两种存储逻辑关系为 “一对一” 的数据结构——栈和队列中的栈,并使用C语言实现了数组栈。 栈C语言实现源…

Vue3中Composition API介绍

在Vue 3中,引入了Composition API,它是一种新的组合式函数API,用于更灵活地组织和重用组件逻辑。Composition API相比于Vue 2中的Options API,提供了更好的可组合性和代码复用性。下面是对Vue 3中Composition API的介绍和用法&…

【自主探索】基于 rrt_exploration 的单个机器人自主探索建图

文章目录 一、rrt_exploration 介绍1、原理2、主要思想3、拟解决的问题4、优缺点 二、安装环境三、安装与运行1、安装2、运行 四、配置说明1、Robots Network2、Robots frame names in tf3、Robots node and topic names4、Setting up the navigation stack on the robots5、A …

【数据库】执行计划中二元操作对一趟扫描算法的应用,理解代价评估的应用和优化,除了磁盘代价还有CPU计算代价不容忽略

二元操作的一趟算法 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定…

C#,《小白学程序》第十九课:随机数(Random)第六,随机生成任意长度的大数(BigInteger)

1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// 除法运算为 Truffer…

车载以太网-ICMP

文章目录 ICMP协议ICMP报文格式ICMP报文的示例ICMP协议流程ICMP协议报文示例车载以太网ICMP协议测试内容ICMP协议 车载以太网(Ethernet)是一种用于在车辆内部传输数据的网络协议。Internet控制消息协议(ICMP)是一种用于在IP网络上发送错误消息和操作消息的协议。在车载以太…

Leetcode—167.两数之和 II - 输入有序数组【中等】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—167.两数之和 II - 输入有序数组 实现代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {*returnSiz…

Java多线程-面试题+答案——第6期

当准备Java多线程面试时&#xff0c;更多的问题可能涉及到线程池、并发集合、并发工具、锁、原子操作等更深层次的概念。 Java中的CountDownLatch和CyclicBarrier的区别&#xff1a; 答案&#xff1a; CountDownLatch用于等待多个线程完成某个任务&#xff0c;计数器递减到零…

小程序中的大道理之四--单元测试

在讨论领域模型之前, 先继续说下关于测试方面的内容, 前面为了集中讨论相应主题而对此作了推迟, 下面先补上关于测试方面的. 测试覆盖(Coverage) 先回到之前的一些步骤上, 假设我们现在写好了 getPattern 方法, 而 getLineContent 还处于 TODO 状态, 如下: public String ge…

网络视频播放卡顿原因分析

一、问题描述 某项目通过拉摄像机rtsp流转rtmp/http-flv/ws-flv的方案&#xff0c;使用户可以在网页中观看摄像机的视频画面。在 观看视频时偶发出现卡顿现象。 二、卡顿现象分析和解决 此问题涉及的原因较多&#xff0c;所以得考虑各环节的问题可能性&#xff0c;并根据现场实…

Apache多后缀解析漏洞分析

漏洞介绍 该漏洞与用户的配置有密切的关系,严格来说属于用户配置问题。Apache文件解析漏洞涉及到 Apache 解析文件的特性。在默认情况下,Apache 允许一个文件具有多个以点分割的后缀,在处理文件时会从右向左识别后缀名。(就是右边的后缀名无法识别,则继续识别左边的) 如果…

C#与C++进行字段内存对齐

通过预留字段来补齐内存分配。在实际项目中采用这种方法较多&#xff0c;即保证了长度一致&#xff0c;也为以后的扩展提供了容错的可能性。 unsafe struct StructSequential{public fixed float x[8];public fixed float y[8];public fixed float z[8];public fixed float ti…

在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问

文章目录 引言第一部分&#xff1a;FastDFS介绍与安装1.1 FastDFS简介1.2 FastDFS安装1.2.1 安装Tracker Server1.2.2 安装Storage Server 1.3 FastDFS配置1.3.1 配置Tracker Server1.3.2 配置Storage Server1.3.3 启动FastDFS服务 第二部分&#xff1a;Nginx配置2.1 Nginx安装…

Redis IO多路复用之select、poll和epoll

Redis 性能好除了它是基于内存的数据库外,还因为Redis 是基于IO多路复用机制。以下总结一下曾经遇到过的一个面试题:你了解IO多路复用机制吗?实现IO多路复用机制的方式有哪些?有什么区别? 是的,我了解Redis的IO多路复用机制。Redis使用IO多路复用来实现高效的异步非阻塞I…

Docker容器化部署若依微服务ruoyi-cloud项目

系统环境 接下来的内容以 Ubuntu 22.04.1 操作系统为例。 下载安装Docker Ubuntu hihi-IdeaCentre-GeekPro-15ICK:~$ sudo su [sudo] hi 的密码&#xff1a; roothi-IdeaCentre-GeekPro-15ICK:/home/hi# docker ps 找不到命令 “docker”&#xff0c;但可以通过以下软件包安…

Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线(实例分析)

Visual Studio 使用MFC 单文档工程从创建到实现绘制单一颜色直线和绘制渐变颜色的直线 本文主要从零开始创建一个MFC单文档工程然后逐步实现添加按键&#xff08;事件响应函数&#xff09;&#xff0c;最后实现单一颜色直线的绘制与渐变色直线的绘制o(&#xffe3;▽&#xffe…

【云原生】什么是 Kubernetes ?

什么是 Kubernetes &#xff1f; Kubernetes 是一个开源容器编排平台&#xff0c;管理着一系列的 主机 或者 服务器&#xff0c;它们被称作是 节点&#xff08;Node&#xff09;。 每一个节点运行了若干个相互独立的 Pod。 Pod 是 Kubernetes 中可以部署的 最小执行单元&#x…

之前运行的好好的pycharm文件运行不了

C:\Users\LENOVO\venv\Scripts\python.exe “D:\pyCharm\PyCharm 2018.3.2\helpers\pydev\pydevconsole.py” --modeclient --port55573 Traceback (most recent call last): File “D:\pyCharm\PyCharm 2018.3.2\helpers\pydev\pydevconsole.py”, line 33, in from _pydev_b…

2、Burp使用

文章目录 一、为Firefox浏览器安装数字证书二、利用Intruder模块进行暴力破解 一、为Firefox浏览器安装数字证书 &#xff08;1&#xff09;利用Firefox浏览器访问http://burp或127.0.0.1:<监听端口>&#xff0c;点击页面右上侧的“CA Certificate”处下载CA证书&#xf…

机器学习---贝叶斯网络与朴素贝叶斯

1. 贝叶斯法则 如何判定一个人是好人还是坏人&#xff1f; 当你无法准确的熟悉一个事物的本质时&#xff0c;你可以依靠与事物特定本质相关的事件出现的次数来判断 其本质属性的概率。如果你看到一个人总是做一些好事&#xff0c;那这个人就越可能是一个好人。 数学语言表达…