对微小数据执行交叉验证

时间:2019-04-15 18:44:25

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

我想对详细数据执行交叉验证。

我尝试在TimeSeriesSplit学习中使用Scikit方法。但是它会根据索引创建折叠。

因此,发生火车折叠的情况可能包含来自 '2017-01-01 00:00:00''2019-01-01 10:00:00',以及 测试折叠将包含从'2019-01-01 10:01:00''2019-01-02 23:59:00'的数据。

如您所见,这不是进行交叉验证的准确方法,因为10小时包含在火车和测试折叠中,因此会导致误导性结果。

我想要实现的是对TimeSeriesSplit进行分组

例如-

train_fold_1 - '2017-01-01 00:00:00' to '2019-01-01 23:59:00'
test_fold_1 - '2019-01-02 00:00:00' to '2019-01-02 23:59:00'

train_fold_2 - '2017-01-01 00:00:00' to '2019-01-02 23:59:00'
test_fold_2 - '2019-01-03 00:00:00' to '2019-01-03 23:59:00'

我有详尽的数据,目前使用XGBoost来预测明天的每一分钟。

PFA-a screenshot of pandas Dataframe

在以下两种情况下,过去400天都用于执行交叉验证 例如-如果我们要预测从2019-01-01 00:00:002019-01-01 23:59:00的时间,我们将使用过去400天到2018-12-31 23:59:00进行交叉验证。

下图中的第一个值是MSE,第二个值是标准偏差,是使用Scikit Learn中的TimeSeriesSplit计算得出的。

cross validation score 1-January-2019 using TimeSeriesSplit

cross validation score 1-february-2019 using TimeSeriesSplit

您可能会注意到,即使使用了相同数量的数据,当日期范围更改时,我们仍然会观察到MSE和标准差的巨大变化。

0 个答案:

没有答案