ComenzarEmpieza gratis

Ajuste bayesiano de hiperparámetros con Hyperopt

En este ejemplo vas a configurar y ejecutar un proceso de optimización bayesiana de hiperparámetros usando el paquete Hyperopt (ya importado como hp). Primero definirás el dominio (similar a configurar la rejilla en una búsqueda en cuadrícula), luego crearás la función objetivo. Por último, ejecutarás el optimizador durante 20 iteraciones.

Necesitas definir el dominio con estos valores:

  • max_depth usando una distribución quniform (entre 2 y 10, incrementos de 2)
  • learning_rate usando una distribución uniform (de 0.001 a 0.9)

Ten en cuenta que, para este ejercicio, se redujeron el tamaño de la muestra de datos y el número de iteraciones de hyperopt y del GBM. Si pruebas este método por tu cuenta en tu máquina, utiliza un espacio de búsqueda más amplio, más ejecuciones (trials), más validaciones cruzadas y un conjunto de datos mayor para ver realmente cómo funciona.

Este ejercicio forma parte del curso

Ajuste de hiperparámetros en Python

Ver curso

Instrucciones del ejercicio

  • Configura un diccionario space usando el dominio indicado arriba.
  • Define la función objetivo usando un clasificador de gradient boosting.
  • Ejecuta el algoritmo durante 20 evaluaciones (usa simplemente el algoritmo sugerido por defecto en las diapositivas).

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# Set up space dictionary with specified hyperparameters
space = {'max_depth': hp.____('max_depth', ____, ____, ____),'learning_rate': hp.____('learning_rate', ____,____)}

# Set up objective function
def objective(params):
    params = {'max_depth': int(params[____]),'learning_rate': params[____]}
    gbm_clf = ____(n_estimators=100, **params) 
    best_score = cross_val_score(gbm_clf, X_train, y_train, scoring='accuracy', cv=2, n_jobs=4).mean()
    loss = 1 - ____
    return ____

# Run the algorithm
best = fmin(fn=____,space=space, max_evals=____, rstate=np.random.default_rng(42), algo=tpe.suggest)
print(____)
Editar y ejecutar código