在时间序列数据中,TimeSeriesSplit 的 train_index 和 valid_index 的矩阵元素数量由以下几个因素决定:
- 时间序列的总长度 (
n_samples):即整个数据集的样本数量。train_index和valid_index会从中划分出不同的数据块。 - 划分的次数 (
n_splits):定义了交叉验证要进行多少次切分。在每次切分中,训练集和验证集都会被分成不同的部分。 - 验证集大小:在每次切分中,验证集的大小是固定的,通常会包含一部分未来的时间步,而训练集则包括之前的所有时间步。
TimeSeriesSplit 划分逻辑
TimeSeriesSplit 会在时间序列数据中按顺序生成多个分割,每次分割时,训练集中的数据集大小逐渐增加,而验证集始终是后续的一段数据。验证集的大小通常是由数据总长度和分割次数 n_splits 决定的。
以例子为基础,假设总样本数为 n_samples = 10,划分次数 n_splits = 3,TimeSeriesSplit 的划分逻辑如下:
第一次划分:
train_index:前面较小的部分作为训练集。假设此时训练集的长度为 5 个时间步。
train_index: [0, 1, 2, 3, 4]
valid_index:接下来的时间步作为验证集。验证集长度根据交叉验证的配置来定,这里假设是 2 个时间步。
valid_index: [5, 6]
第二次划分:
train_index:每次迭代训练集的大小会扩展,包括更多的时间步。训练集现在包含更多的时间步数据。
train_index: [0, 1, 2, 3, 4, 5, 6]
valid_index:后续的时间步作为验证集。
valid_index: [7, 8]
第三次划分:
train_index:继续增加训练集的长度,包含所有前面的时间步。
train_index: [0, 1, 2, 3, 4, 5, 6, 7, 8]
valid_index:验证集是剩下的最后一个时间步。
valid_index: [9]
具体矩阵元素数量如何确定:
- 训练集 (
train_index):
- 每次交叉验证的训练集包含从第一个时间步开始的所有时间步,直到某个时间步为止。每次迭代,训练集的大小会增加,包含所有过去的数据点。
- 第一次划分时,训练集较小(例如
[0, 1, 2, 3, 4]),而随着每次迭代,训练集的大小会逐渐变大。
- 验证集 (
valid_index):
- 验证集包含未来的数据点,每次都是前面数据之后的一个连续的时间步。验证集的大小在每次交叉验证中是固定的(假设为 2 个元素),并且验证集的时间步永远不会与训练集的时间步重叠。
- 验证集的大小由
TimeSeriesSplit的设置自动决定。在这种分割方式下,验证集通常是比训练集“更晚”的时间步。
TimeSeriesSplit 的特点:
- 验证集不会回溯,也就是说,验证集的数据永远位于训练集的“未来”,保证了时间序列的顺序性。
- 训练集逐渐变大,包含了更多的历史数据。










