7

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 个不同的数字)

因为我没有在or中找到任何random_state参数,并且对于相同的数据,分隔符总是相同的。Stratified K-FoldK-FoldK-Fold

如果ShuffleSplit是正确的,一个问题是它被提及

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

10*10 倍 CV 总是这样吗?

4

1 回答 1

10

我不确定你所说的 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 方法,每次调用 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)
于 2011-11-26T20:05:39.993 回答