Python TimeSeriesSplit-如何聚合(或取消竖井)拆分?

Python TimeSeriesSplit-如何聚合(或取消竖井)拆分?,python,scikit-learn,time-series,Python,Scikit Learn,Time Series,网上有很多例子展示了如何使用TimeSeriesSplit创建多个培训/测试集。然而,它们并没有显示如何在实践中实际地聚合这些 例如,这是从scikit学习文档中提供的: 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 = TimeSerie

网上有很多例子展示了如何使用TimeSeriesSplit创建多个培训/测试集。然而,它们并没有显示如何在实践中实际地聚合这些

例如,这是从scikit学习文档中提供的:

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]

列车:[01 2 3 4]测试:[5]

然而,目前尚不清楚如何在培训制度中实际利用这些多重分裂。我可以单独使用,但未来的培训师不会从之前的拆分中受益。现在我最好的猜测是把所有的分割组合在一起工作?所以我只剩下:

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

还是我还遗漏了什么?

让我们看一下,其中说明:

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

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

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

您不希望聚合或取消拆分

TimeSeriesSplit的概念基于将数据集分成多个子集的位置,例如超参数选择

因此,您将在5个分段中的每个分段上分别使用一组给定的超参数s1来训练模型-仅在训练数据上训练模型,并在测试中进行评估

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

此数据仅用于模型选择-应提供最终保持集以供评估


可以帮你

谢谢,这很有帮助。为了确认我的理解——当n_splits=n时,我将对我的模型进行n次训练和测试,并“平均”每个分割性能(在该分割的测试集上计算),以获得模型如何运行的更具代表性的想法?以及一个快速跟进问题——一旦调整/选择了超参数,我假设您使用整个数据集作为培训集对模型进行最终培训,而不需要拆分来测试/验证?(1)是,(2)对于您之前使用的所有开发数据进行培训并对数据集的另一部分进行评估的最终评估,您以前从未使用过。感谢您的帮助-我对列车/测试拆分和最终评估有了更好的总体理解。