参考:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html
sklearn.model_selection.TimeSeriesSplit
class sklearn.model_selection.TimeSeriesSplit(n_splits=5, max_train_size=None) source
时间序列分割 TimeSeriesSplit
提供训练/测试索引,以分割在训练/测试集中以固定时间间隔观察到的时间序列数据样本。 在每个分组中,测试索引必须比以前更高,因此在交叉验证器中改组是不合适的。此交叉验证对象是k-折交叉验证的变体。 在第k次拆分中,它返回前k个折叠作为训练集,第(k + 1)个折叠作为测试集。请注意,与标准的交叉验证方法不同,连续的训练集是在它们之前的训练集的超集superset。
TimeSeriesSplit是k-fold的一个变体,它首先返回k折作为训练数据集,并且 (k+1) 折作为测试数据集。请注意,与标准的交叉验证方法不同,连续的训练集是超越前者的超集。另外,它将所有的剩余数据添加到第一个训练分区,它总是用来训练模型。这个类可以用来交叉验证以固定时间间隔观察到的时间序列数据样本。(机器学习中的交叉验证
)
参数
- n_splits:int,默认值= 5,表示分割的数目。 必须至少为2。在版本0.22中n_splits的默认值从3更改为5(0.21版中默认值是3。
- max_train_size:int,可选,表示单个训练集的最大大小。
栗子
对具有 6 个样本的数据集进行 3-split 时间序列交叉验证的示例:
import numpy as np
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()
print(tscv)
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]
输出:(我的Scikit-learn 是0.21)
TimeSeriesSplit(max_train_size=None, n_splits=3)
TRAIN: [0 1 2] TEST: [3]
TRAIN: [0 1 2 3] TEST: [4]
TRAIN: [0 1 2 3 4] TEST: [5]