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?
fuente
refit=False
,clf.fit
¿no se hará con el mejor clasificador?GridSearchCV le permite combinar un estimador con un preámbulo de búsqueda de cuadrícula para ajustar los hiperparámetros. El método selecciona el parámetro óptimo de la búsqueda de cuadrícula y lo usa con el estimador seleccionado por el usuario. GridSearchCV hereda los métodos del clasificador, por lo que sí, puede usar los métodos .score, .predict, etc. directamente a través de la interfaz GridSearchCV. Si desea extraer los mejores hiperparámetros identificados por la búsqueda de cuadrícula, puede usar .best_params_ y esto devolverá el mejor hiperparámetro. Luego puede pasar este hiperparámetro a su estimador por separado.
Usar .predict directamente producirá los mismos resultados que obtener el mejor hiperparámetro a través de .best_param_ y luego usarlo en su modelo. Al comprender el funcionamiento subyacente de la búsqueda en cuadrícula, podemos ver por qué este es el caso.
Búsqueda de cuadrícula
Esta técnica se utiliza para encontrar los parámetros óptimos para usar con un algoritmo. Este NO es el peso ni el modelo, esos se aprenden usando los datos. Obviamente, esto es bastante confuso, así que distinguiré entre estos parámetros, llamando a uno hiperparámetros.
Los hiperparámetros son como la k en k-vecinos más cercanos (k-NN). k-NN requiere que el usuario seleccione qué vecino considerar al calcular la distancia. Luego, el algoritmo ajusta un parámetro, un umbral, para ver si un nuevo ejemplo se encuentra dentro de la distribución aprendida, esto se hace con los datos.
¿Cómo elegimos k?
Algunas personas simplemente siguen recomendaciones basadas en estudios anteriores del tipo de datos. Otros usan la búsqueda de cuadrícula. Este método podrá determinar mejor qué k es el óptimo para usar con sus datos.
¿Como funciona?
¡Esto va en contra de los principios de no usar datos de prueba!
El valor del hiperparámetro seleccionado es el que logra el rendimiento promedio más alto en los n pliegues. Una vez que esté satisfecho con su algoritmo, puede probarlo en el conjunto de pruebas. Si va directamente al conjunto de prueba, entonces corre el riesgo de sobreajuste.
fuente