SkLearn中的TimeSeriesSplit无法正常工作

时间:2019-05-02 17:27:25

标签: scikit-learn time-series cross-validation

TimeSeriesSplitCV在sklearn上无法正常工作。这是适当的行为吗?

使用此处提供的示例:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html

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)
print(tscv)  

for train_index, test_index in tscv.split(X):
   print("TRAIN:", train_index, "TEST:", test_index)

当您将分割数更改为2而不是默认的n_splits = 5时,测试数据将变为长度2而不是1。但是,对于SKLearn文档中定义的所有时间序列情况以及最常见的情况,目标是按时间顺序预测下一个观察结果。我误会了吗?

TRAIN: [0 1] TEST: [2 3]
TRAIN: [0 1 2 3] TEST: [4 5]

1 个答案:

答案 0 :(得分:0)

让验证集仅包含 ,当您将n_splits设置为n_samples - 1时,下一个观察只是一个特殊情况,其中n_samples是数字数据集中的样本数量。

官方docstring示例完全可以做到这一点(n_samples=6n_splits=5)。通常,验证集包含多个样本。

查看更全面的示例here。下面我附上一张图。在这种情况下,n_samples=100n_splits=4和每个验证(测试)集都包含20个样本。

enter image description here