WhatsApp

  
Optimización de hiperparámetros con Python

Introducción

La optimización de hiperparámetros es un paso esencial en la construcción de modelos de aprendizaje automático en Python. Los hiperparámetros son configuraciones que afectan el rendimiento y comportamiento del modelo, y encontrar los valores óptimos puede mejorar significativamente su desempeño. En este blog, exploraremos diferentes métodos para encontrar los mejores hiperparámetros de un modelo utilizando Python y la biblioteca scikit-learn.

Búsqueda Manual con scikit-learn:

La búsqueda manual implica ajustar manualmente los valores de los hiperparámetros y evaluar el rendimiento del modelo en un conjunto de datos de validación. Con scikit-learn, podemos implementar este enfoque modificando los hiperparámetros del estimador y utilizando métodos de evaluación como la validación cruzada.

          from sklearn.model_selection import cross_val_score
           from sklearn.ensemble import RandomForestClassifier
            #Definir el clasificador con hiperparámetros manualmente ajustados
            clf = RandomForestClassifier(n_estimators=100, max_depth=5)
            # Evaluar el rendimiento del modelo mediante validación cruzada
            scores = cross_val_score(clf, X_train, y_train, cv=5)
Búsqueda en Rejilla (Grid Search) con scikit-learn:

La búsqueda en rejilla prueba todas las combinaciones posibles de valores de hiperparámetros especificados en una "rejilla". Con scikit-learn, podemos utilizar la clase GridSearchCV para realizar este proceso de forma automática.

from sklearn.model_selection import GridSearchCV
# Definir la rejilla de hiperparámetros
param_grid = {'n_estimators': [50, 100, 200], 'max_depth': [3, 5, 10]}
# Crear el objeto GridSearchCV
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
# Ajustar el modelo y encontrar los mejores hiperparámetros
grid_search.fit(X_train, y_train)
# Obtener los mejores hiperparámetros y la mejor precisión
best_params = grid_search.best_params_
best_score = grid_search.best_score_
Búsqueda Aleatoria (Random Search) con scikit-learn:

La búsqueda aleatoria selecciona valores de hiperparámetros al azar dentro de rangos especificados y entrena el modelo con cada conjunto de valores. Con scikit-learn, podemos utilizar la clase RandomizedSearchCV para realizar este proceso de forma automática.

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
# Definir los rangos de hiperparámetros
param_dist = {'n_estimators': randint(50, 200), 'max_depth': randint(3, 10)}
# Crear el objeto RandomizedSearchCV
random_search = RandomizedSearchCV(RandomForestClassifier(), param_dist, cv=5)
# Ajustar el modelo y encontrar los mejores hiperparámetros
random_search.fit(X_train, y_train)
# Obtener los mejores hiperparámetros y la mejor precisión
best_params = random_search.best_params_
best_score = random_search.best_score_
Optimización Bayesiana con Hyperopt:

Hyperopt es una biblioteca popular para la optimización de hiperparámetros bayesianos en Python. Utiliza métodos probabilísticos para encontrar la combinación óptima de hiperparámetros. Aquí hay un ejemplo básico de cómo usar Hyperopt con scikit-learn.

from hyperopt import hp, tpe, Trials, fmin
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
# Definir el espacio de búsqueda de hiperparámetros
space = {'n_estimators': hp.choice('n_estimators', [50, 100, 200]),
         'max_depth': hp.choice('max_depth', [3, 5, 10])}
# Definir la función objetivo
def objective(params):
    clf = RandomForestClassifier(**params)
    return -cross_val_score(clf, X_train, y_train, cv=5, n_jobs=-1).mean()
# Realizar la optimización
trials = Trials()
best = fmin(fn=objective, space=space, algo=tpe.suggest, max_evals=100, 
trials=trials) # Obtener los mejores hiperparámetros best_params = space_eval(space, best)

Conclusion

La optimización de hiperparámetros es un paso crítico en la construcción de modelos de aprendizaje automático en Python. Con métodos como la búsqueda manual, la búsqueda en rejilla, la búsqueda aleatoria, la optimización bayesiana y herramientas como Hyperopt, los practicantes pueden encontrar los valores óptimos de los hiperparámetros y mejorar el rendimiento de sus modelos en conjuntos de datos reales.



Kevin Rodríguez 28 mayo, 2024
Compartir


Iniciar sesión dejar un comentario

  
Aprendizaje automático supervisado vs no supervisado.
Diferencias, aplicaciones y casos de uso