Ajuste de hiperparámetros con Optuna
Optuna es una biblioteca de Python de código abierto para el ajuste de hiperparámetros que se puede escalar horizontalmente entre varios recursos de proceso. Optuna también se integra con MLflow para el seguimiento y la supervisión de modelos y pruebas.
Instalar Optuna
Use los siguientes comandos para instalar Optuna y su módulo de integración.
%pip install optuna
%pip install optuna-integration # Integration with MLflow
Definir el espacio de búsqueda y ejecutar la optimización de Optuna
Estos son los pasos de un flujo de trabajo de Optuna:
- Definir una función objetivo para optimizar. Dentro de la función objetivo, defina el espacio de búsqueda de hiperparámetros.
- Cree un objeto Optuna Study y ejecute el algoritmo de optimización llamando a la función
optimize
del objeto Study.
A continuación se muestra un ejemplo mínimo de la documentación de Optuna.
- Defina la función objetivo
objective
y llame a la funciónsuggest_float
para definir el espacio de búsqueda del parámetrox
. - Cree un Study y optimice la función
objective
con 100 evaluaciones, es decir, 100 llamadas de la funciónobjective
con valores diferentes dex
. - Obtener los mejores parámetros del Study
def objective(trial):
x = trial.suggest_float("x", -10, 10)
return (x - 2) ** 2
study = optuna.create_study()
study.optimize(objective, n_trials=100)
best_params = study.best_params
Paralelizar pruebas de Optuna en varias máquinas
Puede distribuir las evaluaciones de Optuna a varias máquinas de un clúster de Azure Databricks con el back-end de Apache Spark de Joblib.
import joblib
from joblibspark import register_spark
register_spark() # register Spark backend for Joblib
with joblib.parallel_backend("spark", n_jobs=-1):
study.optimize(objective, n_trials=100)
Integración con MLflow
Para realizar un seguimiento de los hiperparámetros y las métricas de todas las pruebas de Optuna, use el MLflowCallback
de los módulos de integración de Optuna cuando llame a la función optimize
.
import mlflow
from optuna.integration.mlflow import MLflowCallback
mlflow_callback = MLflowCallback(
tracking_uri="databricks",
metric_name="accuracy",
create_experiment=False,
mlflow_kwargs={
"experiment_id": experiment_id
}
)
study.optimize(objective, n_trials=100, callbacks=[mlflow_callback])
Ejemplo de cuaderno
En este cuaderno se proporciona un ejemplo del uso de Optuna para seleccionar un modelo scikit-learn y un conjunto de hiperparámetros para el conjunto de datos Iris.
En la parte superior de un flujo de trabajo de Optuna de una sola máquina, el cuaderno muestra cómo hacerlo
- Paralelizar pruebas de Optuna en varias máquinas a través de Joblib
- Seguimiento de ejecuciones de prueba con MLflow