我想使用 TimeSeriesSplit 以获得前移交叉验证(或滑动窗口交叉验证)。我已经读过一种方法,可以将 max_train_size 设置为 TimeSeriesSplit 中的某个数字。但是,这不能保证所有分割中训练集的长度都等于max_train_size,但是我希望它们如此,以便真正获得滑动窗口交叉验证。
示例:在下面的代码中,通过设置max_train_size = 3和n_split = 5,它可以正常工作
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], [3, 4], [3, 4]])
y = np.array([1, 2, 3, 4, 5, 6, 7, 8])
tscv = TimeSeriesSplit(max_train_size=3, n_splits=5)
for train_index, test_index in tscv.split(X):
print("TRAIN:", train_index, "TEST:", test_index)
输出
TRAIN: [0 1 2] TEST: [3]
TRAIN: [1 2 3] TEST: [4]
TRAIN: [2 3 4] TEST: [5]
TRAIN: [3 4 5] TEST: [6]
TRAIN: [4 5 6] TEST: [7]
如您所见,这里我们有理由说这是一个滑动窗口。但是,如果我将max_train_size = 6放进去,则会发生以下情况:
TRAIN: [0 1 2] TEST: [3]
TRAIN: [0 1 2 3] TEST: [4]
TRAIN: [0 1 2 3 4] TEST: [5]
TRAIN: [0 1 2 3 4 5] TEST: [6]
TRAIN: [1 2 3 4 5 6] TEST: [7]
如您所见,并非所有火车都尺寸相同。
长话短说,是否存在特定的规则/方法,将max_train_size设置为某个数字总是可以确保所有训练集在TimeSeriesSplit中都具有相同的大小?不管数据长短
如果那行不通,是否可以编写一个简单的python代码以实现同样的分离(我认为这样做并不难,但我一无所知)
先谢谢了。