【问题标题】:Python Time SeriesSplitPython时间序列拆分
【发布时间】:2020-05-15 05:59:33
【问题描述】:

我有以下问题:

我有一个计时器系列。我已经完成了预处理,现在我有了包含多个特征的 x 和包含我的输出的 y。我已经将它拆分成火车,测试:x_trainx_testy_trainy_test

我现在想做回归和网格搜索。

由于我有时间序列,我无法进行 k 折交叉验证。所以我想使用TimeSeriesSplit

但我到底要分裂什么?我想我会把训练集分成训练和测试/验证来训练我的模型,验证/选择我的超参数,然后使用测试进行预测。它是否正确? 以及如何选择n_splits

我现在有以下代码:

pipe=Pipeline....
pipe.fit(x_train, y_train)

tss=TimeSeriesSplit(n_splits=5)
for train_index, test_index in tss(train):
print('train:', train_index, 'test:', test_index

clf=GridSearchCV(pipe, param_grid, cv=tss)
clf.fit(x_train, y_train)

【问题讨论】:

    标签: time-series


    【解决方案1】:

    根据 sklearn 文档:

    https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html

    “提供训练/测试索引以拆分在训练/测试集中以固定时间间隔观察到的时间序列数据样本。在每个拆分中,测试索引必须高于以前,因此在交叉验证器中打乱是不合适的。 "

    如果你想验证一个时间序列模型,方法是嵌套交叉验证一些关于它的信息在下面的链接中:

    https://mlfromscratch.com/nested-cross-validation-python-code/

    【讨论】:

    • 抱歉再次询问,但我不能 100% 确定我是否正确:对于嵌套交叉验证,我仍然会在训练和验证中拆分我的训练系列,并在验证时调整我的参数,在测试时预测设置并比较预测以在网格搜索中调整我的参数,对吧?
    • 没问题。您将在训练集中调整参数,在验证集中使用验证指标,选择一个或一些模型并使用相同的验证指标对其进行测试。这样做不是“正确且唯一的方法”。根据问题的不同,你可以让它变得不同并且仍然是正确的。它必须是有道理的。
    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 2018-10-07
    • 2016-10-02
    • 2022-01-07
    • 2021-07-16
    • 1970-01-01
    • 2016-09-07
    • 2020-12-21
    相关资源
    最近更新 更多