该库使用 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: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.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 9407a9ce5015db7e05b99933d8ad4a633521acb25fa7395c7ca89300976a7813 |
|
| MD5 | a15f1ce53ad17f32fb5fb7765cecc4ef |
|
| 布莱克2-256 | e13d53e580b5e4c6f29f36ed8bd4a76f2b0c8be871cfb0527fffacb63ff9fd25 |