【问题标题】:How to use shuffle in KFold in scikit_learn如何在 scikit_learn 的 KFold 中使用 shuffle
【发布时间】:2012-08-27 13:22:36
【问题描述】:

我正在使用 scikit-learn 提供的 KFold 函数运行 10 倍 CV,以便选择一些内核参数。我正在实施这个(grid_search)程序:

1-pick up a selection of parameters
2-generate a svm
3-generate a KFold
4-get the data that correspons to training/cv_test
5-train the model (clf.fit)
6-classify with the cv_testdata
7-calculate the cv-error 
8-repeat 1-7
9-When ready pick the parameters that provide the lowest average(cv-error)

如果我在 KFold 生成中不使用 shuffle,如果我重复相同的运行并且“最佳结果”是可重复的,我会得到非常相同的平均结果(cv_errors)。 如果我使用随机播放,如果我多次重复相同的运行并且“最佳值”不可重复,我会得到不同的平均值(cv-errors)。 我可以理解,对于每个 KFold 通道,我应该得到不同的 cv_errors,但最终的平均值应该是相同的。 带 shuffle 的 KFold 是如何工作的? 每次调用 KFold 时,它都会打乱我的索引并生成训练/测试数据。它如何为“培训/测试”选择不同的折叠?它是否有随机方式来选择不同的折叠进行训练/测试? 任何情况下它对“洗牌”和不适合的情况有什么好处??

【问题讨论】:

    标签: python-2.7 scikit-learn


    【解决方案1】:

    如果 shuffle 为 True,则首先对整个数据进行 shuffle,然后拆分为 K-Folds。对于可重复的行为,您可以将 random_state 设置为例如整数种子 (random_state=0)。 如果您的参数取决于改组,这意味着您的参数选择非常不稳定。可能您的训练数据很少,或者您习惯于很少折叠(例如 2 或 3)。

    如果您的数据以某种方式按类排序,则“shuffle”主要有用,因为每个折叠可能只包含一个类的样本(特别是对于随机梯度体面分类器排序的类是危险的)。 对于其他分类器,它应该没有区别。如果洗牌非常不稳定,您的参数选择很可能是无信息的(也就是垃圾)。

    【讨论】:

    • 感谢 Andreas,它让我们更深入地了解了如何使用/不使用 shuffle。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2020-04-04
    • 1970-01-01
    • 2016-04-28
    • 2020-06-14
    • 2018-06-02
    相关资源
    最近更新 更多