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

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

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

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

【问题讨论】:

    标签: cross-validation scikit-learn


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你有两个选择:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-10-25
        • 2013-08-17
        • 2012-01-07
        • 1970-01-01
        • 2016-04-25
        • 2020-04-08
        • 2015-07-23
        • 2020-04-08
        • 2021-01-25
        相关资源
        最近更新 更多