Skip to main content

该库使用 nbeats-pytorch 作为基础,并通过提供类似于 scikit-learn 和 keras 的接口来简化使用 N-BEATS 进行单变量时间序列预测的任务。

项目描述

nbeats_forecast

神经节拍实现库

nbeats_forecast 是一个端到端的库,用于使用 N-BEATS 进行单变量时间序列预测(https://arxiv.org/pdf/1905.10437v3.pdf - 作为 ICLR 的会议论文发表)。该库使用 nbeats-pytorch ( https://github.com/philipperemy/n-beats ) 作为基础,并通过提供类似于 scikit-learn 和 keras 的界面来简化使用 N-BEATS 进行预测的任务。

必需:Python >=3.6

安装

$ pip install nbeats_forecast

进口

from nbeats_forecast import NBeats

输入

大小为 nx1 的 numpy 数组

输出

预测值作为大小为 mx1 的 numpy 数组

模型的强制参数:

  • 数据
  • period_to_forecast

只有强制参数的基本模型可用于获取预测值,如下所示:

将熊猫导入为 pd
from nbeats_forecast import NBeats

data  = pd.read_csv ( 'data.csv' )    
data  = data.values         #形状为 nx1 的单变量时间序列数据(numpy 数组)

模型 = NBeats (数据=数据, period_to_forecast = 12 ) 
model.fit ()
预测 = model.predict ()

可以调整模型对象的其他可选参数(如论文中所述)以获得更好的性能。如果未传递这些参数,则考虑下表中提到的默认值。

可选参数

范围 类型 默认值 描述
backcast_length 整数 3* period_to_forecast 在论文中解释
小路 细绳 '' 保存中间训练检查点的路径
checkpoint_file_name 细绳 'nbeats-training-checkpoint.th' 以 .th 格式结尾的检查点文件的名称
模式 细绳 '中央处理器' 任何 torch.device 模式
批量大小 整数 镜头(数据)/15 批量大小
thetas_dims 整数列表 [7, 8] 在论文中解释
nb_blocks_per_stack 整数 3 在论文中解释
share_weights_in_stack 布尔值 错误的 在论文中解释
train_percent 浮动(低于 1) 0.8 用于训练的数据百分比
保存检查点 布尔值 错误的 保存中间检查点文件
hidden_​​layer_units 整数 128 hissen层单位
整数列表 [1,1] 根据作为整数传入列表的论文在模型中添加堆栈。映射如下——1:GENERIC_BLOCK,2:TREND_BLOCK,3:SEASONALITY_BLOCK

方法

适合(时代,优化器,情节,详细):

此方法用于针对模型对象中传递的梯度步数训练模型。

参数 - 纪元:整数

epoch 是 100 * 梯度步骤。25 epoch 意味着 2500 个权重更新步骤。如果未通过优化器,则默认值为 25。

参数 - 优化器

通过将 model.parameters 包含为变量,可以将 torch.optim 中的优化器作为参数传递。

例子:

model.fit(epoch=5,optimiser=torch.optim.AdamW(model.parameters, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0.01, amsgrad=False))

如果未通过优化器,则使用的默认优化器是 Adam。

参数图:布尔值

默认值 - 假

如果为 True,则显示训练期间的图。

参数详细:布尔值

默认值 - 真

如果为 True,则打印训练详细信息。

预测(预测数据):

参数 - predict_data(可选):大小为 backcast_length x 1 的 numpy 数组

如果不传递predict_data,则返回的预测值将从训练期间fit()中传递的数据的最后一个值继续。

更新:

新增功能:
预测其他数据

传递 predict_data:

要从经过训练的模型中获取对其他一些数据的预测,请将 predict_data 作为形状 backcast_length x 1 的 numpy 数组传递(回溯长度的默认值为 3* preiod_to_forecast)。

例子:

您已经使用时间戳“13-12-2019 08:00:00”到“31-12-2019 08:00:00”的每小时温度数据 period_to_forecast=4 和 backcast_length=16 训练了一个温度预测模型。

现在您想使用经过训练的模型从时间戳“14-01-2020 17:00:00”预测温度。您需要将过去的数据作为 predict_data 传递,窗口等于 backcast_length(此处为 16)。在这里,您需要将值从“14-01-2020 01:00:00”传递到“14-01-2020 16:00:00”(此处为 16 个值)作为形状 backcast_length x 1 的 numpy 数组(此处为 16 x 1 )。

返回预测值。

保存存档):

