我需要关于如何在将来递归地使用SKTIME库中的WindowSummarizer函数的帮助。
因为在训练和测试数据中,很容易产生移动平均值和移动标准差的变量。
但是对于未来的预测,WindowSummarizer函数必须以交互的方式工作,对于每一个新的预测观测,WindowSummarizer必须重新计算所有变量,从而递归地进行下一个预测,直到最后。
有谁可以帮我?
下面是一个可重复的例子:
#!pip install sktime[all_extras]
import pandas as pd
import numpy as np
from sktime.transformations.series.summarize import WindowSummarizer
from sktime.forecasting.base import ForecastingHorizon
from sktime.forecasting.compose import ForecastingPipeline
from sklearn.linear_model import LinearRegression
from sktime.datasets import load_airline
from sktime.forecasting.model_selection import temporal_train_test_split
from sktime.forecasting.compose import make_reduction, TransformedTargetForecaster
y = load_airline()
kwargs = {
"lag_feature": {
"lag": [0,1],
"mean": [[0, 7], [0, 14],[0, 28]],
"std": [[0, 7], [0, 14],[0, 28]],
"kurt": [[0, 7], [0, 14],[0, 28]],
"skew": [[0, 7], [0, 14],[0, 28]]
}
}
forecaster = make_reduction(
LinearRegression(),
scitype="tabular-regressor",
transformers=[WindowSummarizer(**kwargs, n_jobs=1,truncate = "bfill")],
window_length=None,
strategy="recursive"
)
pipe = ForecastingPipeline(
steps=[
("forecaster", forecaster),
]
)
model = pipe.fit(y)
model.predict(fh = np.arange(1,100,1))此代码返回错误消息:
Input contains NaN, infinity or a value too large for dtype('float64').发布于 2022-11-02 11:18:19
这里的问题是您使用的是ForecastingPipeline而不是TransformedTargetForecaster。根据文件.“利用外源data.ForecastingPipeline进行预测的管道只将给定的变压器应用到X上,预测者也可以是包含变压器的TransformedTargetForecaster来转换y”。
因此,对TransformedTargetForecaster的一个简单的更改适用于您发布的代码..。
y = load_airline()
kwargs = {
"lag_feature": {
"lag": [0,1],
"mean": [[0, 7], [0, 14],[0, 28]],
"std": [[0, 7], [0, 14],[0, 28]],
"kurt": [[0, 7], [0, 14],[0, 28]],
"skew": [[0, 7], [0, 14],[0, 28]]
}
}
from sklearn.linear_model import LinearRegression
forecaster2 = make_reduction(
LinearRegression(),
scitype="tabular-regressor",
transformers=[WindowSummarizer(**kwargs, n_jobs=1,truncate = "bfill")],
window_length=None,
strategy="recursive"
)
pipe = TransformedTargetForecaster(
steps=[
("forecaster", forecaster2),
]
)
model = pipe.fit(y)
model.predict(fh = np.arange(1,100,1))您还可以使用以下代码检查WindowSummarizer创建的外生变量.
transformer = WindowSummarizer(**kwargs, n_jobs=1,truncate = "bfill")
y_transformed = transformer.fit_transform(y)希望这能有所帮助。
https://stackoverflow.com/questions/73325333
复制相似问题