Actualmente estoy trabajando con Python y Scikit para fines de clasificación, y leyendo un poco sobre GridSearch, pensé que esta era una excelente manera de optimizar los parámetros de mi estimador para obtener los mejores resultados.
Mi metodología es esta:
- Dividir mis datos en entrenamiento / prueba.
- Use GridSearch con validación cruzada 5Fold para entrenar y probar mis estimadores (Random Forest, Gradient Boost, SVC entre otros) para obtener los mejores estimadores con la combinación óptima de hiperparámetros.
- Luego calculo métricas en cada uno de mis estimadores, como Precisión, Recuperación, Medición de FM y Coeficiente de correlación Matthews, utilizando mi conjunto de pruebas para predecir las clasificaciones y compararlas con las etiquetas de clase reales.
Es en esta etapa que veo un comportamiento extraño y no estoy seguro de cómo proceder. ¿Tomo el .best_estimator_ de GridSearch y lo uso como la salida 'óptima' de la búsqueda de cuadrícula , y realizo la predicción usando este estimador? Si hago esto, encuentro que las métricas de la etapa 3 son generalmente mucho más bajas que si simplemente entreno en todos los datos de entrenamiento y pruebo en el conjunto de pruebas. ¿O simplemente tomo el objeto GridSearchCV de salida como el nuevo estimador ? Si hago esto, obtengo mejores puntajes para mis métricas de etapa 3, pero parece extraño usar un objeto GridSearchCV en lugar del clasificador previsto (por ejemplo, un bosque aleatorio) ...
EDITAR: Entonces, mi pregunta es ¿cuál es la diferencia entre el objeto GridSearchCV devuelto y el atributo .best_estimator_? ¿Cuál de estos debo usar para calcular más métricas? ¿Puedo usar esta salida como un clasificador regular (p. Ej., Usando predic), o si no, cómo debo usarla?
refit=False
,clf.fit
¿no se hará con el mejor clasificador?