В даний час я працюю з Python та Scikit, які навчаються для цілей класифікації, і читаючи GridSearch, я подумав, що це чудовий спосіб оптимізації моїх параметрів оцінювача для отримання найкращих результатів.
Моя методологія така:
- Розділити мої дані на навчання / тест.
- Використовуйте GridSearch з 5-кратною перехресною валідацією для підготовки та тестування моїх оцінювачів (Random Forest, Gradient Boost, SVC серед інших), щоб отримати найкращі оцінки з оптимальним поєднанням гіпер-параметрів.
- Потім я обчислюю показники для кожного з моїх оцінювачів, таких як Precision, Recall, FMeasure та Matthews Correlation Coefficient, використовуючи свій тестовий набір для прогнозування класифікацій та порівняння їх із фактичними мітками класів.
Саме на цьому етапі я бачу дивну поведінку і не знаю, як далі діяти. Чи беру я .best_estimator_ з GridSearch і використовую це як "оптимальний" вихід із пошуку в сітці та виконую прогнозування за допомогою цього оцінювача? Якщо я це роблю, я виявляю, що показники 3-го етапу зазвичай набагато нижчі, ніж якщо я просто тренуюсь на всіх даних тренувань і тестую на тестовому наборі. Або я просто приймаю вихідний об'єкт GridSearchCV як новий оцінювач ? Якщо я це роблю, я отримую кращі результати для моїх показників 3 стадії, але це здається дивним за допомогою об’єкта GridSearchCV замість призначеного класифікатора (наприклад, випадковий ліс) ...
EDIT: Отже, моє запитання полягає в тому, яка різниця між поверненим об’єктом GridSearchCV та атрибутом .best_estimator_? Яку з них слід використовувати для обчислення подальших показників? Чи можу я використовувати цей вихід як звичайний класифікатор (наприклад, використовуючи передбачення), або як я можу його використовувати?
refit=False
тодіclf.fit
не вийде з найкращим класифікатором?