Condividi tramite


Ottimizzazione degli iperparametri con Optuna

Optuna è una libreria Python open source per l’ottimizzazione degli iperparametri che può essere ridimensionata orizzontalmente tra più risorse di calcolo. Optuna si integra anche con MLflow per il monitoraggio e il monitoraggio del modello e della versione di valutazione.

Installare Optuna

Usare i comandi seguenti per installare Optuna e il relativo modulo di integrazione.

%pip install optuna
%pip install optuna-integration # Integration with MLflow

Definire lo spazio di ricerca ed eseguire l’ottimizzazione Optuna

Ecco i passaggi in un flusso di lavoro Optuna:

  1. Come definire una funzione obiettivo. All’interno della funzione obiettivo definire lo spazio di ricerca degli iperparametri.
  2. Creare un oggetto Optuna Study ed eseguire l’algoritmo di ottimizzazione chiamando la optimize funzione dell’oggetto Study.

Di seguito è riportato un esempio minimo della documentazione di Optuna.

  • Definire la funzione objectiveobiettivo e chiamare la suggest_float funzione per definire lo spazio di ricerca per il parametro x.
  • Creare uno studio e ottimizzare la objective funzione con 100 prove, ad esempio 100 chiamate della objective funzione con valori diversi di x.
  • Ottenere i parametri migliori dello studio
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

Parallelizzare le versioni di valutazione di Optuna a più computer

È possibile distribuire versioni di valutazione optuna a più computer in un cluster Azure Databricks con il back-end apache Spark 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)

Integrazione con MLflow

Per tenere traccia degli iperparametri e delle metriche di tutte le versioni di valutazione optuna, usare i MLflowCallback moduli optuna integration quando si chiama la optimize funzione.

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])

Esempio di notebook

Questo notebook fornisce un esempio di uso di Optuna per selezionare un modello scikit-learn e un set di iperparametri per il set di dati Iris.

Oltre a un flusso di lavoro Optuna a computer singolo, il notebook illustra come

  • Parallelizzare le versioni di valutazione di Optuna a più computer tramite Joblib
  • Tenere traccia delle esecuzioni di valutazione con MLflow

Aumento dell'ottimizzazione degli iperparametri con Optuna e MLflow

Ottenere il notebook