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:
- Come definire una funzione obiettivo. All’interno della funzione obiettivo definire lo spazio di ricerca degli iperparametri.
- 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
objective
obiettivo e chiamare lasuggest_float
funzione per definire lo spazio di ricerca per il parametrox
. - Creare uno studio e ottimizzare la
objective
funzione con 100 prove, ad esempio 100 chiamate dellaobjective
funzione con valori diversi dix
. - 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