用XGBoost做时间序列预测

您所在的位置:网站首页 income用法 用XGBoost做时间序列预测

用XGBoost做时间序列预测

#用XGBoost做时间序列预测| 来源: 网络整理| 查看: 265

文章来源:https://zhuanlan.zhihu.com/p/24236567

注:复制的文档中,图片没能复制过来,如需了解详情,请看原文。

作为forecast包与xgboost包的重度依赖者,最近看到整合两家之长的forecastxgb包甚是兴奋,便忍不住翻译forecastxgb包的一些时间序列预测例子与大家交流。

一.安装

目前forecastxgb包还在不断完善中,有兴趣的朋友可以通过以下语句下载试用:

devtools::install_github("ellisp/forecastxgb-r-package/pkg") 二.Forecastxgb包核心函数简介

(一). 核心函数xgbar():

forecastxgb使用xgboost算法(简称xgb),基于自回归(autoregression,简称ar)的思路,通过核心函数xgbar(),以因变量Y的滞后项(Yt-1,…Yt-n)以及自变量X及其滞后项(Xt-1…Xt-n)来预测Y值:

xgbar(y, xreg = NULL, maxlag = max(8, 2 * frequency(y)), nrounds = 100, nrounds_method = c("cv", "v", "manual"), nfold = ifelse(length(y) > 30,10,5), lambda = 1, verbose = FALSE, seas_method = c("dummies","decompose","fourier", "none"), K = max(1, min(round(f/2 - 1), 10)), trend_method = c("none", "differencing"), ...) 参数解释: y: 因变量(数据格式必须是单变量时间序列)。 xreg:如果出现多个自变量预测因变量时,使用该参数;另外自变量与因变量两者的行数必须一致。 maxlag:因变量y和自变量x(若有的话)的最大滞后项数目。 nrounds:指xgboost()的最大迭代次数。nrounds_method:指决定xgboost最大迭代次数的方法:当nrounds_method = 'cv',nrounds的值将传送到xgboost()作为交叉检验的次数;当nrounds_method = 'v',xgboost()会把数据拆分成比例为8:2训练集和测试集进行检验;当nrounds_method = 'manual',xgboost()将采用nrounds的值对全部数据进行迭代。nfold:当nrounds_method = 'cv'时,nfold决定采用多少折检验。 lambda:用于 y的转换系数 (与Box-Cox转换类似,但lambda可以包含负值),会在使用xgboost()前进行转换(之后会使用逆转换回到原始值)。默认lambda = 1 ,此时y值不会被转换; 转换只会用于y值,而不作用于x。verbose:默认Verbose = FALSE,此时仅显示最终迭代次数,当Verbose = TRUE, 显示每次迭代的误差。seas_method:处理y值季节性特征的方法,包括"dummies", "decompose", "fourier"以及"none":当seas_method = "dummies"(默认)或者 "fourier"时,会产生季节性标识的预测变量,:当seas_method = "decompose",对y进行季节性分解后,再用xgboost()进行预测;当seas_method = "none", 不对y季节性特征做处理。K:当nrounds_method = "fourier",K值将用于决定傅里叶级数。trend_method:处理y季节性特征的方法:默认trend_method = "none";当trend_method = "differencing", 采用类似于arma型的差分方法,通过KPSS检验决定差分阶数,以保证剩余序列平稳。剩余参数设置:当nrounds_method = "cv" 或 "manual"时,xgboost()的参数可以在此使用, xgboost()详细参数参见xgboost包。

(二). 不同Y的季节性特征处理方法出现不同情况:

除了有滞后项外,预测变量集会因参数sea_method的设定而出现不同情况:

当seas_method = ‘none’时,不对Y做季节性特征处理,因此不出现Y的季节性特征变量;当seas_method = ‘decompose’时,会对Y进行季节性分解,并用处理后获得的Y'值作为因变量,因此也不会出现Y的季节性特征变量。

但当seas_method = ‘dummies’ 或者 ‘fourier’时,会通过构造出表达Y的季节性特征的预测变量来参与到xgboost()的计算中,因此在预测变量集中除了滞后项外,还有额外的代表季节性特征的预测变量(如下图的紫色与橙色变量)。

以forecastxgb包自带的单变量时间序列数据集woolyrng为例,在seas_method的不同设定下,参与到xgboost()中的自变量与因变量将以以下方式呈现:

;lt;img src=;https://pic2.zhimg.com/v2-ddedf4c848b91753576284ad05fc25f1_b.png; data-rawwidth=;886; data-rawheight=;382; class=;origin_image zh-lightbox-thumb; width=;886; data-original=;https://pic2.zhimg.com/v2-ddedf4c848b91753576284ad05fc25f1_r.png;;gt; 三.例子

(一). 单变量时间序列

以1956年~1995年间澳洲的月度燃气产量数据集作为例:

library(forecastxgb) model


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3