-1

网上有很多例子展示了如何使用 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]

还是我还缺少其他东西?

4

1 回答 1

1

让我们看一下文档,其中指出:

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

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

然而,您的问题暗示了对测试列车拆分和交叉验证的普遍误解:

您不想聚合或分离拆分。

TimeSeriesSplit 的想法基于交叉验证,您可以将数据集分成多个子集,例如超参数选择。

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

最后,您将例如平均测试指标并选择具有最佳平均性能的模型。

该数据仅用于模型选择——最终的保留集应可用于评估。

可以帮助你

于 2019-03-20T18:07:47.870 回答