训练时序预测模型 (GeoAI)

摘要

将使用来自时空立方体的时间序列数据来训练基于深度学习的时间序列预测模型。 借助使用时序模型进行预测工具,可以使用经过训练的模型来预测时空立方体每个位置的值。

时间序列数据可以遵循各种趋势并具有多个级别的季节性。 基于统计方法的传统时间序列预测模型表现将有所不同,具体取决于数据中的趋势和季节性模式。 如果存在足够多的训练数据,则基于深度学习的模型将具有较高的学习能力,并且可以跨不同类型的时间序列来提供结果。

该工具将使用各种基于深度学习的模型(例如全连接网络 (FCN)、长短期记忆 (LSTM)、InceptionTime、ResNet 和 ResCNN)来训练时间序列预测模型。 这些模型支持多变量时间序列,其中模型将从多个时间因变量中学习以预测未来值。 经过训练的模型将另存为深度学习包文件 (.dlpk),借助使用时序模型进行预测工具,可用于预测未来值。

了解有关“时间序列预测模型”工作原理的详细信息

使用情况

  • 您必须在 ArcGIS AllSource 中为 Python 安装适当的深度学习框架。

    了解如何安装 ArcGIS 的深度学习框架

  • 此工具接受通过聚合点创建时空立方体通过已定义位置创建时空立方体以及通过多维栅格图层创建时空立方体子集化时空立方体工具创建的 netCDF 数据

  • 时间序列预测工具集中的其他预测工具相比,该工具将使用基于深度学习的时间序列预测模型。 深度学习模型具有很高的学习能力,适用于遵循复杂趋势并且难以使用简单的数学函数进行建模的时间序列。 然而,它们需要更大量的训练数据来学习此类复杂趋势,并使用更多的计算资源进行训练和推断。 建议使用 GPU 来运行此工具。

  • 要使用 GPU 运行此工具,请将处理器类型环境设置为 GPU。 如果您具有多个 GPU,还可以指定 GPU ID 环境。

  • 该工具可用于建模单变量和多变量时间序列。 如果时空立方体还具有其他变量,这些变量与进行预测的变量相关,则可以将其作为解释变量包含在内,以改进预测。

  • 单变量时间序列预测仅使用一步法进行估计,这也是默认方法。

  • 多元时间序列预测可以使用两种不同的方法:一步预测和多步预测。 当选择多个解释训练变量时,多步参数将变为活动状态。

  • 在一步法中,模型可以在每个时间步用新数据进行更新,使其适合实时应用。 然而,由于模型在每个时间步都会更新,预测误差会随着时间的推移而累积,导致长期预测不太准确。 使用多步预测时,模型会预测当前时间步之外的多个未来数据点。 例如,如果目标是预测接下来的 20 个时间步长,则模型将立即生成 20 个连续的预测。 多步预测使模型能够考虑更广泛的时间序列视图,更有效地捕捉长期趋势和模式。 由于该模型提前预测多个时间步长,因此减少了误差累积的可能性,从而实现更准确的长期预测。 然而,由于模型一次预测多个步骤,它可能无法灵活地适应数据的实时变化。 这两种方法的选择取决于时间序列预测任务的具体要求和特征。

  • 序列长度参数影响时间序列预测模型的结果,可以定义为用作预测下一个时间步骤的输入的过去时间步骤的数量。 如果序列长度为 n,模型将以最后 n 个时间步作为输入来预测下一个时间步。 该参数值不能大于排除验证时间步长后剩余的输入时间步长总数。

  • 此工具将使用来自每个位置的训练数据来训练单个全局预测模型,而非在时空立方体的每个位置位构建独立预测模型。 借助使用时序模型进行预测工具,该全局模型将用于预测每个位置的未来值。

  • 输出要素参数值将添加到基于最终预测时间步进行渲染的内容窗格中。

  • 该工具的示例用例包括训练模型以根据历史销售数据预测零售产品的需求,训练模型以预测疾病的传播,或训练模型以根据历史生产和天气数据预测风力发电。

  • 确定针对验证排除的时间步长数量非常重要。 排除的时间步长越多,则将用于评估验证 RMSE 的时间步长越少。 如果排除的时间步长过少,则将使用少量数据来评估验证 RMSE,并且可能会产生误导。 请排除尽可能多的时间步长,同时保持足够的时间步长来估计验证 RMSE。 如果时空立方体具有足够的时间步长来支持此操作,请至少保留与预测时间步长相同数量的验证时间步长。

  • 有关运行此工具的要求以及您可能遇到的问题的信息,请参阅深度学习常见问题解答

