如果在train_test_split中将shuffle设置为False,TimeSeriesSplit是否有必要



目前,我正在对时间序列使用回归模型。为了分配训练和测试数据,我通常使用来自sklearn的train_testrongplit,它看起来像这样:

X_Train, X_Test, Y_Train, Y_Test = train_test_split(X.to_numpy(), Y.to_numpy(), test_size=.30, shuffle=False)

这样,每个变量都会被分配一个带有相关数据的数组。但是,由于它是时间序列数据,我希望训练集只使用测试值之前的值。我假设将shuffle设置为False就是这样做的,当我只看变量时就会出现这种情况,但如果是这样的话,肯定不会创建TimeSeriesSplit模型,对吧?

当我尝试实现这一点时,TimeSeriesSplit的文档对于初学者来说是非常令人困惑的。它似乎只接受了一个模糊定义的";n分割";参数,但它没有任何其他说明如何简单地分配xtrain、xtest、ytrain和ytest。那么这有必要吗?它是否通过将shuffle设置为False来执行未执行的操作?

即使在耗尽所有资源后,我也能得到的最远的结果是:
time_series_split = TimeSeriesSplit()

数据集的结构如下:

-5<10><1>
日期 本月值 下个月的回报
01/22 30
22/22 10 5
22年3月 50
22年4月 5

使用TimeSeriesSplit()通常意味着交叉验证。如果您只需要分离测试集,那么train_test_split(shuffle=False)就足够了。然而,如果您碰巧需要几个子集而不会出现未来的数据泄露,TimeSeriesSplit()可以简化很多事情,即:

time_series_split = TimeSeriesSplit(n_splits=4)
gs = GridSearchCV(cv=time_series_split, ... # add parameters as needed)
gs.fit(X_train, y_train)

最新更新