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