【问题标题】:10*10 fold cross validation in scikit-learn?scikit-learn 中的 10*10 折交叉验证?
【发布时间】:2012-01-07 00:54:41
【问题描述】:

class sklearn.cross_validation.ShuffleSplit(
    n, 
    n_iterations=10, 
    test_fraction=0.10000000000000001, 
    indices=True, 
    random_state=None
)

scikit-learn 中 10*10fold CV 的正确方法? (通过将 random_state 更改为 10 个不同的数字)

因为我在Stratified K-FoldK-Fold 中没有找到任何random_state 参数,而与K-Fold 分开的参数对于相同的数据总是相同的。

如果ShuffleSplit 是对的,一个问题是它被提及了

注意:与其他交叉验证策略相反,随机拆分不会 保证所有折叠都会不同,尽管这仍然是 很可能用于大型数据集

10*10 倍 CV 总是这样吗?

【问题讨论】:

    标签: python machine-learning scikits scikit-learn


    【解决方案1】:

    我不确定你所说的 10*10 交叉验证是什么意思。您提供的 ShuffleSplit 配置将使您调用估计器的 fit 方法 10 次。如果您通过显式使用外部循环调用它 10 次,或者直接调用它 100 次,如果您使用,则保留 10% 的数据用于在单个循环中进行测试:

    >>> ss = ShuffleSplit(X.shape[0], n_iterations=100, test_fraction=0.1,
    ...     random_state=42)
    

    如果您想在 k=10 的情况下运行 10 次 StratifiedKFold,您可以在运行之间打乱数据集(这将导致总共 100 次调用 fit 方法,每次调用 90% 训练/10% 测试拆分适合):

    >>> from sklearn.utils import shuffle
    >>> from sklearn.cross_validation import StratifiedKFold, cross_val_score
    >>> for i in range(10):
    ...    X, y = shuffle(X_orig, y_orig, random_state=i)
    ...    skf = StratifiedKFold(y, 10)
    ...    print cross_val_score(clf, X, y, cv=skf)
    

    【讨论】:

    • 谢谢,这正是我想要的。顺便说一句,我在网页上的示例中看到了 42 多次,有什么故事吗?
    • 你问错问题了 :) en.wikipedia.org/wiki/…
    • 更严重的是,在示例和测试中,我们希望获得可重现的结果,因此我们将 PRNG 种子固定为任意值。随意调整该值,结果应该仍然“看起来不错”,但有时会略有不同(某些算法具有非凸目标函数和几个良好的局部最优值)。
    • @ogrisel 嗨。如果我使用 StratifiedShuffleSplit,我还需要外循环吗?我想在管道内做一个 10x10 SSS。
    猜你喜欢
    • 2017-03-03
    • 2011-11-29
    • 2020-02-10
    • 2013-08-16
    • 2012-05-11
    • 2021-06-03
    • 2016-04-25
    • 2021-01-25
    • 2014-05-08
    相关资源
    最近更新 更多