make_reduction#

make_reduction(estimator, strategy='recursive', window_length=10, scitype='infer', transformers=None, pooling='local', windows_identical=True)[source]#

基于到表格或时间序列回归的归约构建预测器。

在拟合过程中,使用滑动窗口方法首先将时间序列转换为表格或面板数据,然后用于拟合表格或时间序列回归估计器。在预测过程中,将最后可用数据用作已拟合回归估计器的输入来生成预测。

请参阅下方使用以下符号表示的 make_reduction 逻辑图示

  • y = 预测目标。

  • x = 用作预测 y 的特征 (X) 的 y 的历史值

  • * = 观测值,无论过去还是未来,既不是窗口的一部分,也不是预测的一部分。

假设我们有以下训练数据(14 个观测值)

|----------------------------|
| * * * * * * * * * * * * * *|
|----------------------------|

并希望使用 window_length = 9fh = [2, 4] 进行预测。

根据结构,递归归约器总是针对窗口后的第一个数据点,无论请求的预测视野如何。在示例中创建了以下 5 个窗口

|----------------------------|
| x x x x x x x x x y * * * *|
| * x x x x x x x x x y * * *|
| * * x x x x x x x x x y * *|
| * * * x x x x x x x x x y *|
| * * * * x x x x x x x x x y|
|----------------------------|

直接归约器将创建多个模型,每个预测视野一个模型。使用参数 windows_identical = True(默认值),用于训练模型的窗口由最大预测视野定义。在此示例中只能定义两个完整窗口 fh = 4fh = [2, 4] 中的最大值)

|----------------------------|
| x x x x x x x x x * * * y *|
| * x x x x x x x x x * * * y|
|----------------------------|

所有其他预测视野也将使用这两个(最大)窗口。fh = 2

|----------------------------|
| x x x x x x x x x * y * * *|
| * x x x x x x x x x * y * *|
|----------------------------|

使用 windows_identical = False,我们放弃了为每个直接模型使用相同窗口的要求,因此可以为除最大预测视野之外的视野创建更多窗口。fh = 2

|----------------------------|
| x x x x x x x x x * y * * *|
| * x x x x x x x x x * y * *|
| * * x x x x x x x x x * y *|
| * * * x x x x x x x x x * y|
|----------------------------|

fh = 4:

|----------------------------|
| x x x x x x x x x * * * y *|
| * x x x x x x x x x * * * y|
|----------------------------|

如果您想比较不同视野的预测性能,请使用 windows_identical = True,因为所有训练的模型将使用相同的窗口。如果您希望每个预测视野都获得最高的预测精度,请使用 windows_identical = False

参数:
estimator一个估计器实例,可以是:
  • scikit-learn 回归器或兼容接口

  • sktime 时间序列回归器

  • skpro 表格概率监督回归器,仅对于直接归约,这将产生一个概率预测器

strategystr, 可选(默认值=”recursive”)

生成预测的策略。必须是 “direct”、“recursive” 或 “multioutput” 之一。

window_lengthint, 可选(默认值=10)

滑动窗口变换中使用的窗口长度。

scitypestr, 可选(默认值=”infer”)

为向下兼容而保留的旧参数,不应使用。make_reduction 将自动推断 estimator 的正确类型。此内部推断可通过 scitype 参数强制覆盖。必须是 “infer”、“tabular-regressor” 或 “time-series-regressor” 之一。如果无法推断科学类型,则这是一个错误,应报告。

transformers: 变换器列表(默认值 = None)

适合与 make_reduction 配合使用 en-bloc 方法的变换器列表。这意味着,不是直接使用窗口长度内的 y 的原始历史观测值,而是直接从历史原始观测值生成合适的特征。目前仅支持 WindowSummarizer(或 WindowSummarizer 列表)来生成特征,例如过去 7 个观测值的平均值。目前仅适用于 RecursiveTimeSeriesRegressionForecaster。

pooling: str {“local”, “global”}, 可选

指定是针对每个实例(local)拟合单独的模型,还是希望为所有实例拟合单个模型(“global”)。目前仅适用于 RecursiveTimeSeriesRegressionForecaster。

windows_identical: bool, (默认值 = True)

仅限直接预测。指定所有直接模型是使用来自 y 的相同 X 窗口(True:窗口数量 = 总观测值 + 1 - window_length - 最大预测视野),还是根据预测视野使用不同数量的 X 窗口(False:窗口数量 = 总观测值 + 1 - window_length - 预测视野)。请参阅下方的图示以获取更多信息。

返回:
forecaster一个 sktime 预测器对象

归约预测器,包装了 estimator 类,其由 strategy 参数和 estimator 类型决定。

参考

[1]

Bontempi, Gianluca & Ben Taieb, Souhaib & Le Borgne, Yann-Aël. (2013). Machine Learning Strategies for Time Series Forecasting.

示例

>>> from sktime.forecasting.compose import make_reduction
>>> from sktime.datasets import load_airline
>>> from sklearn.ensemble import GradientBoostingRegressor
>>> y = load_airline()
>>> regressor = GradientBoostingRegressor()
>>> forecaster = make_reduction(regressor, window_length=15, strategy="recursive")
>>> forecaster.fit(y)
RecursiveTabularRegressionForecaster(...)
>>> y_pred = forecaster.predict(fh=[1,2,3])