Diagrama panorámico que explica los pasos clave de la búsqueda por cuadrículas GridSearchCV en machine learning, mostrando desde la creación del pipeline hasta la evaluación del modelo óptimo mediante validación cruzada y selección de hiperparámetros.

La búsqueda por cuadriculas GridSearchCV

GridSearchCV es una técnica que prueba todas las combinaciones posibles de hiperparámetros especificadas por el usuario. En lugar de hacer pruebas manuales, que pueden ser lentas e imprecisas, GridSearchCV automatiza este proceso asegurando una exploración completa y estructurada.

GridSearchCV: cómo optimizar hiperparámetros de forma eficiente en machine learning

Cuando se trabaja con modelos de machine learning, elegir los hiperparámetros adecuados es clave para conseguir un buen rendimiento. Aquí es donde GridSearchCV se convierte en una herramienta fundamental, ya que permite automatizar la búsqueda exhaustiva de la mejor combinación de parámetros.

Ventajas frente a la búsqueda manual

Optar por GridSearchCV en lugar de probar hiperparámetros manualmente ahorra tiempo y reduce errores humanos. Además, garantiza que se examinen todas las combinaciones potenciales, lo que incrementa las probabilidades de encontrar la configuración óptima del modelo sin dejar opciones sin explorar.

Entrenamiento múltiple del modelo

Una de las características esenciales de GridSearchCV es que entrena el modelo múltiples veces, una por cada combinación de hiperparámetros. Cada modelo se valida cuidadosamente para evaluar su rendimiento, lo que ofrece una visión clara de cuál configuración funciona mejor.

Selección de la mejor combinación

GridSearchCV determina la mejor combinación de hiperparámetros mediante métricas de evaluación predefinidas, como la precisión o la puntuación F1. Estas métricas se calculan en promedio a lo largo de varias particiones de datos, seleccionando la que ofrece el mejor rendimiento global.

Ayuda a evitar el sobreajuste

Aunque GridSearchCV no elimina por completo el riesgo de sobreajuste, contribuye a minimizarlo al emplear validación cruzada interna. De este modo, cada combinación de hiperparámetros se prueba con diferentes subconjuntos de datos, ofreciendo una estimación más realista del rendimiento ante datos no vistos.

Cuando es recomendable utilizar GridSearchCV

GridSearchCV es especialmente útil cuando el número de hiperparámetros es moderado y se desea obtener la mejor configuración posible mediante una búsqueda exhaustiva. Es ideal para proyectos donde la precisión del modelo es prioritaria y se cuenta con suficiente capacidad de cómputo.

Desventajas a considerar

El principal inconveniente de GridSearchCV es el alto consumo de recursos y tiempo, especialmente cuando se manejan muchos hiperparámetros o combinaciones. Cada configuración requiere entrenar y validar el modelo, lo que puede ser costoso computacionalmente.

Diferencias entre GridSearchCV y RandomizedSearchCV

Mientras que GridSearchCV explora todas las combinaciones posibles dentro de la cuadrícula definida, RandomizedSearchCV selecciona aleatoriamente un número limitado de combinaciones. Esto hace que RandomizedSearchCV sea más rápido en grandes espacios de búsqueda, aunque menos exhaustivo que GridSearchCV.

Validación cruzada interna

GridSearchCV integra la validación cruzada interna como parte de su proceso, lo que significa que no solo busca la mejor combinación de hiperparámetros, sino que también evalúa cada modelo de manera rigurosa utilizando varias particiones de los datos disponibles.

Ejemplo

from sklearn.pipeline import make_pipeline
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
import pandas as pd
from sklearn.svm import SVC
from sklearn.preprocessing import LabelEncoder
def getDatos():
    datos = pd.read_csv('https://archive.ics.uci.edu/ml/'
                 'machine-learning-databases'
                 '/breast-cancer-wisconsin/wdbc.data', header=None)
    X = datos.loc[:,2:].values             
    Y = datos.loc[:,1].values  
    return X,Y
def divisionDatos(X,Y):
    X_train, X_test, y_train, y_test = train_test_split(X, Y, 
                     test_size=0.20,
                     stratify=Y,
                     random_state=1)
    return X_train, X_test, y_train, y_test    

def transformacionEtiquetas(Y):
    labelEncoder = LabelEncoder()    
    y = labelEncoder.fit_transform(Y)   
    return y

