Grid Search en Python

El Grid Search es una técnica utilizada para encontrar los mejores hiperparámetros para un modelo de aprendizaje automático. Se realiza una búsqueda exhaustiva a través de una cuadrícula de combinaciones predefinidas de hiperparámetros y se evalúa el rendimiento del modelo utilizando validación cruzada para determinar cuáles son los mejores valores de hiperparámetros.

A continuación, te proporciono un ejemplo de cómo realizar una búsqueda en cuadrícula (Grid Search) en Python utilizando la biblioteca scikit-learn:

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris

# Cargamos un conjunto de datos de ejemplo (Iris)
iris = load_iris()
X = iris.data
y = iris.target

# Definimos los hiperparámetros que queremos ajustar
parametros = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf', 'poly'], 'gamma': [0.1, 1, 'auto']}

# Creamos un clasificador de Support Vector Machine (SVM)
svm = SVC()

# Creamos un objeto GridSearchCV para buscar los mejores hiperparámetros
grid_search = GridSearchCV(svm, parametros, cv=5)

# Ajustamos el modelo a los datos
grid_search.fit(X, y)

# Mostramos los mejores hiperparámetros encontrados
print("Mejores hiperparámetros:", grid_search.best_params_)

# Mostramos la mejor puntuación de validación cruzada
print("Mejor puntuación de validación cruzada:", grid_search.best_score_)

Pasos a seguir para usar Grid search en Python


Aquí tienes algunas mejores prácticas en la implementación de una búsqueda en cuadrícula (Grid Search) en Python:

  • Entendimiento del Problema: Antes de comenzar una búsqueda en cuadrícula, comprende bien el problema que estás abordando y cómo los hiperparámetros pueden afectar el rendimiento del modelo.
  • Elección de Hiperparámetros Relevantes: Selecciona cuidadosamente los hiperparámetros que deseas ajustar. No todos los hiperparámetros de un modelo son igualmente importantes, y ajustar demasiados puede aumentar el tiempo de entrenamiento sin mejorar significativamente el rendimiento.
  • Definición de la Cuadrícula de Hiperparámetros: Define una cuadrícula de valores que deseas explorar para cada hiperparámetro. Esto puede hacerse manualmente o utilizando técnicas como la búsqueda aleatoria (Random Search).
  • División de los Datos: Divide tus datos en conjuntos de entrenamiento, validación y prueba. La validación se utiliza para evaluar el rendimiento de diferentes combinaciones de hiperparámetros durante la búsqueda en cuadrícula.
  • Uso de Validación Cruzada: Utiliza validación cruzada (cross-validation) para evaluar las combinaciones de hiperparámetros de manera más robusta y evitar el sobreajuste.
  • Elección de la Métrica de Evaluación: Selecciona una métrica adecuada para evaluar el rendimiento del modelo. Esto depende del tipo de problema, por ejemplo, precisión para problemas de clasificación o error cuadrático medio para problemas de regresión.
  • Manejo de Recursos: Considera el tiempo y los recursos disponibles. Una búsqueda en cuadrícula exhaustiva puede ser costosa en términos de tiempo de cálculo. Ajusta la complejidad de la búsqueda según tus recursos.
  • Registros y Documentación: Lleva un registro de los resultados de la búsqueda en cuadrícula, incluidos los hiperparámetros utilizados y las métricas de evaluación. Esto te ayudará a comprender y documentar tu proceso.
  • Visualización de Resultados: Visualiza los resultados de la búsqueda en cuadrícula para comprender mejor cómo los hiperparámetros afectan el rendimiento del modelo.
  • Generalización: Una vez que hayas encontrado los mejores hiperparámetros en tu conjunto de datos de validación, evalúa el modelo final en un conjunto de prueba completamente independiente para medir su rendimiento en datos no vistos.
  • Aprendizaje Continuo: La búsqueda en cuadrícula no es un proceso único. A medida que obtengas más datos o cambien tus necesidades, es posible que debas realizar nuevas búsquedas en cuadrícula.
  • Exploración de Métodos Avanzados: Considera la exploración de métodos avanzados como la búsqueda aleatoria, la optimización bayesiana o la búsqueda evolutiva si la búsqueda en cuadrícula convencional no es suficiente.

