NeuralForecast 地图
NeuralForecast 库的模块
neuralforecast库提供了一整套最先进的深度学习模型,旨在增强时间序列预测管道的能力。
该库采用模块化的方法构建,不同的职责在特定模块中被隔离。这些模块包括用户界面功能(core)、数据处理和加载(tsdataset)、缩放器、损失函数以及模型的基类。
本教程旨在解释库的结构,并描述不同模块之间的相互作用。
一. 地图
下图展示了 neuralforecast 库的模块及其关系。

II. 模块
1. 核心 (core.py)
core 模块作为 neuralforecast 库的主要交互点,里面包含 NeuralForecast 类,该类结合了一系列关键的用户接口功能,旨在简化模型的训练和预测过程。功能包括 fit、predict、cross_validation 和 predict_insample,每个功能都构建得直观易用。NeuralForecast 类的设计旨在使用户能够简化他们的预测管道,并舒适地训练和评估模型。
2. 数据集和加载器 (tsdataset.py)
位于 tsdataset 模块中的 TimeSeriesDataset 类负责输入时间序列数据集的存储和预处理。一旦 TimeSeriesDataset 类准备好数据,就会被 TimeSeriesLoader 类使用,该类在训练和推断阶段对时间序列进行批次(或子集)采样。
3. 基础模型 (common)
common 模块包含三个 BaseModel 类,这些类作为库中所有模型结构的基础。这些基础类允许在模型设计中实现一定程度的抽象和代码复用。目前我们支持三种类型的模型:
BaseWindows:设计用于基于窗口的模型,如NBEATS和Transformers。BaseRecurrent:设计用于递归模型,如RNN和LSTM。BaseMultivariate:适用于多变量模型,如StemGNN。
4. 模型 (models)
models 模块涵盖了库中所有可用的特定模型类。这些模型包括多种简单和复杂模型,如 RNN、NHITS、LSTM、StemGNN 和 TFT。该模块中的每个模型都扩展自 common 模块中的一个 BaseModel 类。
5. 损失 (losses)
losses 模块包含 numpy 和 pytorch 损失,用于评估和训练。该模块包含多种损失,包括 MAE、MSE、MAPE、HuberLoss 等等。
6. 缩放器 (_scalers.py)
_scalers.py 模块包含 TemporalNorm 类。该类负责时间序列数据的缩放(归一化)和反缩放(逆归一化)。此步骤至关重要,因为它确保所有输入到模型的数据具有相似的范围,从而导致更稳定和高效的训练过程。
三. 流程
user首先实例化一个模型和NeuralForecast核心类。当他们调用fit方法时,执行了以下流程:
fit方法实例化一个TimeSeriesDataset对象,以存储和预处理输入的时间序列数据集,并实例化一个TimeSeriesLoader对象以进行批次采样。fit方法调用模型的fit方法(在BaseModel类中)。- 模型的
fit方法实例化一个Pytorch-Lightning的Trainer对象,负责训练模型。 Trainer方法从TimeSeriesLoader对象中采样一个批次,并调用模型的training_step方法(在BaseModel类中)。- 模型的
training_step:- 从原始批次中采样窗口。
- 使用
scaler模块对窗口进行归一化。 - 调用模型的
forward方法。 - 使用
losses模块计算损失。 - 返回损失。
Trainer对象重复步骤4和5,直到完成max_steps的迭代。- 模型已拟合,可以用于预测未来值(使用
predict方法),或者恢复样本内预测(使用predict_insample方法)。
IV. 下一步:添加你自己的模型
恭喜!你现在知道了neuralforecast库的内部细节。
有了这些知识,你可以轻松地向库中添加新模型,只需创建一个model类,所需的仅仅是init和forward方法。
查看我们的详细指南,以了解如何添加新模型!
Give us a ⭐ on Github