
Los hiperparámetros juegan un papel crucial en el rendimiento de los modelos de aprendizaje automático. Son las perillas y diales que ajustamos durante el proceso de entrenamiento para controlar el comportamiento del modelo. A diferencia de los parámetros del modelo, los hiperparámetros no se pueden aprender durante el entrenamiento y deben configurarse de antemano. Sin embargo, elegir los hiperparámetros correctos es una tarea desafiante debido a la alta dimensionalidad del espacio de hiperparámetros y el alto costo de las evaluaciones del modelo. Aquí es donde entran en juego las técnicas de optimización de hiperparámetros.
En este artículo, discutiremos varios métodos para la optimización de hiperparámetros y los demostraremos con ejemplos de código de Python.
Grid Search es el método de optimización de hiperparámetros más simple y tradicional. Funciona definiendo una cuadrícula de hiperparámetros y luego evaluando el rendimiento del modelo para cada punto de la cuadrícula. Simplemente puede usar todas las combinaciones de hiperparámetros para una cobertura completa. Así es como puede realizar una búsqueda de cuadrícula en Python usando scikit-learn’s GridSearchCV
.
from sklearn import svm
from sklearn.model_selection import GridSearchCV# Create a SVM classifier instance
svc = svm.SVC()
# Define the hyperparameter space to search
parameters = {'kernel':('linear', 'rbf'), 'C':[0.1, 1, 10]}
# Conduct the grid search
clf = GridSearchCV(svc, parameters)
clf.fit(X_train, y_train)
Esto es sencillo, pero la principal desventaja es que la búsqueda en cuadrícula puede ser muy costosa desde el punto de vista computacional, especialmente si la cantidad de hiperparámetros es grande.
Random Search es una alternativa simple a la búsqueda en cuadrícula. En lugar de verificar cada punto de la cuadrícula, muestreamos aleatoriamente puntos en el espacio de hiperparámetros y evaluamos el modelo en estos puntos. Esto puede ser menos costoso desde el punto de vista computacional y al mismo tiempo dar buenos resultados.
from sklearn.model_selection import RandomizedSearchCV# Use the same svc and parameters from the GridSearchCV example
clf = RandomizedSearchCV(svc, parameters)
clf.fit(X_train, y_train)
La optimización bayesiana es un método más sofisticado para el ajuste de hiperparámetros. Construye un modelo probabilístico del mapeo de funciones desde los hiperparámetros hasta la puntuación del modelo. El modelo probabilístico se utiliza para seleccionar los hiperparámetros más prometedores para evaluar en la verdadera función objetivo.
Una biblioteca popular de Python para la optimización bayesiana es Scikit-Optimize
.
from skopt import BayesSearchCV# Use the same svc and parameters from the GridSearchCV example
# Note: the parameters need to be specified as distributions for BayesSearchCV
parameters_dist = {'C': (0.1, 1, 10), 'kernel': ['linear', 'rbf']}
clf = BayesSearchCV(svc, parameters_dist)
clf.fit(X_train, y_train)
Los algoritmos genéticos están inspirados en el proceso de selección natural y se utilizan para encontrar soluciones óptimas o casi óptimas a problemas complejos. Se pueden utilizar para optimizar los hiperparámetros al tratar cada conjunto de hiperparámetros como un individuo en una población. Luego, los individuos «evolucionan» a lo largo de generaciones en función de su «aptitud» (rendimiento del modelo).
TPOT
es una biblioteca de Python que utiliza algoritmos genéticos para optimizar las canalizaciones de aprendizaje automático.
from tpot import TPOTClassifier# Create a tpot object with a few generations
tpot = TPOTClassifier(generations=5, population_size=50, verbosity=2, random_state=42)
tpot.fit(X_train, y_train)
Cada uno de estos métodos tiene sus propias fortalezas y debilidades, y la elección del método depende del problema específico en cuestión, los recursos computacionales disponibles y la dimensionalidad del espacio de hiperparámetros.
Con suerte, ahora tiene una buena comprensión de los diferentes métodos disponibles para la optimización de hiperparámetros en Python. Recuerde, sacar el máximo provecho de sus modelos es una combinación de arte y ciencia: requiere una combinación de conocimiento, intuición, experimentación y paciencia. ¡Feliz afinación!