def curvasBusquedaCuadriculas(estimador,X_train,y_train):
    pipeline =  make_pipeline(StandardScaler(),estimador) 
    rango_parametros= [0.0001, 0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0]
    set_parametros = [,
              ]
    gs = GridSearchCV(estimator=pipeline, 
                  param_grid=set_parametros , 
                  scoring='accuracy', 
                  cv=10,
                  n_jobs=1) 
     #Entrenamos el modelo con mejor rendimiento
    mo = gs.fit(X_train,y_train)    
    #Mejores parametros y la mejor precision del modelo con mejor rendimiento
    print('parametros optimos:' )
    print(mo.best_params_)
    print('Mejor precision encontrada:')
    print(mo.best_score_)
    #Con los datos de test estimamos el rendimiento del modelo    
    mejor_estimador=gs.best_estimator_
    mejor_estimador.fit(X_train,y_train)
    precision = mejor_estimador.score(X_test,y_test)    
    print('Mejor estimacion:')
    print(precision)
X,Y = getDatos()
Y = transformacionEtiquetas(Y)
X_train, X_test, y_train, y_test = divisionDatos(X,Y) 

curvasBusquedaCuadriculas(SVC(random_state=1),X_train,y_train)
parametros optimos:

Mejor precisión encontrada:

0.9846859903381642

Mejor estimación:

0.9736842105263158

Este código entrena un modelo de clasificación para detectar cáncer de mama usando el dataset "Breast Cancer Wisconsin", y busca la mejor combinación de hiperparámetros para una máquina de vectores de soporte (SVM) mediante GridSearchCV, utilizando también un pipeline y validación cruzada.

Paso a paso explicado:

  1. Carga de datos (getDatos)
    • Se descarga un dataset de diagnóstico de cáncer de mama.
    • Se separan las características (X) de las etiquetas de clase (Y), que indican si es benigno o maligno.
  2. Transformación de etiquetas (transformacionEtiquetas)
    • Se convierten las etiquetas de texto en valores numéricos (0 o 1) usando LabelEncoder, porque los modelos necesitan números, no texto.
  3. División de datos (divisionDatos)
    • Se divide el dataset en entrenamiento (80%) y prueba (20%).
    • Así nos aseguramos de tener datos no vistos para evaluar el modelo al final.
  4. Creación del pipeline (curvasBusquedaCuadriculas)
    • Se crea un pipeline que estandariza los datos (StandardScaler) antes de pasarlos al modelo SVM.
    • Esto es importante porque SVM necesita que los datos estén escalados para funcionar bien.
  5. Definición de la cuadrícula de búsqueda
    • Se define una cuadrícula de hiperparámetros que se quieren probar:
      • Parámetro C (regularización).
      • Parámetro gamma (para el kernel RBF).
      • Tipo de kernel: lineal o RBF.
    • Estas son combinaciones que el modelo probará automáticamente.
  6. Búsqueda con GridSearchCV
    • Se usa GridSearchCV para probar todas las combinaciones de la cuadrícula.
    • Se aplica validación cruzada de 10 particiones (cv=10) para asegurar que cada combinación se evalúe de manera fiable.
  7. Selección de los mejores hiperparámetros
    • Al finalizar, imprime los mejores parámetros encontrados y la mejor precisión media alcanzada durante la validación cruzada.
  8. Evaluación final
    • Con la mejor combinación de parámetros encontrada, se vuelve a entrenar el modelo completo y se evalúa sobre el conjunto de prueba X_test, y_test para estimar su rendimiento real.

Conceptos clave del código (resumen):

  • Pipeline: Estándar + modelo SVM en un solo flujo automático.
  • GridSearchCV: Prueba todas las combinaciones de hiperparámetros posibles.
  • Validación cruzada: Evalúa cada combinación con 10 particiones diferentes de datos para evitar sobreajuste.
  • Selección de hiperparámetros óptimos: Elige los que dan mejor precisión promedio.
  • Evaluación final: Se comprueba que el modelo funciona bien también en los datos de prueba.

Conclusión

GridSearchCV es una herramienta esencial para cualquier proyecto de machine learning que busque maximizar el rendimiento del modelo mediante la optimización de hiperparámetros. Aunque requiere una inversión de tiempo y recursos, sus beneficios en términos de precisión y fiabilidad del modelo hacen que valga la pena su uso, especialmente en escenarios donde cada punto porcentual de rendimiento cuenta.