В настоящее время я работаю с 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
не будет сделано с лучшим классификатором?