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 = 9
和fh = [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 = 4
(fh = [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])