用于多变量时间序列预测的python包

fireTS的Python项目详细描述


Documentation Status

fireTS是一个用于多变量时间序列预测的sklean风格的包。下面是一个简单的代码片段,展示了fireTS包提供的出色功能。

fromfireTS.modelsimportNARX,DirectAutoRegressorfromsklearn.ensembleimportRandomForestRegressorfromxgboostimportXGBRegressorimportnumpyasnp# Random training datax=np.random.randn(100,2)y=np.random.randn(100)# Build a non-linear autoregression model with exogenous inputs# using Random Forest regression as the base modelmdl1=NARX(RandomForestRegressor(n_estimators=10),auto_order=2,exog_order=[2,2],exog_delay=[1,1])mdl1.fit(x,y)ypred1=mdl1.predict(x,y,step=3)# Build a general autoregression model and make multi-step prediction directly# using XGBRegressor as the base modelmdl2=DirectAutoRegressor(XGBRegressor(n_estimators=10),auto_order=2,exog_order=[2,2],exog_delay=[1,1],pred_step=3)mdl2.fit(x,y)ypred2=mdl2.predict(x,y)
  • sklearn样式的api。这个包提供了fitpredict方法,这与sklearn包非常相似。
  • 即插即用。您可以插入sklearn包中提供的任何机器学习回归算法,并构建时间序列预测模型。
  • 通过指定自回归顺序auto_order、外部输入顺序exog_order、外部输入延迟exog_delay,为您创建滞后特性。
  • 支持多步预测。该软件包可以采用递归和直接两种不同的方法进行多步预测。NARX模型是建立一个一步预测模型,该模型将递归地用于多步预测(需要未来的外部输入信息)。DirectAutoRegressor通过在构造函数中指定预测步骤,直接进行多步预测(不需要将来的外部输入信息)。
  • 支持网格搜索来优化基本模型的超参数(目前无法对时间序列模型的顺序和延迟进行网格搜索)。

我在写this paper时开发了这个包。生成滞后特征和利用sklearn提供的各种回归算法来构建非线性多变量时间序列模型是非常方便的。该api还可用于建立深层神经网络模型进行时间序列预测。The paper使用这个包来构建lstm模型并进行多步预测。

文档可以找到here。文档提供了每个模型的数学方程。强烈建议在使用模型之前阅读文档。

具有外生(narx)模型的非线性自回归

fireTS.models.NARX模型正在尝试训练一个提前一步的预测模型 并在给定未来外生投入的情况下,递归地进行多步预测。

给定输出时间序列来预测y(t)和外部输入X(t),模型将生成如下目标和特征:

TargetFeatures
y(t + 1)y(t), y(t - 1), ..., y(t - p + 1), X(t - d), X(t - d - 1), ..., X(t - d - q + 1)

其中p是自组装顺序auto_order,q是外部输入顺序exog_order,d是外部延迟exog_delay

narx模型可以在给定未来外生投入的情况下进行任何超前预测。要进行多步预测,请在predict方法中设置step

直接自回归器

fireTS.models.DirectAutoRegressor模型正在尝试训练 直接建立多步水头预测模型。未来的外生投入没有 需要进行多步预测。

给定输出时间序列来预测y(t)和外部输入X(t),模型将生成如下目标和特征:

TargetFeatures
y(t + k)y(t), y(t - 1), ..., y(t - p + 1), X(t - d), X(t - d - 1), ..., X(t - d - q + 1)

其中p是自组装顺序auto_order,q是外源输入顺序exog_order,d是外源延迟exog_delay,k是预测步骤pred_step

直接自回归不需要未来的外部输入信息来进行多步预测。其predict方法无法指定预测步骤。

安装

注意:仅支持python3。

强烈建议使用pip来安装fireTS,请遵循以下操作 link安装pip。

安装PIP后,

pip install fireTS

要获得最新的开发版本,

git clone https://github.com/jxx123/fireTS.git
cd fireTS
pip install -e .

快速启动

  • 使用RandomForestRegressor作为基本模型来构建NARX模型
fromfireTS.modelsimportNARXfromsklearn.ensembleimportRandomForestRegressorimportnumpyasnpx=np.random.randn(100,1)y=np.random.randn(100)mdl=NARX(RandomForestRegressor(),auto_order=2,exog_order=[2],exog_delay=[1])mdl.fit(x,y)ypred=mdl.predict(x,y,step=3)
  • 使用RandomForestRegressor作为基本模型来构建DirectAutoRegressor模型
fromfireTS.modelsimportDirectAutoRegressorfromsklearn.ensembleimportRandomForestRegressorimportnumpyasnpx=np.random.randn(100,1)y=np.random.randn(100)mdl=DirectAutoRegressor(RandomForestRegressor(),auto_order=2,exog_order=[2],exog_delay=[1],pred_step=3)mdl.fit(x,y)ypred=mdl.predict(x,y)
  • 使用网格搜索
fromfireTS.modelsimportNARXfromsklearn.ensembleimportRandomForestRegressorimportnumpyasnpx=np.random.randn(100,1)y=np.random.randn(100)# DirectAutoRegressor can do grid search as wellmdl=NARX(RandomForestRegressor(),auto_order=2,exog_order=[2],exog_delay=[1])# Grid searchpara_grid={'n_estimators':[10,30,100]}mdl.grid_search(x,y,para_grid,verbose=2)# Best hyper-parameters are set after grid search, print the model to see the differenceprint(mdl)# Fit the model and make the predictionmdl.fit(x,y)ypred=mdl.predict(x,y,step=3)

examples文件夹提供了更真实的示例。example1example2利用simglucose pakage模拟的数据拟合时间序列模型,进行多步预测。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
返回数组无效的java方法   异步Java CompletableFuture获取其请求   java是否可以像RDBMS那样使用视图?   java如何在屏幕上只运行一个片段?   java无法从Vertex jdbc查询中获取结果   java从jtable获取对象的正确方法   java Spring 3数据设备替代方案   Java BigDecimal:四舍五入到客户首选的数字和增量   JAVA主窗口没有出现,我必须左键单击主窗口。java并单击run查看它   Eclipse RCP中的java进程自定义设备事件   JavaEclipse一次又一次地构建代码(没有任何更改)?   java如何实现对象合并