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_depthusando una distribución quniform (entre 2 y 10, incrementos de 2)learning_rateusando 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
Instrucciones del ejercicio
- Configura un diccionario
spaceusando 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(____)