如何在sklearn中实现前进测试?

Phi*_*ang 26 python time-series scikit-learn cross-validation

在sklearn中,GridSearchCV可以将管道作为参数,通过交叉验证找到最佳估算器.但是,通常的交叉验证是这样的:在此输入图像描述

为了交叉验证时间序列数据,训练和测试数据经常被拆分为:在此输入图像描述

也就是说,测试数据应始终领先于训练数据.

我的想法是:

  1. 编写我自己的k-fold版本类并将其传递给GridSearchCV,这样我就可以享受管道的便利.问题是让GridSearchCV使用指定的训练和测试数据指数似乎很困难.

  2. 写一个新类GridSearchWalkForwardTest,它类似于GridSearchCV,我正在研究源代码grid_search.py​​并发现它有点复杂.

任何建议都是受欢迎的.

Mat*_*uns 6

我认为您可以使用时间序列拆分来代替您自己的实现,也可以将其用作实现完全如您所描述的CV方法的基础。

深入研究之后,似乎有人在此PR中将max_train_size添加到TimeSeriesSplit中,这似乎可以满足您的要求。


hoa*_*oid 1

我的意见是你应该尝试实现你自己的 GridSearchWalkForwardTest。我曾经使用 GridSearch 进行训练,并自己实现了相同的 GridSearch,但我没有得到相同的结果,尽管我应该得到。

我最后所做的是使用我自己的函数。您可以更好地控制训练和测试集,并且可以更好地控制训练的参数。