在 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 中执行随机森林模型的交叉验证?