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

2024-04-27 14:30:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在sklearn中,GridSearchCV可以将管道作为参数,通过交叉验证找到最佳估计量。然而,通常的交叉验证是这样的:enter image description here

为了交叉验证一个时间序列数据,训练和测试数据通常是这样分割的:enter image description here

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

我的想法是:

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

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

欢迎提出任何建议。


Tags: 数据版本参数管道时间序列foldsklearn
3条回答

几个月前我做了一些关于这些的工作。

你可以在这个问题/答案中找到答案:

Rolling window REVISITED - Adding window rolling quantity as a parameter- Walk Forward Analysis

我的意见是,您应该尝试实现自己的GridSearchWalkForwardTest。我曾经用GridSearch做过一次训练,我自己也实现了同样的GridSearch,但是我没有得到同样的结果,尽管我应该这样做。

我最后所做的就是使用我自己的功能。你对训练和测试集有更多的控制,对你训练的参数也有更多的控制。

我认为您可以使用Time Series Split来代替您自己的实现,或者作为实现CV方法的基础,正如您所描述的那样。

在仔细研究了一下之后,似乎有人在this PR中的TimeSeriesSplit中添加了一个max_train_size,它似乎可以满足您的需要。

相关问题 更多 >