NeuralForecast 地图

NeuralForecast 库的模块

neuralforecast库提供了一整套最先进的深度学习模型,旨在增强时间序列预测管道的能力。

该库采用模块化的方法构建,不同的职责在特定模块中被隔离。这些模块包括用户界面功能(core)、数据处理和加载(tsdataset)、缩放器、损失函数以及模型的基类。

本教程旨在解释库的结构,并描述不同模块之间的相互作用。

一. 地图

下图展示了 neuralforecast 库的模块及其关系。

神经预测图

II. 模块

1. 核心 (core.py)

core 模块作为 neuralforecast 库的主要交互点,里面包含 NeuralForecast 类,该类结合了一系列关键的用户接口功能,旨在简化模型的训练和预测过程。功能包括 fitpredictcross_validationpredict_insample,每个功能都构建得直观易用。NeuralForecast 类的设计旨在使用户能够简化他们的预测管道,并舒适地训练和评估模型。

2. 数据集和加载器 (tsdataset.py)

位于 tsdataset 模块中的 TimeSeriesDataset 类负责输入时间序列数据集的存储和预处理。一旦 TimeSeriesDataset 类准备好数据,就会被 TimeSeriesLoader 类使用,该类在训练和推断阶段对时间序列进行批次(或子集)采样。

3. 基础模型 (common)

common 模块包含三个 BaseModel 类,这些类作为库中所有模型结构的基础。这些基础类允许在模型设计中实现一定程度的抽象和代码复用。目前我们支持三种类型的模型:

  • BaseWindows:设计用于基于窗口的模型,如 NBEATSTransformers
  • BaseRecurrent:设计用于递归模型,如 RNNLSTM
  • BaseMultivariate:适用于多变量模型,如 StemGNN

4. 模型 (models)

models 模块涵盖了库中所有可用的特定模型类。这些模型包括多种简单和复杂模型,如 RNNNHITSLSTMStemGNNTFT。该模块中的每个模型都扩展自 common 模块中的一个 BaseModel 类。

5. 损失 (losses)

losses 模块包含 numpypytorch 损失,用于评估和训练。该模块包含多种损失,包括 MAEMSEMAPEHuberLoss 等等。

6. 缩放器 (_scalers.py)

_scalers.py 模块包含 TemporalNorm 类。该类负责时间序列数据的缩放(归一化)和反缩放(逆归一化)。此步骤至关重要,因为它确保所有输入到模型的数据具有相似的范围,从而导致更稳定和高效的训练过程。

三. 流程

user首先实例化一个模型和NeuralForecast核心类。当他们调用fit方法时,执行了以下流程:

  1. fit方法实例化一个TimeSeriesDataset对象,以存储和预处理输入的时间序列数据集,并实例化一个TimeSeriesLoader对象以进行批次采样。
  2. fit方法调用模型的fit方法(在BaseModel类中)。
  3. 模型的fit方法实例化一个Pytorch-Lightning的Trainer对象,负责训练模型。
  4. Trainer方法从TimeSeriesLoader对象中采样一个批次,并调用模型的training_step方法(在BaseModel类中)。
  5. 模型的training_step
    • 从原始批次中采样窗口。
    • 使用scaler模块对窗口进行归一化。
    • 调用模型的forward方法。
    • 使用losses模块计算损失。
    • 返回损失。
  6. Trainer对象重复步骤4和5,直到完成max_steps的迭代。
  7. 模型已拟合,可以用于预测未来值(使用predict方法),或者恢复样本内预测(使用predict_insample方法)。

IV. 下一步:添加你自己的模型

恭喜!你现在知道了neuralforecast库的内部细节。

有了这些知识,你可以轻松地向库中添加新模型,只需创建一个model类,所需的仅仅是initforward方法。

查看我们的详细指南,以了解如何添加新模型!

Give us a ⭐ on Github