Recuerda que la elección adecuada de hiperparámetros puede tener un gran impacto en el rendimiento de tus modelos de aprendizaje automático, por lo que la búsqueda en cuadrícula es una técnica valiosa para optimizar tus modelos.


Uso de parámetros predeterminados

El uso de parámetros predeterminados en una búsqueda de cuadrícula (grid search) en Python generalmente se refiere a la configuración de una cuadrícula de hiperparámetros que incluye los valores predeterminados de un estimador (modelo). Esto te permite realizar una búsqueda exhaustiva de hiperparámetros que incluye los valores predeterminados del modelo junto con otras combinaciones de hiperparámetros.

Aquí tienes un ejemplo de cómo realizar una búsqueda de cuadrícula con parámetros predeterminados utilizando GridSearchCV de scikit-learn:

from sklearn.datasets import load_iris
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

# Cargar el conjunto de datos
iris = load_iris()
X = iris.data
y = iris.target

# Crear el estimador (modelo) con parámetros predeterminados
estimador = SVC()

# Definir la cuadrícula de hiperparámetros a buscar
param_grid = {
    'C': [1, 10, 100],
    'kernel': ['linear', 'rbf', 'poly'],
    'gamma': ['scale', 'auto'],
}

# Realizar la búsqueda de cuadrícula con validación cruzada
grid_search = GridSearchCV(estimador, param_grid, cv=5)
grid_search.fit(X, y)

# Obtener los mejores hiperparámetros y el mejor estimador
best_params = grid_search.best_params_
best_estimator = grid_search.best_estimator_

print("Mejores hiperparámetros:", best_params)
print("Mejor estimador:", best_estimator)

En este ejemplo:

  • Se carga el conjunto de datos Iris.
  • Se crea un estimador (modelo) SVC (Support Vector Classifier) con parámetros predeterminados. El objetivo es incluir estos valores predeterminados en la búsqueda de cuadrícula junto con otras combinaciones de hiperparámetros.
  • Se define una cuadrícula de hiperparámetros param_grid que incluye diferentes valores de C, kernel y gamma.
  • Se realiza la búsqueda de cuadrícula (GridSearchCV) utilizando el estimador y la cuadrícula de hiperparámetros definidos.
  • Se obtienen los mejores hiperparámetros y el mejor estimador a partir de los resultados de la búsqueda de cuadrícula.

Es importante destacar que, en este ejemplo, los valores predeterminados del estimador (SVC) están incluidos en la búsqueda de cuadrícula junto con otras opciones. Esto te permite encontrar la mejor combinación de hiperparámetros, incluido el caso en el que los valores predeterminados son los mejores para tu conjunto de datos.

Recuerda que el uso de parámetros predeterminados en la búsqueda de cuadrícula puede ser útil para confirmar si los valores predeterminados son óptimos para tu problema o si existen combinaciones de hiperparámetros que puedan mejorar el rendimiento del modelo.


Implementación de búsqueda en cuadrícula

La implementación de una búsqueda en cuadrícula (Grid Search) en Python generalmente se realiza utilizando la biblioteca scikit-learn, que proporciona una clase llamada GridSearchCV para realizar esta tarea. La búsqueda en cuadrícula es una técnica que te permite encontrar los mejores hiperparámetros para un modelo de aprendizaje automático a partir de un conjunto de opciones predefinidas.

Aquí tienes un ejemplo de cómo realizar una búsqueda en cuadrícula utilizando GridSearchCV:

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Cargar el conjunto de datos
iris = load_iris()
X = iris.data
y = iris.target

# Dividir el conjunto de datos en entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Definir el modelo que deseas ajustar (en este caso, SVM con kernel lineal)
model = SVC()

# Definir la cuadrícula de hiperparámetros a explorar
param_grid = {
    'C': [0.1, 1, 10],
    'kernel': ['linear', 'rbf', 'poly'],
    'gamma': [0.001, 0.01, 0.1, 'scale']
}

