make_reduction#
- make_reduction(estimator, strategy='recursive', window_length=10, scitype='infer', transformers=None, pooling='local', windows_identical=True)[源代码][源代码]#
基于归约到表格或时间序列回归的预测器。
在拟合过程中,使用滑动窗口方法首先将时间序列转换为表格或面板数据,然后使用这些数据来拟合表格或时间序列回归估计器。在预测过程中,使用最后可用的数据作为输入,传递给拟合的回归估计器以生成预测。
请参见以下使用以下符号的 make_reduction 逻辑的图形表示:
y
= 预测目标。x
= 过去用于预测 y 的 y 值(X)*
= 观察值,过去或未来的,既不属于窗口也不属于预测。
假设我们有以下训练数据(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
。- 参数:
- 估计器一个估计器实例,可以是:
scikit-learn 回归器或兼容接口
sktime 时间序列回归器
skpro 表格概率监督回归器,仅用于直接减少,这将产生一个概率预测器
- 策略str, 可选 (默认值为”recursive”)
生成预测的策略。必须是以下之一:“直接”、“递归”或“多输出”。
- window_lengthint, 可选 (默认=10)
滑动窗口变换中使用的窗口长度。
- scitypestr, 可选 (默认值为“infer”)
向下兼容的遗留参数,不应使用。
make_reduction
会自动推断estimator
的正确类型。此内部推断可以通过scitype
参数强制覆盖。必须是 “infer”、”tabular-regressor” 或 “time-series-regressor” 之一。如果无法推断 scitype,这是一个错误,应报告。- transformers: 转换器列表 (默认 = None)
一个合适的转换器列表,允许在使用 make_reduction 时采用整体方法。这意味着,不是使用窗口长度内的 y 的原始过去观测值,而是直接从过去的原始观测值生成合适的特征。目前仅支持 WindowSummarizer(或 WindowSummarizer 列表)来生成特征,例如过去 7 个观测值的平均值。目前仅适用于 RecursiveTimeSeriesRegressionForecaster。
- pooling: str {“local”, “global”}, 可选
指定是否在每个实例(本地)级别拟合单独的模型,或者您是否希望将单个模型拟合到所有实例(“全局”)。目前仅适用于RecursiveTimeSeriesRegressionForecaster。
- windows_identical: bool, (默认 = True)
仅直接预测。指定所有直接模型是否使用相同的 X 窗口从 y 中提取(True:窗口数量 = 总观测值 + 1 - 窗口长度 - 最大预测范围)或根据预测范围使用不同数量的 X 窗口(False:窗口数量 = 总观测值 + 1 - 窗口长度 - 预测范围)。更多信息请参见下面的图示。
- 返回:
- 预测者一个 sktime 预测器对象
减少预测器,包装
estimator
类由strategy
参数和estimator
的类型决定。
参考文献
[1]Bontempi, Gianluca & Ben Taieb, Souhaib & Le Borgne, Yann-Aël. (2013). 时间序列预测的机器学习策略。
示例
>>> 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])