Как использовать перемешивание в KFold в scikit_learn

Я запускаю 10-кратное CV, используя функцию KFold, предоставленную scikit-learn, чтобы выбрать некоторые параметры ядра. Я реализую эту процедуру (grid_search):

1-pick up a selection of parameters
2-generate a svm
3-generate a KFold
4-get the data that correspons to training/cv_test
5-train the model (clf.fit)
6-classify with the cv_testdata
7-calculate the cv-error 
8-repeat 1-7
9-When ready pick the parameters that provide the lowest average(cv-error)

Если я не использую перемешивание в генерации KFold, я получаю почти такие же результаты для среднего (cv_errors), если я повторяю одни и те же прогоны, и «лучшие результаты» повторяются. Если я использую перетасовку, я получаю разные значения для среднего (cv-ошибки), если я повторяю один и тот же запуск несколько раз, а «лучшие значения» не повторяются. Я понимаю, что должен получать разные значения cv_errors для каждого прохода KFold, но окончательное среднее значение должно быть одинаковым. Как на самом деле работает KFold с перемешиванием? Каждый раз, когда вызывается KFold, он перемешивает мои индексы и генерирует обучающие/тестовые данные. Как он выбирает разные складки для «обучения/тестирования»? Есть ли случайный способ выбора разных складок для обучения/тестирования? Любые ситуации, в которых выгодно использовать "перетасовку", и ситуации, в которых это не так??


person andreSmol    schedule 02.09.2012    source источник


Ответы (1)


Если shuffle равно True, все данные сначала перемешиваются, а затем разбиваются на K-складки. Для повторяющегося поведения вы можете установить random_state, например, на целочисленное начальное число (random_state=0). Если ваши параметры зависят от перетасовки, это означает, что ваш выбор параметров очень нестабилен. Вероятно, у вас очень мало тренировочных данных или вы привыкли к небольшим фолдам (например, 2 или 3).

«Перетасовка» в основном полезна, если ваши данные каким-то образом отсортированы по классам, потому что тогда каждая складка может содержать только выборки из одного класса (в частности, для стохастического градиента приличные классификаторы, отсортированные по классам, опасны). Для других классификаторов это не должно иметь значения. Если перетасовка очень нестабильна, ваш выбор параметров, скорее всего, будет неинформативным (также известным как мусор).

person Community    schedule 02.09.2012
comment
Спасибо, Андреас, это дало некоторое представление о том, как использовать/не использовать перемешивание. - person andreSmol; 03.09.2012