# Crear el objeto GridSearchCV
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, verbose=2)

# Ajustar el modelo a los datos de entrenamiento
grid_search.fit(X_train, y_train)

# Obtener los mejores hiperparámetros y el mejor estimador
best_params = grid_search.best_params_
best_estimator = grid_search.best_estimator_

print("Mejores hiperparámetros:", best_params)
print("Mejor estimador:", best_estimator)

# Evaluar el modelo en los datos de prueba
accuracy = best_estimator.score(X_test, y_test)
print("Exactitud en datos de prueba:", accuracy)

En este ejemplo:

  • Cargamos el conjunto de datos Iris y lo dividimos en conjuntos de entrenamiento y prueba.
  • Definimos el modelo que deseamos ajustar, que es una SVM (Support Vector Machine) con kernel lineal en este caso.
  • Definimos una cuadrícula de hiperparámetros param_grid que contiene diferentes valores para C, kernel y gamma.
  • Creamos un objeto GridSearchCV, especificando el modelo, la cuadrícula de hiperparámetros, el número de divisiones en la validación cruzada (cv), y si deseamos que proporcione información detallada durante la búsqueda.
  • Ajustamos el modelo a los datos de entrenamiento utilizando fit.
  • Obtenemos los mejores hiperparámetros y el mejor estimador utilizando best_params_ y best_estimator_.
  • Evaluamos el modelo en los datos de prueba para medir su rendimiento.

Este es solo un ejemplo básico de cómo realizar una búsqueda en cuadrícula. Puedes personalizar la cuadrícula de hiperparámetros y el modelo según tus necesidades específicas. La búsqueda en cuadrícula es útil para encontrar la combinación óptima de hiperparámetros para tu modelo de aprendizaje automático.


Resultados explicados

los resultados del ejemplo anterior están relacionados con la búsqueda en cuadrícula de hiperparámetros y la evaluación del modelo de Support Vector Machine (SVM) en el conjunto de datos Iris. Aquí está el análisis de los resultados:

Mejores Hiperparámetros

  • C: El valor óptimo para el hiperparámetro de regularización C fue encontrado como 1. Esto significa que el modelo SVM tiene un término de regularización moderado, lo que controla la influencia de los errores de clasificación en el proceso de entrenamiento.
  • kernel: El kernel lineal se seleccionó como el mejor kernel para este problema. Esto sugiere que un SVM con un kernel lineal es la mejor elección para separar las clases en el conjunto de datos Iris.
  • gamma: El valor de gamma óptimo fue encontrado como ‘scale’, que es una opción predeterminada en scikit-learn. Esto controla el coeficiente de kernel en las funciones de kernel ‘rbf’, ‘poly’ y ‘sigmoid’.

Mejor Estimador

El «mejor estimador» se refiere al modelo SVM entrenado con los mejores hiperparámetros encontrados durante la búsqueda en cuadrícula. Este modelo es el que se considera óptimo para el conjunto de datos Iris en función de los hiperparámetros seleccionados.

Exactitud en Datos de Prueba

  • Después de encontrar los mejores hiperparámetros y entrenar el modelo con esos valores óptimos, evaluamos su rendimiento en un conjunto de datos de prueba que no se utilizó durante el entrenamiento. La «exactitud en datos de prueba» mide la proporción de predicciones correctas realizadas por el modelo en el conjunto de datos de prueba.
  • En tu caso, el valor de la exactitud en datos de prueba se calculó y se muestra como un número entre 0 y 1. Un valor cercano a 1 indica un buen rendimiento del modelo en la clasificación de las muestras de prueba.
  • En resumen, los resultados indican que el modelo SVM con kernel lineal y los hiperparámetros específicos proporcionados tiene un buen rendimiento en la clasificación de las muestras del conjunto de datos Iris. Los hiperparámetros óptimos se encontraron mediante la búsqueda en cuadrícula, y la exactitud en datos de prueba proporciona una medida cuantitativa del rendimiento del modelo en datos no vistos.