在 scikit-learn 中跨多个模型进行交叉验证时如何保持相同的折叠?

Posted

技术标签:

【中文标题】在 scikit-learn 中跨多个模型进行交叉验证时如何保持相同的折叠?【英文标题】:How to persist the same folds when doing cross-validation across multiple models in scikit-learn? 【发布时间】:2020-10-12 18:32:47 【问题描述】:

我正在跨多个模型进行超参数调整并比较结果。每个模型的超参数通过 5 折交叉验证选择。我正在使用sklearn.model_selection.KFold(n_splits=5, shuffle=True) 函数来获取折叠生成器。

在检查了KFold 上的文档和一些模型的源代码后,我怀疑为每个模型创建了一组新的折叠。我想让事情变得更公平,并为我正在调整的所有模型使用相同的(最初是随机的)折叠。有没有办法在 scikit-learn 中做到这一点?

作为一个相关问题,使用相同的折叠来获得我想要做的公平比较是否有意义?

【问题讨论】:

【参考方案1】:

交叉验证的目标是在测试集中获得具有代表性的准确度度量。折叠次数越多,指标就越准确。

如果您使用 5 或 10 折交叉验证来比较不同的超参数集,则不必使用完全相同的拆分来比较您的模型。所有折叠的平均准确度可以让您很好地了解模型的性能,并让您可以比较它们。

【讨论】:

【参考方案2】:

你有两个选择:

    在开始时随机播放您的数据,然后使用带有 shuffle=False 的 Kfold。

    每次执行 KFold 时,将参数 random_state 设置为相同的整数。

当您重复 KFold 时,任何一个选项都会导致使用相同的折叠。请参阅此处的文档:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html

这种方法对我来说合乎逻辑,但我不认为它会产生重大影响。也许其他人可以对优点/缺点进行更详细的解释。

【讨论】:

以上是关于在 scikit-learn 中跨多个模型进行交叉验证时如何保持相同的折叠?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 中跨多个列的标签编码

如何在 R 中跨多个字段创建简单的交叉表

如何在 scikit-learn 中执行随机森林模型的交叉验证?

scikit-learn交叉验证及其用于參数选择模型选择特征选择的样例

如何在代码点火器模型中跨多个函数实现数据库锁定?

在 SciKit-Learn 中使用 XGBoost 交叉验证进行网格搜索和提前停止