2011-11-26 173 views
5

scikit-learn中的10 * 10交叉验证?

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

正确的方式在scikit学习10 * 10倍CV? (通过改变random_state到10个不同的数字)

因为我没有找到任何random_state参数在Stratified K-FoldK-Fold和从K-Fold单独总是为相同的数据相同。

如果ShuffleSplit是正确的,一个值得关注的是,提到

注:违背其他交叉验证策略,随机拆分不 保证所有的折叠会有所不同,虽然这仍是 很可能是相当大的数据集

对于10 * 10倍的CV,情况总是如此吗?

回答

9

我不确定10 * 10交叉验证是什么意思。您给出的ShuffleSplit配置将使您将10次调用估计器的拟合方法。如果你想要做10次

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

:如果您通过显式使用外循环或直接调用它在单一回路测试保留的数据,10%的100倍,如果你使用,而不是把这个10倍StratifiedKFold其中k = 10的可以随机播放的运行之间的数据集(这将导致总共100个电话到具有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) 
+0

谢谢,这正是我正在寻找的。顺便说一句,我在网页上的例子中看过很多次,有什么故事吗? – Flake

+4

你问的是错误的问题:) http://en.wikipedia.org/wiki/42_(Hitchhiker%27s_Guide_to_the_Galaxy)#Answer_to_the_Ultimate_Question_of_Life.2C_the_Universe.2C_and_Everything_.2842.29 – ogrisel

+0

我知道了!但忘了42是一个...... – Flake