Как cross_val_score, cross_val_predict и cross_val_validate заботятся об обучении, тестировании и проверке?

#python #scikit-learn

#python #scikit-learn

Вопрос:

Насколько я понимаю, cross_val_score, cross_val_predict, and cross_val_validate можно использовать K-fold validation . Это означает, что обучающий набор итеративно используется частично как обучающий набор и набор тестов. Однако я не встречал никакой информации о том, как выполняется проверка. Похоже, что данные не разделены на три набора — обучающие, проверочные и тестовые наборы. Как cross_val_score, cross_val_predict и cross_val_validate заботятся об обучении, проверке и тестировании?

Ответ №1:

cross_val_score используется для оценки точности модели более надежным способом, чем при обычном разделении обучающего теста. Он выполняет ту же работу, но повторяет ее много раз. Эти «повторения» можно выполнять разными способами: CV, повторное CV, LOO и т. Д. См. 3.1.2 в Руководстве пользователя sklearn

В случае, если вам нужно перекрестно проверять гиперпараметры, вам следует выполнить вложенную перекрестную проверку с одним внешним циклом для оценки точности модели и одним внутренним циклом для получения наилучших параметров. Этот внутренний цикл CV разделит набор поездов внешнего цикла на наборы поездов и проверки. Процедура должна выглядеть примерно так:

 Outer loop:
    Split train - test
    Inner loop:
       Fix parameters      
       Split train in train2 - validation
       Train with train2 set
       Score with validation set
       Repeat Inner loop for all parameters
   Train with train set and best parameters from inner loop
   Score with test 
   Repeat outer loop until CV ends
   Return test scores
  

К счастью, sklearn all позволяет вложить GridSearchCV в cross_val_score.

 validation = GridSearchCV(estimator, param_grid)
score = cross_val_score(validation, X, y)
  

Ответ №2:

cross_val_score заботится о проверке, поскольку процесс разбивает набор данных на K части (по умолчанию 3) и выполняет время подгонки и проверки K . В документации Sklearn говорится о разделении набора данных на обучающий / тестовый набор, но не поймите неправильно название. Этот набор тестов на самом деле является набором проверки.

С помощью cross_val_score вы можете настроить гиперпараметры модели и получить наилучшую конфигурацию.

Поэтому общая процедура должна состоять в том, чтобы разделить (самостоятельно) набор данных на обучающий набор и тестовый набор.

Используйте обучающий набор для перекрестной проверки (вызова cross_val_score ), чтобы настроить гиперпараметры модели и получить наилучшую конфигурацию.

Затем используйте набор тестов для оценки модели. Обратите внимание, что набор тестов должен быть достаточно большим и репрезентативным для совокупности, чтобы получить объективную оценку ошибки обобщения.

Комментарии:

1. Хотя это в значительной степени вопрос терминологии, возможно, перекрестная проверка действительно заботится о проверке, но не о тестировании — в конце концов, это называется перекрестной проверкой , а не перекрестным тестированием…

2. Я согласен с @desertnaut здесь. Я хотел бы знать, почему, по вашему мнению, cross_val_score не заботится о проверке… Эта операция разделения набора данных в K сгибов точно соответствует тому, что называется «валидацией» в ML.

3. Действительно, это вопрос терминологии. Как sklearn называет продукты процесса разделения в KFold? Обучайте / тестируйте наборы. Как мы называем фазу, на которой мы настраиваем параметры модели и оцениваем ее способность обобщать на независимый набор? Проверка. Как мы называем этап, на котором мы оцениваем производительность полностью заданной модели? Тестирование. Итак, в некотором смысле вы оба определенно правы. cross_val_score выполняет перекрестную проверку, где каждый из K наборов тестов фактически является набором проверки, используемым для проверки модели. Я собираюсь отредактировать свой ответ, чтобы он был однозначным. Спасибо.