%%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
Y_df = AirPassengersDF # 定义于 neuralforecast.utils
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
horizon = 12
# 尝试不同的超参数以提高准确性。
models = [LSTM(h=horizon, # 预测范围
max_steps=500, # 训练步骤数
scaler_type='standard', # 用于数据标准化的缩放器类型
encoder_hidden_size=64, # 定义LSTM隐藏状态的大小
decoder_hidden_size=64,), # 定义了MLP解码器每一层的隐藏单元数量
NHITS(h=horizon, # 预测范围
input_size=2 * horizon, # 输入序列的长度
max_steps=100, # 训练步骤数
n_freq_downsample=[2, 1, 1]) # 每个堆栈输出的下采样因子
]
nf = NeuralForecast(models=models, freq='M')
nf.fit(df=Y_df)深度学习模型的性能对超参数的选择非常敏感。调整正确的超参数是获得最佳预测的重要步骤。这些模型的Auto版本,AutoLSTM和AutoNHITS,已经可以自动进行超参数选择。
使用拟合模型进行预测
使用 NeuralForecast.predict 方法,您可以在训练数据 Y_df 之后获得 h 预测。
Y_hat_df = nf.predict()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 = Y_hat_df.reset_index()
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 pltfig, ax = plt.subplots(1, 1, figsize = (20, 7))
plot_df = pd.concat([Y_df, Y_hat_df]).set_index('ds') # 将训练数据框和预测数据框连接起来
plot_df[['y', 'LSTM', 'NHITS']].plot(ax=ax, linewidth=2)
ax.set_title('AirPassengers Forecast', fontsize=22)
ax.set_ylabel('Monthly Passengers', fontsize=20)
ax.set_xlabel('Timestamp [t]', fontsize=20)
ax.legend(prop={'size': 15})
ax.grid()
在本指南中,我们使用一个简单的 LSTM 模型。在大多数情况下,更现代的模型,如 RNN、GRU 和 DilatedRNN 的准确性优于 LSTM。可用模型的完整列表可在 这里 找到。
参考文献
Give us a ⭐ on Github