10 * 10 кратная перекрестная проверка в scikit-learn? - PullRequest
7 голосов
/ 26 ноября 2011

Is

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

правильный путь для 10 * 10-кратного резюме в scikit-learn? (Изменяя random_state на 10 разных чисел)

Поскольку я не нашел ни одного параметра random_state в Stratified K-Fold или K-Fold, а отдельный от K-Fold всегда идентичен для одних и тех же данных.

Если ShuffleSplit является правильным, одна проблема заключается в том, что он упоминается

Примечание: в отличие от других стратегий перекрестной проверки, случайные разбиения не гарантировать, что все сгибы будут разными, хотя это очень вероятно для значительных наборов данных

Это всегда так для 10 * 10 кратного резюме?

1 Ответ

10 голосов
/ 27 ноября 2011

Я не уверен, что вы имеете в виду под перекрестной проверкой 10 * 10. Предоставленная вами конфигурация ShuffleSplit заставит вас вызвать метод подбора оценщика 10 раз. Если вы вызываете это 10 раз, явно используя внешний цикл, или напрямую вызываете его 100 раз с 10% данных, зарезервированных для тестирования в одном цикле, если вы используете вместо этого:

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

Если вы хотите сделать 10 прогонов StratifiedKFold с k = 10, вы можете перетасовать набор данных между прогонами (что приведет к 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)
...