首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归地调用"WindowSummarizer“(从sktime开始)到未来的预测目标Y

递归地调用"WindowSummarizer“(从sktime开始)到未来的预测目标Y
EN

Stack Overflow用户
提问于 2022-08-11 18:27:16
回答 1查看 97关注 0票数 1

我需要关于如何在将来递归地使用SKTIME库中的WindowSummarizer函数的帮助。

因为在训练和测试数据中,很容易产生移动平均值和移动标准差的变量。

但是对于未来的预测,WindowSummarizer函数必须以交互的方式工作,对于每一个新的预测观测,WindowSummarizer必须重新计算所有变量,从而递归地进行下一个预测,直到最后。

有谁可以帮我?

下面是一个可重复的例子:

代码语言:javascript
复制
#!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))

此代码返回错误消息:

代码语言:javascript
复制
Input contains NaN, infinity or a value too large for dtype('float64').
EN

回答 1

Stack Overflow用户

发布于 2022-11-02 11:18:19

这里的问题是您使用的是ForecastingPipeline而不是TransformedTargetForecaster。根据文件.“利用外源data.ForecastingPipeline进行预测的管道只将给定的变压器应用到X上,预测者也可以是包含变压器的TransformedTargetForecaster来转换y”。

因此,对TransformedTargetForecaster的一个简单的更改适用于您发布的代码..。

代码语言:javascript
复制
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创建的外生变量.

代码语言:javascript
复制
transformer = WindowSummarizer(**kwargs, n_jobs=1,truncate = "bfill")
y_transformed = transformer.fit_transform(y)

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73325333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档