参数

标注说明数据类型
输入时间序列数据

netCDF 立方体包含将用于预测未来时间步长的变量。 此文件必须具有 .nc 文件扩展名,并且必须使用通过聚合点创建时空立方体通过已定义位置创建时空立方体通过多维栅格图层创建时空立方体工具进行创建。

File
输出模型

将存储经训练模型的输出文件夹位置。 将另存为深度学习包文件 (.dlpk) 的训练模型。

Folder
分析变量

数据集中的数值变量,用于预测未来时间步长。

String
序列长度

对模型进行训练时将要使用的先前时间步长数。 如果数据包含季节性(重复周期),请提供对应于一个季节的长度。

  • 如果未选中多步参数,则该参数的值应小于或等于排除要排除验证的时间步长数参数值后剩余的输入时间步总数。
  • 如果选中多步参数,则排除要排除验证的时间步长数参数值后,序列长度值的 1.5 倍应小于或等于总时间步数。

Long
解释训练变量
(可选)

来自将用于训练模型的数据的自变量。 对于任何表示类或类别的变量,请选中分类复选框。

Value Table
最大轮数
(可选)

将用于训练模型的最大轮数。 默认值为 20。

Long
要排除验证的时间步长数
(可选)

将排除验证的时间步长数。 例如,如果指定值 14,则数据框中的最后 14 行将用作验证数据。 默认值为总时间步长的 10%。 理想情况下,它不应小于输入时间立方体中总时间步长的 5%。

  • 如果未选中多步参数,则该参数值应小于输入时空立方体中记录总数的 25%。
  • 如果选中多步参数,则该参数值应小于或等于序列长度参数值的一半。

Long
模型类型
(可选)

指定将用于训练模型的模型架构。

  • InceptionTime将用于训练模型的 InceptionTime 架构。 这是默认设置。
  • ResNet将用于训练模型的 ResNet 架构。
  • ResCNN将用于训练模型的 ResCNN 架构。
  • FCN将用于训练模型的 FCN 架构。
  • LSTM将用于训练模型的 LSTM 架构。
  • TimeSeriesTransformer将用于训练模型的 TimeSeriesTransformer 架构。
String
批处理大小
(可选)

一次需要处理的样本数。 默认值为 64。

根据计算机的 GPU,可将此数值更改为 8、16、32、64 等。

Long
模型参数
(可选)

将特定于每个模型使用的其他模型参数。 这些参数可用于调整模型的复杂度和大小。 请参阅时间序列预测模型的工作原理以了解模型架构、受支持的模型参数及其默认值。

Value Table
当模型不再改进时,停止训练
(可选)

指定当验证损失在连续 5 轮后未改善时,模型训练是否将停止。

  • 选中 - 当验证损失在连续 5 轮后未改善时,模型训练将停止。 这是默认设置。
  • 未选中 - 模型训练将一直持续,直至达到最大轮数为止。

Boolean
输出要素类
(可选)

时空立方体中所有位置的输出要素类,其中的预测值将存储为字段。 将使用验证数据集上经过训练的模型的预测来创建要素类。 输出将显示对最后的时间步长的预测,并包含弹出图表,其中显示了验证集上的时间序列预测。

Feature Class
输出立方体
(可选)

输出时空立方体(.nc 文件),包含输入时空立方体的值,并替换相应验证时间步长的预测值。

File
多步
(可选)

指定是否使用一步或多步方法来训练多元时间序列预测模型。

  • 选中 - 模型训练将使用多步骤方法。
  • 未选中 - 模型训练将使用传统的一步法。 这是默认设置。

Boolean

派生输出

标注说明数据类型
输出模型文件

将在输出模型文件夹中另存为深度学习包文件 (.dlpk) 的训练模型。

File

arcpy.geoai.TrainTimeSeriesForecastingModel(in_cube, out_model, analysis_variable, sequence_length, {explanatory_variables}, {max_epochs}, {validation_timesteps}, {model_type}, {batch_size}, {arguments}, {early_stopping}, {out_features}, {out_cube}, {multistep})
名称说明数据类型
in_cube

netCDF 立方体包含将用于预测未来时间步长的变量。 此文件必须具有 .nc 文件扩展名,并且必须使用通过聚合点创建时空立方体通过已定义位置创建时空立方体通过多维栅格图层创建时空立方体工具进行创建。

