TimeSeriesPredictor.fit¶
- TimeSeriesPredictor.fit(train_data: TimeSeriesDataFrame | DataFrame | Path | str, tuning_data: TimeSeriesDataFrame | DataFrame | Path | str | None = None, time_limit: int | None = None, presets: str | None = None, hyperparameters: str | Dict[str | Type, Any] | None = None, hyperparameter_tune_kwargs: str | Dict | None = None, excluded_model_types: List[str] | None = None, num_val_windows: int = 1, val_step_size: int | None = None, refit_every_n_windows: int | None = 1, refit_full: bool = False, enable_ensemble: bool = True, skip_model_selection: bool = False, random_seed: int | None = 123, verbosity: int | None = None) TimeSeriesPredictor [source]¶
将概率预测模型拟合到给定的时间序列数据集。
- 参数:
train_data (Union[TimeSeriesDataFrame | pd.DataFrame | Path | str]) –
训练数据,格式为
TimeSeriesDataFrame
。长度小于等于
<= (num_val_windows + 1) * prediction_length
的时间序列在训练期间将被忽略。详见num_val_windows
。如果在创建预测器时指定了
known_covariates_names
,则train_data
必须包含known_covariates_names
中列出的列,并且协变量值与目标时间序列对齐。在
train_data
中除target
和known_covariates_names
中列出的列之外的其他列,将被解释为past_covariates
- 仅在过去已知的协变量。如果
train_data
包含协变量或静态特征,它们将被解释如下:具有
int
、bool
和float
数据类型的列被解释为连续(实值)特征具有
object
、str
和category
数据类型的列被解释为类别特征具有其他数据类型的列将被忽略
为确保列类型被正确解释,请将其转换为上述数据类型之一。例如,要确保 dtype 为
int
的列 "store_id" 被解释为类别,请将其 dtype 更改为category
data.static_features["store_id"] = data.static_features["store_id"].astype("category")
如果提供的数据是 pandas.DataFrame,AutoGluon 将尝试将其转换为 TimeSeriesDataFrame。如果提供 str 或 Path,AutoGluon 将尝试加载此文件。
tuning_data (Union[TimeSeriesDataFrame | pd.DataFrame | Path | str] | None , optional) –
保留用于模型选择和超参数调优而非训练单个模型的数据。也用于计算验证分数。请注意,每个时间序列中只有最后
prediction_length
个时间步长用于计算验证分数。如果提供了
tuning_data
,则训练数据上的多窗口回测将被禁用,num_val_windows
将被设置为0
,并且refit_full
将被设置为False
。将此参数留空,让 AutoGluon 自动从
train_data
生成验证集是一个很好的默认选项。中
tuning_data
的列名和数据类型以及静态特征必须与train_data
匹配。如果提供的数据是 pandas.DataFrame,AutoGluon 将尝试将其转换为 TimeSeriesDataFrame。如果提供 str 或 Path,AutoGluon 将尝试加载此文件。
time_limit (int | None , optional) –
fit()
运行的大致时长(壁钟时间,单位秒)。如果未指定,fit()
将运行直到所有模型训练完成。presets (str | None , optional) –
fit()
中各种参数的可选预设配置。可以显著影响训练模型的预测精度、内存占用、推理延迟以及返回的预测器的各种其他属性。建议在熟悉 AutoGluon 之前指定预设,并避免指定大多数其他
fit()
参数或模型超参数。例如,设置presets="high_quality"
以获得高精度的预测器,或设置presets="fast_training"
以快速获得结果。用户在fit()
中指定的任何参数将覆盖预设使用的值。可用预设
"fast_training"
: 简单的统计模型和基于树的 ML 模型。这些模型训练速度快,但可能精度不高。"medium_quality"
: 与上述模型相同,外加深度学习模型TemporalFusionTransformer
和 Chronos-Bolt (小型)。提供良好的预测结果,训练时间合理。"high_quality"
: 结合 AutoGluon 中可用的多种 DL、ML 和统计预测模型,提供最佳预测精度。比medium_quality
精确得多,但训练时间更长。"best_quality"
: 与"high_quality"
中的模型相同,但执行多次回测验证。通常比high_quality
更好,但训练时间甚至更长。
使用 Chronos-Bolt 模型时的可用预设
"bolt_{model_size}"
: 其中模型大小是tiny,mini,small,base
之一。使用 Chronos-Bolt 预训练模型进行零样本预测。详情请参阅ChronosModel
文档或 Hugging Face。
如果没有选择 presets,将使用用户为 hyperparameters 提供的值(默认为下面指定的默认值)。
hyperparameters (str | Dict[str | Type, Any] | None , optional) –
确定训练哪些模型以及每个模型使用哪些超参数。
如果传入的是字符串,将使用
autogluon/timeseries/trainer/models/presets.py
中定义的预设超参数配置。支持的值为"default"
、"light"
和"very_light"
。如果提供的是字典,键是字符串或类型,指示要训练哪些模型。每个值本身都是一个字典,包含每个训练模型的超参数,或者此类字典的列表。此处未指定的任何遗漏的超参数将设置为默认值。例如:
predictor.fit( ... hyperparameters={ "DeepAR": {}, "Theta": [ {"decomposition_type": "additive"}, {"seasonal_period": 1}, ], } )
上述示例将训练三个模型:
DeepAR
使用默认超参数Theta
使用加法季节分解(所有其他参数设置为其默认值)Theta
季节性禁用(所有其他参数设置为其默认值)
可用模型的完整列表及其超参数在时间序列预测 - 模型动物园中提供。
每个模型的超参数可以是固定值(如上所示),也可以是执行超参数优化的搜索空间。仅当提供了
hyperparameter_tune_kwargs
时(即使用了超参数调优)才应提供搜索空间。例如:from autogluon.common import space predictor.fit( ... hyperparameters={ "DeepAR": { "hidden_size": space.Int(20, 100), "dropout_rate": space.Categorical(0.1, 0.3), }, }, hyperparameter_tune_kwargs="auto", )
在上述示例中,将训练 DeepAR 模型的多个版本,其参数 "hidden_size" 和 "dropout_rate" 的值不同。
hyperparameter_tune_kwargs (str | Dict | None , optional) –
超参数调优策略和 kwargs(例如,运行多少次 HPO 试验)。如果为 None,则不执行超参数调优。
如果类型为
str
,则此参数指定一个预设。有效的预设值:”auto”: 通过 GluonTS 支持的神经预测模型上的贝叶斯优化搜索和使用本地调度器对其他模型进行随机搜索来执行 HPO。
”random”: 通过随机搜索执行 HPO。
您也可以提供一个字典来指定搜索器和调度器。有效键:
”num_trials”: 运行多少次 HPO 试验
- ”scheduler”: 使用哪个调度器。有效值:
”local”: 按 FIFO 调度试验的本地调度器
- ”searcher”: 使用哪个搜索算法。有效值:
”local_random”: 使用“random”搜索器
”random”: 执行随机搜索
”bayes”: 通过 Ray tune 使用 HyperOpt 对 GluonTS 支持的模型执行 HPO。对其他模型执行随机搜索。
”auto”: “bayes”的别名
提供字典时,“scheduler”和“searcher”键是必需的。
示例:
predictor.fit( ... hyperparameter_tune_kwargs={ "num_trials": 5, "searcher": "auto", "scheduler": "local", }, )
excluded_model_types (List[str] | None , optional) –
在
fit()
期间避免训练的禁止模型类型子集,即使它们存在于hyperparameters
中。例如,以下代码将训练high_quality
预设中包含的所有模型,除了DeepAR
:predictor.fit( ..., presets="high_quality", excluded_model_types=["DeepAR"], )
num_val_windows (int , default = 1) –
对
train_data
进行的回测次数,用于估计每个训练模型的验证性能。如果提供了num_val_windows > 1
,此值可能会自动减小,以确保train_data
中的大多数时间序列足够长,以支持选定的回测次数。增加此参数会使训练时间大致增加
num_val_windows // refit_every_n_windows
倍。详见refit_every_n_windows
和val_step_size
。例如,对于
prediction_length=2
、num_val_windows=3
和val_step_size=1
,折叠如下:|-------------------| | x x x x x y y - - | | x x x x x x y y - | | x x x x x x x y y |
其中
x
是训练时间步长,y
是验证时间步长。如果提供了
tuning_data
,此参数无效。val_step_size (int | None , default = None) –
连续验证窗口之间的步长。如果设置为
None
,则默认为创建预测器时提供的prediction_length
。如果提供了
tuning_data
,此参数无效。refit_every_n_windows (int | None , default = 1) –
执行交叉验证时,每个模型将每
refit_every_n_windows
个验证窗口重新训练一次,验证窗口的数量由 num_val_windows 指定。请注意,在 num_val_windows=1 的默认设置下,此参数无效。如果设置为
None
,模型将仅针对第一个(最旧的)验证窗口拟合一次。默认情况下,refit_every_n_windows=1,即所有模型将针对每个验证窗口重新拟合。refit_full (bool , default = False) – 如果为 True,在训练完成后,AutoGluon 将尝试使用所有训练数据(包括最初保留用于验证的数据)重新训练所有模型。如果提供了
tuning_data
,此参数无效。enable_ensemble (bool , default = True) – 如果为 True,
TimeSeriesPredictor
将在通过hyperparameters
指定的模型之上拟合一个简单的加权集成。skip_model_selection (bool , default = False) – 如果为 True,预测器将不计算验证分数。例如,如果只想将预测器用作单个预训练模型的包装器,此参数很有用。如果设置为 True,则
hyperparameters
字典必须仅包含一个没有超参数搜索空间的模型,否则将引发异常。random_seed (int | None , default = 123) – 如果提供,则固定所有模型的随机数生成器种子。这保证了大多数模型的可重现结果(使用 GPU 训练的模型除外,因为 GPU 操作具有非确定性)。
verbosity (int | None , optional) – 如果提供,将覆盖创建
TimeSeriesPredictor
时使用的verbosity
值。详见TimeSeriesPredictor
文档。