Compartir a través de


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:

  1. Definir una función objetivo para optimizar. Dentro de la función objetivo, defina el espacio de búsqueda de hiperparámetros.
  2. 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ón suggest_float para definir el espacio de búsqueda del parámetro x.
  • Cree un Study y optimice la función objective con 100 evaluaciones, es decir, 100 llamadas de la función objective con valores diferentes de x.
  • 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

Escalado vertical del ajuste de hiperparámetros con Optuna y MLflow

Obtener el cuaderno