TimeSeriesSplit-如何汇总(或取消合并)拆分?

时间:2019-03-18 13:36:22

标签: python scikit-learn time-series

在线上有很多示例,展示了如何使用TimeSeriesSplit创建多个训练/测试集。但是,它们没有显示如何在实践中实际汇总这些内容。

例如,这是从scikit-learn文档中提供的:

from sklearn.model_selection import TimeSeriesSplit
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4, 5, 6])
tscv = TimeSeriesSplit(n_splits=5)
for train_index, test_index in tscv.split(X):
   print("TRAIN:", train_index, "TEST:", test_index)
   X_train, X_test = X[train_index], X[test_index]
   y_train, y_test = y[train_index], y[test_index]

哪个产生结果:

  

火车:[0]测试:[1]

     

火车:[0 1]测试:[2]

     

火车:[0 1 2]测试:[3]

     

火车:[0 1 2 3]测试:[4]

     

火车:[0 1 2 3 4]测试:[5]

但是,尚不清楚如何在训练方案中实际利用这些多重分裂。我可以单独使用它们,但是以后的培训师不会从上一次的拆分中受益。现在,我最好的猜测是将所有拆分组合在一起工作?所以我剩下:

  

火车:[0,0,1,0,1,2,0,1,2,3,0,1,2,3,4]测试[1,2,3,4,5]

或者还有其他我想念的东西吗?

1 个答案:

答案 0 :(得分:1)

让我们看看documentation,其中指出:

  

请注意,与标准交叉验证方法不同,连续   训练集是在它们之前的训练集的超集。

如果我正确理解,他们将对该时间序列拆分使用开窗方法,其中每个后续拆分比上一个拆分大一个元素。 这就解释了每个折叠的测试火车数据的内容。

但是您的问题暗示着对测试序列拆分和交叉验证的普遍误解:

您不想汇总或取消拆分拆分。

TimeSeriesSplit的思想基于crossvalidation,您可以将数据集分为多个子集,例如超参数选择。

因此,您将分别在5个分割中的每一个上训练具有给定超参数s1集的模型-仅在训练数据上训练模型,然后对测试进行评估。

然后,最后您将对测试指标进行平均,然后选择具有最佳平均性能的模型。

此数据仅用于模型选择-最终保留集应可用于评估。

This可以帮助您