panda根据特定列创建交叉验证



我有一个几百行的数据帧,可以按如下方式分组为id:

df = Val1 Val2 Val3 Id
2     2   8    b
1     2   3    a
5     7   8    z
5     1   4    a
0     9   0    c
3     1   3    b
2     7   5    z
7     2   8    c
6     5   5    d
...
5     1   8    a
4     9   0    z
1     8   2    z

我想使用GridSearchCV,但使用自定义CV可以确保来自同一ID的所有行始终位于同一集合上。因此,如果a在测试集中,要么所有的行都在训练集中——对于所有不同的ID也是如此。

我想要5次折叠,所以80%的id将用于火车,20%用于测试。我知道它不能保证所有折叠都有完全相同的行数,因为一个ID可能比另一个ID有更多的行。

最好的方法是什么?

如前所述,GroupShuffleSplit()基于组标签拆分数据。然而,测试集并不一定是不相交的(即,进行多次拆分时,一个ID可能会出现在多个测试集中(。如果您希望每个ID只出现在一个测试折叠中,则可以使用GroupKFold()。这在Sklearn.model_selection中也可用,并直接扩展KFold以考虑组标签。

如上所述,您可以为cv提供迭代器。您可以使用GroupShuffleSplit((。例如,一旦使用它来分割数据集,就可以将结果放在cv参数的GridSearchCV()中。

正如sklearn文档中提到的,有一个名为"cv"的参数,您可以在其中提供"作为索引数组的可迭代收益(训练、测试(拆分。">

以后一定要先查看文档。

最新更新