%%capture
!pip install neuralforecast
快速开始
训练一个LSTM和NHITS模型
本笔记本提供了如何开始使用NeuralForecast库主要功能的示例。NeuralForecast
类允许用户轻松与NeuralForecast.models
的PyTorch模型进行交互。在此示例中,我们将使用经典的LSTM
和近期的NHITS
模型对AirPassengers数据进行预测。可用模型的完整列表可以在这里找到。
您可以使用Google Colab在GPU上运行这些实验。
1. 安装NeuralForecast
2. 加载航空乘客数据
core.NeuralForecast
类包含共享的 fit
、predict
和其他方法,这些方法以包含 ['unique_id', 'ds', 'y']
列的 pandas DataFrames 作为输入,其中 unique_id
用于标识数据集中每个单独的时间序列,ds
是日期,y
是目标变量。
在这个示例中,数据集由一组单独的序列组成,但您可以轻松地将您的模型适配到更大的长格式数据集中。
from neuralforecast.utils import AirPassengersDF
= AirPassengersDF # 定义于 neuralforecast.utils
Y_df Y_df.head()
unique_id | ds | y | |
---|---|---|---|
0 | 1.0 | 1949-01-31 | 112.0 |
1 | 1.0 | 1949-02-28 | 118.0 |
2 | 1.0 | 1949-03-31 | 132.0 |
3 | 1.0 | 1949-04-30 | 129.0 |
4 | 1.0 | 1949-05-31 | 121.0 |
数据框必须包含所有 ['unique_id', 'ds', 'y']
列。 确保 y
列不包含缺失值或非数字值。
3. 模型训练
拟合模型
使用 NeuralForecast.fit
方法,您可以将一组模型训练到您的数据集中。您可以定义预测的 horizon
(在本例中为 12),并修改模型的超参数。例如,对于 LSTM
,我们更改了编码器和解码器的默认隐藏大小。
from neuralforecast import NeuralForecast
from neuralforecast.models import LSTM, NHITS, RNN
%%capture
= 12
horizon
# 尝试不同的超参数以提高准确性。
= [LSTM(h=horizon, # 预测范围
models =500, # 训练步骤数
max_steps='standard', # 用于数据标准化的缩放器类型
scaler_type=64, # 定义LSTM隐藏状态的大小
encoder_hidden_size=64,), # 定义了MLP解码器每一层的隐藏单元数量
decoder_hidden_size=horizon, # 预测范围
NHITS(h=2 * horizon, # 输入序列的长度
input_size=100, # 训练步骤数
max_steps=[2, 1, 1]) # 每个堆栈输出的下采样因子
n_freq_downsample
]= NeuralForecast(models=models, freq='M')
nf =Y_df) nf.fit(df
深度学习模型的性能对超参数的选择非常敏感。调整正确的超参数是获得最佳预测的重要步骤。这些模型的Auto
版本,AutoLSTM
和AutoNHITS
,已经可以自动进行超参数选择。
使用拟合模型进行预测
使用 NeuralForecast.predict
方法,您可以在训练数据 Y_df
之后获得 h
预测。
= nf.predict() Y_hat_df
Predicting DataLoader 0: 100%|██████████| 1/1 [00:00<00:00, 50.58it/s]
Predicting DataLoader 0: 100%|██████████| 1/1 [00:00<00:00, 126.52it/s]
NeuralForecast.predict
方法返回一个包含每个 unique_id
、ds
和模型预测值的 DataFrame。
= Y_hat_df.reset_index()
Y_hat_df Y_hat_df.head()
unique_id | ds | LSTM | NHITS | |
---|---|---|---|---|
0 | 1.0 | 1961-01-31 | 424.380310 | 453.039185 |
1 | 1.0 | 1961-02-28 | 442.092010 | 429.609192 |
2 | 1.0 | 1961-03-31 | 448.555664 | 498.796204 |
3 | 1.0 | 1961-04-30 | 473.586609 | 509.536224 |
4 | 1.0 | 1961-05-31 | 512.466370 | 524.131592 |
4. 绘制预测结果
最后,我们将两个模型的预测结果与真实值进行绘图比较。
import pandas as pd
import matplotlib.pyplot as plt
= plt.subplots(1, 1, figsize = (20, 7))
fig, ax = pd.concat([Y_df, Y_hat_df]).set_index('ds') # 将训练数据框和预测数据框连接起来
plot_df 'y', 'LSTM', 'NHITS']].plot(ax=ax, linewidth=2)
plot_df[[
'AirPassengers Forecast', fontsize=22)
ax.set_title('Monthly Passengers', fontsize=20)
ax.set_ylabel('Timestamp [t]', fontsize=20)
ax.set_xlabel(={'size': 15})
ax.legend(prop ax.grid()
在本指南中,我们使用一个简单的 LSTM
模型。在大多数情况下,更现代的模型,如 RNN
、GRU
和 DilatedRNN
的准确性优于 LSTM
。可用模型的完整列表可在 这里 找到。
参考文献
Give us a ⭐ on Github