跳转到主要内容

Pytorch的ESRNN实现

项目描述

Build PyPI version fury.io Downloads Python 3.6+ License: MIT

Pytorch的ES-RNN实现

Pytorch实现了Smyl提出的ES-RNN算法,是M4预测竞赛的获胜提交。该类封装了fit和predict方法,以方便与机器学习管道交互,以及评估和数据整理实用工具。由卡内基梅隆大学的Autonlab成员开发。

安装需求

  • numpy>=1.16.1
  • pandas>=0.25.2
  • pytorch>=1.3.1

安装

此代码是一个正在进行中的工作,GitHub上的任何贡献或问题都欢迎:https://github.com/kdgutier/esrnn_torch

您可以使用以下命令从Python包索引安装已发布版本ESRNN

pip install ESRNN

用法

输入数据

fit方法接收训练pandas数据框X_dfy_df,格式为长格式。可选地,使用X_test_dfy_test_df来计算样本外性能。

  • X_df必须包含列['unique_id', 'ds', 'x']
  • y_df 必须包含以下列 ['unique_id', 'ds', 'y']
  • X_test_df 必须包含以下列 ['unique_id', 'ds', 'x']
  • y_test_df 必须包含以下列 ['unique_id', 'ds', 'y'] 以及一个用于比较的基准模型(默认 'y_hat_naive2')。

对于以上所有内容

  • 'unique_id' 是时间序列标识符,列 'ds' 表示日期时间。
  • 'x' 是外生分类特征。
  • 'y' 是目标变量。
  • 'y' 不允许负值,且所有时间序列的第一个条目必须 大于 0

数据框 Xy 必须包含相同的 'unique_id''ds' 列的值,并且必须是 平衡的,即日期之间没有 间隔

X_df y_df X_test_df y_test_df

M4 示例

from ESRNN.m4_data import prepare_m4_data
from ESRNN.utils_evaluation import evaluate_prediction_owa

from ESRNN import ESRNN

X_train_df, y_train_df, X_test_df, y_test_df = prepare_m4_data(dataset_name='Yearly',
                                                               directory = './data',
                                                               num_obs=1000)

# Instantiate model
model = ESRNN(max_epochs=25, freq_of_test=5, batch_size=4, learning_rate=1e-4,
              per_series_lr_multip=0.8, lr_scheduler_step_size=10,
              lr_decay=0.1, gradient_clipping_threshold=50,
              rnn_weight_decay=0.0, level_variability_penalty=100,
              testing_percentile=50, training_percentile=50,
              ensemble=False, max_periods=25, seasonality=[],
              input_size=4, output_size=6,
              cell_type='LSTM', state_hsize=40,
              dilations=[[1], [6]], add_nl_layer=False,
              random_seed=1, device='cpu')

# Fit model
# If y_test_df is provided the model
# will evaluate predictions on
# this set every freq_test epochs
model.fit(X_train_df, y_train_df, X_test_df, y_test_df)

# Predict on test set
y_hat_df = model.predict(X_test_df)

# Evaluate predictions
final_owa, final_mase, final_smape = evaluate_prediction_owa(y_hat_df, y_train_df,
                                                             X_test_df, y_test_df,
                                                             naive2_seasonality=1)

总体加权平均

用于量化特定模型在各个时间序列上总体误差的指标是 M4 竞赛提出的总体加权平均(OWA)。该指标通过获取模型所有时间序列的对称平均绝对百分比误差(sMAPE)和平均绝对缩放误差(MASE)的平均值来计算,同时也会计算 Naive2 预测的平均值。sMAPE 和 MASE 都是规模无关的。这些测量值计算如下:

OWA

当前结果

在这里,我们直接使用模型与原始实现进行比较。值得注意的是,这些结果不包括在 ESRNN 论文 中提到的集成方法。
M4 竞赛结果.

数据集 我们的 OWA M4 OWA (Smyl)
年度 0.785 0.778
季度 0.879 0.847
月度 0.872 0.836
小时 0.615 0.920
0.952 0.920
0.968 0.920

复制 M4 结果

复制 M4 结果就像运行以下代码行(针对每个频率)一样简单(在通过 pip 安装包后执行)

python -m ESRNN.m4_run --dataset 'Yearly' --results_directory '/some/path' \
                       --gpu_id 0 --use_cpu 0

使用 --help 获取每个参数的描述

python -m ESRNN.m4_run --help

作者

这个存储库是由卡内基梅隆大学的 AutonLab 研究人员和 Orax 数据科学家共同开发的。

许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。

参考文献

  1. 时间序列预测的指数平滑与循环神经网络混合方法
  2. M4 竞赛:结果、发现、结论及未来方向
  3. M4 竞赛数据
  4. 扩张循环神经网络
  5. 残差 LSTM:设计用于远程语音识别的深度循环架构
  6. 基于双阶段注意力的循环神经网络用于时间序列预测

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源代码分发

ESRNN-0.1.3.tar.gz (694.7 kB 查看哈希)

上传时间 源代码

构建分发

ESRNN-0.1.3-py3-none-any.whl (42.6 kB 查看散列值)

上传时间 Python 3

支持者