训练后保存当前步骤模型。文件需要传递一个字符串。要保存的模型格式为.th

示例:model.save('model.th')

加载(文件,优化器):

参数 - 文件

以 .th 格式加载保存的模型

参数 - 优化器

通过将 model.parameters 包含为变量,可以将 torch.optim 中的优化器作为参数传递。

示例:model.load('model.th')

以下示例

  1. 此处显示了具有不同优化器和不同堆栈的模型。
  2. 预测其他数据
  3. 通过保存的文件继续训练或使用新数据重新训练(加载保存的模型并重新训练)
  4. 加载保存的模型并使用数据进行预测

示例 1

此处显示了具有不同优化器和不同堆栈的模型。

这里使用 2:TREND_BLOCK 和 3:SEASONALITY_BLOCK 堆栈。

将熊猫导入为 pd
from nbeats_forecast import NBeats
从火炬进口优化

data  = pd.read_csv ( 'data.csv' )    
data  = data.values #形状为 nx1(numpy array) 的单变量时间序列数据

模型= NBeats (数据=数据,period_to_forecast = 12 ,stack =[ 2 ,3 ] ,nb_blocks_per_stack = 3 ,thetas_dims =[ 2 ,8 ])

model.fit ( epoch = 5 , optimiser = optim.AdamW ( model.parameters, lr = 0 .001, betas =( 0 .9, 0 .999 ) , eps = 1e-08, weight_decay = 0 .01, amsgrad =错误))

预测=模型.预测()

示例 2

使用 backcast_length=12 预测其他数据。

将熊猫导入为 pd
from nbeats_forecast import NBeats
从火炬进口优化

data  = pd.read_csv ( 'new_data.csv' )    
data  = data.values #形状为 nx1(numpy array) 的单变量时间序列数据

模型= NBeats (数据=数据,period_to_forecast = 12 ,stack =[ 2 ,3 ] ,nb_blocks_per_stack = 3 ,thetas_dims =[ 2 ,8 ]) 

模型.fit ()

list1 =[ 36 .7,38.5,39.4,36.75,38,39,38,37.45,38,39,39.5,40 ] 
pred = np.asarray ( list1 )

预测= model.predict ( predict_data = pred )

示例 3

通过保存的文件继续训练或使用新数据重新训练

将熊猫导入为 pd
from nbeats_forecast import NBeats
从火炬进口优化

new_datdata  = pd.read_csv ( 'new_data.csv' )    
data  = data.values #形状为 nx1(numpy array) 的单变量时间序列数据

model = NBeats ( data = data,period_to_forecast = 12 ,stack =[ 2 ,3 ] ,nb_blocks_per_stack = 3 ,thetas_dims =[ 2 ,8 ])  
# 使用与保存的模型相同的模型定义
model.load ( 'nbeats.th' ,优化器= optim.AdamW ( model.parameters, lr = 0 .001, betas =( 0 .9, 0 .999 ) , eps = 1e-08,weight_decay = 0 .01, amsgrad = False )) 
) 
model.fit ()


预测=模型.预测()

示例 4

加载保存的模型并使用数据进行预测

from nbeats_forecast import NBeats
将 numpy 导入为 np

# 使用与保存模型相同的模型定义
model = NBeats ( period_to_forecast = 4 ,stack =[ 2 ,3 ] ,nb_blocks_per_stack = 3 ,thetas_dims =[ 2 ,8 ]) 
模型加载(文件= ' 
nbeats.th ' 

list1 =[ 36 .7,38.5,39.4,36.75,38,39,38,37.45,38,39,39.5,40 ] 
pred = np.asarray ( list1 )
预测= model.predict ( pred )

项目详情


下载文件

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

源分布

nbeats_forecast-1.3.7.ta​​r.gz (7.6 kB 查看哈希

已上传 source