#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
наборов тестов фактически является набором проверки, используемым для проверки модели. Я собираюсь отредактировать свой ответ, чтобы он был однозначным. Спасибо.