File
out_model

将存储经训练模型的输出文件夹位置。 将另存为深度学习包文件 (.dlpk) 的训练模型。

Folder
analysis_variable

数据集中的数值变量,用于预测未来时间步长。

String
sequence_length

对模型进行训练时将要使用的先前时间步长数。 如果数据包含季节性(重复周期),请提供对应于一个季节的长度。

  • 如果 multistep 参数值为 False,则该参数的值应小于或等于排除 validation_timesteps 参数值后剩余的输入时间步总数。
  • 如果 multistep 参数值为 True,则 sequence_length 的值的 1.5 倍应小于或等于排除 validation_timesteps 参数值后的总时间步数。

Long
explanatory_variables
[explanatory_variables,...]
(可选)

来自将用于训练模型的数据的自变量。 在表示类或类别的任何变量之后,请使用 True 值。

Value Table
max_epochs
(可选)

将用于训练模型的最大轮数。 默认值为 20。

Long
validation_timesteps
(可选)

将排除验证的时间步长数。 例如,如果指定值 14,则数据框中的最后 14 行将用作验证数据。 默认值为总时间步长的 10%。 理想情况下,它不应小于输入时间立方体中总时间步长的 5%。

  • 如果 multistep 参数值为 False,则该参数值应小于输入时空立方体中记录总数的 25%。
  • 如果 multistep 参数值为 True,则该参数值应小于或等于 sequence_length 参数值的一半。

Long
model_type
(可选)

指定将用于训练模型的模型架构。

  • InceptionTime将用于训练模型的 InceptionTime 架构。 这是默认设置。
  • ResNet将用于训练模型的 ResNet 架构。
  • ResCNN将用于训练模型的 ResCNN 架构。
  • FCN将用于训练模型的 FCN 架构。
  • LSTM将用于训练模型的 LSTM 架构。
  • TimeSeriesTransformer将用于训练模型的 TimeSeriesTransformer 架构。
String
batch_size
(可选)

一次需要处理的样本数。 默认值为 64。

根据计算机的 GPU,可将此数值更改为 8、16、32、64 等。

Long
arguments
[arguments,...]
(可选)

将特定于每个模型使用的其他模型参数。 这些参数可用于调整模型的复杂度和大小。 请参阅时间序列预测模型的工作原理以了解模型架构、受支持的模型参数及其默认值。

Value Table
early_stopping
(可选)

指定当验证损失在连续 5 轮后未改善时,模型训练是否将停止。

  • TRUE当验证损失在连续 5 轮后未改善时,模型训练将停止。 这是默认设置。
  • FALSE模型训练将一直持续,直至达到最大轮数为止。
Boolean
out_features
(可选)

时空立方体中所有位置的输出要素类,其中的预测值将存储为字段。 将使用验证数据集上经过训练的模型的预测来创建要素类。 输出将显示对最后的时间步长的预测,并包含弹出图表,其中显示了验证集上的时间序列预测。

Feature Class
out_cube
(可选)

输出时空立方体(.nc 文件),包含输入时空立方体的值,并替换相应验证时间步长的预测值。

File
multistep
(可选)

指定是否使用一步或多步方法来训练多元时间序列预测模型。

  • TRUE模型训练将使用多步骤方法。
  • FALSE模型训练将使用传统的一步法。 这是默认设置。
Boolean

派生输出

名称说明数据类型
out_model_file

将在输出模型文件夹中另存为深度学习包文件 (.dlpk) 的训练模型。

File

代码示例

TrainTimeSeriesForecastingModel 示例(独立脚本)

本示例介绍了如何使用 TrainTimeSeriesForecastingModel 函数。

# Name: TrainTimeSeriesForecastingModel.py
# Description: Train a time series model on space-time cube data with
# different AI models.
  
# Import system modules                                                                                                                                                                                                                                                                                                                    
import arcpy
import os

# Set local variables
datapath  = "path_to_data_for_forecasting" 
out_path = "path_to_gdb_for_forecasting"

model_path = os.path.join(out_path, "model")
in_cube = os.path.join(datapath, "test_data")
out_features = os.path.join(out_path, "forecasted_feature.gdb", "forecasted")

# Run TrainTimeSeriesForecastingModel
arcpy.geoai.TrainTimeSeriesForecastingModel(
        in_cube,
        model_path,
        "CONSUMPTION",
        12,
        None,
        20,
        2,
        "InceptionTime",
        64,
        None,
        True,
        out_features
    )