В настоящее время я работаю с Python и Scikit для целей классификации, и немного изучаю GridSearch. Я подумал, что это отличный способ оптимизировать параметры моей оценки, чтобы получить наилучшие результаты.
Моя методология такая:
- Разделить мои данные на обучение / тестирование.
- Используйте GridSearch с 5Fold Cross валидацией для обучения и проверки моих оценок (случайный лес, повышение градиента, SVC и др.), Чтобы получить лучшие оценки с оптимальной комбинацией гиперпараметров.
- Затем я вычисляю метрики для каждого из моих оценщиков, таких как Precision, Recall, FMeasure и Matthews Correlation Coe factor, используя свой набор тестов для прогнозирования классификаций и сравнения их с фактическими метками классов.
Именно на этом этапе я вижу странное поведение и не знаю, как поступить. Должен ли я взять .best_estimator_ из GridSearch и использовать его в качестве «оптимального» результата поиска по сетке , и выполнить прогнозирование с помощью этого оценщика? Если я сделаю это, то обнаружу, что показатели этапа 3 обычно намного ниже, чем если бы я просто тренировался по всем данным обучения и тестировал на тестовом наборе. Или мне просто взять выходной объект GridSearchCV в качестве нового оценщика ? Если я сделаю это, я получу лучшие оценки для моих показателей 3-го этапа, но это кажется странным, если использовать объект GridSearchCV вместо намеченного классификатора (например, случайный лес) ...
РЕДАКТИРОВАТЬ: Итак, мой вопрос, в чем разница между возвращенным объектом GridSearchCV и атрибутом .best_estimator_? Какой из них я должен использовать для расчета дальнейших показателей? Могу ли я использовать этот вывод как обычный классификатор (например, с использованием предиката), или как мне его использовать?
источник
refit=False
тоclf.fit
не будет сделано с лучшим классификатором?GridSearchCV позволяет комбинировать оценщик с преамбулой поиска в сетке для настройки гиперпараметров. Метод выбирает оптимальный параметр из сетки поиска и использует его с оценкой, выбранной пользователем. GridSearchCV наследует методы от классификатора, поэтому да, вы можете использовать методы .score, .predict и т. Д. Непосредственно через интерфейс GridSearchCV. Если вы хотите извлечь лучшие гиперпараметры, определенные в поиске по сетке, вы можете использовать .best_params_, и это вернет лучший гиперпараметр. Затем вы можете передать этот гиперпараметр своему оценщику отдельно.
Непосредственное использование .predict даст те же результаты, что и получение лучшего гиперпараметра через .best_param_, а затем использование его в вашей модели. Понимая основные принципы поиска по сетке, мы можем понять, почему это так.
Grid Search
Этот метод используется, чтобы найти оптимальные параметры для использования с алгоритмом. Это НЕ веса или модель, они изучаются с использованием данных. Это, очевидно, довольно запутанно, поэтому я буду различать эти параметры, вызывая один гиперпараметр.
Гиперпараметры похожи на k в k-ближайших соседях (k-NN). k-NN требует от пользователя выбора соседа, который необходимо учитывать при расчете расстояния. Затем алгоритм настраивает параметр, порог, чтобы увидеть, попадает ли новый пример в изученное распределение, это делается с данными.
Как мы выбираем k?
Некоторые люди просто идут с рекомендациями, основанными на прошлых исследованиях типа данных. Другие используют поиск по сетке. Этот метод сможет наилучшим образом определить, какой k является оптимальным для ваших данных.
Как это работает?
Это противоречит принципам не использовать тестовые данные!
Выбранное значение гиперпараметра - это то, которое достигает наивысшей средней производительности по n-кратным показателям. Как только вы довольны своим алгоритмом, вы можете проверить его на тестовом наборе. Если вы идете прямо к испытательному комплексу, то вы рискуете перегрузить.
источник