使用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.hqwc.cn/news/219009.html

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

相关文章

2023年3月电子学会青少年软件编程 Python编程等级考试一级真题解析(判断题)

2023年3月Python编程等级考试一级真题解析 判断题(共10题,每题2分,共20分) 26、在Python编程中,print的功能是将print()小括号的内容输出到控制台,比如:在Python Shell中输入print(北京,你好)指令,小括号内容可以输出到控制台 答案:错 考点分析:考查python中print…

《微信小程序开发从入门到实战》学习三十一

3.4 开发参与投票页面 3.4.9 显示投票结果 在实际使用中,一个用户不能对同一个投票进行重复提交,因此需要向服务器端提交投票结果和提交用户ID。另外页面,需要完善。用户提交完投票后 ,还需要显示投票目前的结果,提交…

python 基于opencv和face_recognition的人脸识别

python 基于opencv和face_recognition的人脸识别 代码如下: 使用一个photos存放你需要识别的照片,注意一个人一张就行 然后通过下面代码注册用户,之后启动程序,就会调用摄像头进行识别了。 AddPhoto(“发哥”, “./photos/fag…

Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/4)

博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…

面向对象的三大特征

目录 封装(Encapsulation): 继承(Inheritance): 多态(Polymorphism): 封装(Encapsulation): 定义: 封装是将对象的状态…

FreeRTOS入门教程(任务通知)

文章目录 前言一、什么是任务通知二、任务通知和队列,信号量的区别三、任务通知的优点和缺点1.优点2.缺点 四、任务状态和通知值五、任务通知相关的函数发出通知取出通知 六、任务通知具体使用1.实现轻量级信号量二进制信号量计数型信号量 2.实现轻量级队列 总结 前…

Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)二

七、Shell Here String&#xff08;内嵌字符串&#xff0c;嵌入式字符串&#xff09; Here String 是《六、Shell Here Document&#xff08;内嵌文档/立即文档&#xff09;》的一个变种&#xff0c;它的用法如下&#xff1a; command <<< string command 是 Shell 命…

TikTok 将开源“云中和”边缘加速器

“从某种意义上说&#xff0c;我们正在努力破解云的骨干网&#xff0c;以造福于我们&#xff0c;”TikTok产品管理基础设施经理Vikram Siwach指出&#xff0c;他解释了该公司即将开源的“全球服务加速器”的好处&#xff0c;这是一个可编程的边缘平台&#xff0c;可将应用程序需…

单片机学习1——点亮一个LED灯

Keil软件编写程序&#xff1a; 特殊功能寄存器声明&#xff1a; #include<reg52.h>sbit LED P1^0;void main() {LED 0;while(1); } 代码说明&#xff1a; sbit 语句是特殊功能位声明。 生成HEX文件&#xff0c;这个文件是下载到单片机里的文件。Options for Target…

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

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

微机课设--汇编语言在51单片机上写一个四位十进制加法器

代码如下 KEYVAL EQU 30HKEYTM EQU 31HKEYSCAN EQU 32HDAT EQU 33HSCANLED EQU 37HS_DAT EQU 38HD_DAT EQU 39HR_DATL EQU 3AHR_DATH EQU 3BH CALFLAG EQU 3CHFLAG BIT 00HORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#01HMOV TH0,#0D8HMOV TL0,…

win10+ vs2017用cmake编译geos3.5.1

参考教程&#xff1a;使用CMake编译Geos3.5.0_cmake geos-CSDN博客 注意事项&#xff1a; 报错&#xff1a;在使用cmake编译geos-3.5.1的时候&#xff0c;会出现报错&#xff1a; CMake Error at CMakeLists.txt:330 (include): include could not find load file GenerateSou…