用于多变量时间序列预测的python包
fireTS的Python项目详细描述
火
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。这个包提供了fit
和predict
方法,这与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)
,模型将生成如下目标和特征:
Target | Features |
---|---|
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)
,模型将生成如下目标和特征:
Target | Features |
---|---|
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文件夹提供了更真实的示例。example1和example2利用simglucose pakage模拟的数据拟合时间序列模型,进行多步预测。