我正在尝试解决机器学习问题。我有一个特定的数据集时间序列元素。对于这个问题,我使用著名的 python 库 -sklearn
。这个库中有很多交叉验证迭代器。还有几个迭代器用于您自己定义交叉验证。问题是我真的不知道如何定义时间序列的简单交叉验证。这是我想要得到的一个很好的例子:
假设我们有几个时期(年),并且希望将数据集分成几个块,如下所示:
data = [1, 2, 3, 4, 5, 6, 7]
train: [1] test: [2] (or test: [2, 3, 4, 5, 6, 7])
train: [1, 2] test: [3] (or test: [3, 4, 5, 6, 7])
train: [1, 2, 3] test: [4] (or test: [4, 5, 6, 7])
...
train: [1, 2, 3, 4, 5, 6] test: [7]
我真的不明白如何使用 sklearn 工具创建这种交叉验证。也许我应该使用PredefinedSplit
from sklearn.cross_validation
像那样:
train_fraction = 0.8
train_size = int(train_fraction * X_train.shape[0])
validation_size = X_train.shape[0] - train_size
cv_split = cross_validation.PredefinedSplit(test_fold=[-1] * train_size + [1] * validation_size)
Result:
train: [1, 2, 3, 4, 5] test: [6, 7]
但仍然不如之前的数据分割那么好