SkLearn 中的 TimeSeriesSplit 无法正常工作

Posted

技术标签:

【中文标题】SkLearn 中的 TimeSeriesSplit 无法正常工作【英文标题】:TimeSeriesSplit in SkLearn is not working propertly 【发布时间】:2019-09-21 06:32:15 【问题描述】:

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]

【问题讨论】:

如果您需要任何其他帮助,请告诉我 您好 Jan,感谢您的回复。非常有帮助。我误解了时间序列验证策略,并从给定的示例中认为测试集应该始终是一个。我现在看到这类似于 K 折叠,但只是按时间顺序不断扩展的折叠,而不是随机抽样。感谢您的洞察力。 请考虑:***.com/help/someone-answers 【参考方案1】:

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

官方文档字符串示例正是这样做的(n_samples=6n_splits=5)。通常,验证集包含不止 1 个样本。

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

【讨论】:

以上是关于SkLearn 中的 TimeSeriesSplit 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

SkLearn 中的 TimeSeriesSplit 无法正常工作

浅谈sklearn中的数据预处理

为什么sklearn中的sklearn.metrics.RocCurveDisplay可视化的图像中的AUC值的有效小数位数为两位?而不能自定义调节(floating point precision)

带有sklearn的python中的轮廓系数

处理 sklearn.tree.DecisionTreeClassifier 中的连续变量

GridsearchCV sklearn 中的错误