在scikit-learn中进行10 * 10倍交叉验证?

时间:2011-11-26 19:36:33

标签: python machine-learning scikits scikit-learn

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

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

因为我在random_stateStratified K-Fold中未找到任何K-Fold参数,且K-Fold的单独参数对于相同的数据始终相同。

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

  

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

10 * 10折CV总是这样吗?

1 个答案:

答案 0 :(得分:10)

我不确定10 * 10交叉验证是什么意思。您提供的ShuffleSplit配置将使您调用估算器的拟合方法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)