Как запустить перекрестную проверку scikit с несколькими классификаторами на одних и тех же складках

В настоящее время я работаю над исследованием сравнения производительности классификаторов. Чтобы оценить эти характеристики, я вычисляю точность, площадь под кривой и квадрат ошибки для каждого классификатора во всех имеющихся у меня наборах данных. Кроме того, мне нужно выполнить настройку параметров для некоторых классификаторов, чтобы выбрать лучшие параметры с точки зрения точности, поэтому требуется проверочный тест (я выбрал 20% набора данных).

Мне сказали, что для того, чтобы сделать это сравнение еще более содержательным, перекрестная проверка должна выполняться на одних и тех же наборах для каждого классификатора.

Итак, в принципе, есть ли способ использовать метод cross_val_score, чтобы он всегда работал на одних и тех же сгибах для всех классификаторов, или мне нужно переписать с нуля какой-то код, который может выполнять эту работу?

Заранее спасибо.


person Anil Narassiguin    schedule 12.05.2015    source источник
comment
Cv по умолчанию является StratifiedKFold для классификации с перемешиванием = False. Так у вас должны получиться воспроизводимые складки.   -  person Andreas Mueller    schedule 13.05.2015


Ответы (1)


cross_val_score принимает параметр cv, который представляет объект перекрестной проверки. вы хотите использовать. Вероятно, вам нужен StratifiedKFold, который принимает параметр shuffle, который указывает, хотите ли вы перетасовать данные перед выполнением перекрестной проверки.

cv также может быть int, и в этом случае объект StratifiedKFold или KFold будет создан автоматически с K = cv.

Как видно из документации, shuffle по умолчанию равно False, поэтому по умолчанию он уже будет выполняться на одних и тех же складках для всех ваших классификаторов.

Вы можете проверить это, дважды запустив его на одном и том же классификаторе, чтобы убедиться (вы должны получить точно такие же результаты).

Вы можете указать это самостоятельно следующим образом:

your_cv = StratifiedKFold(your_y, n_folds=10, shuffle=True) # or shuffle=False
cross_val_score(your_estimator, your_X, y=your_y, cv=your_cv)
person IVlad    schedule 12.05.2015