Optimierung von Hyperparametern mit Optuna
Optuna ist eine Open-Source-Python-Bibliothek für die Optimierung von Hyperparametern, die horizontal über mehrere Computeressourcen skaliert werden kann. Optuna lässt sich in MLflow für Modell- und Testnachverfolgung und -überwachung integriert.
Optuna installieren
Verwenden Sie die folgenden Befehle, um Optuna und dessen Integrationsmodul zu installieren.
%pip install optuna
%pip install optuna-integration # Integration with MLflow
Definieren des Suchbereichs und Ausführen der Optuna-Optimierung
Hier sind die Schritte in einem Optuna-Workflow:
- Definieren Sie eine Zielfunktion, die optimiert werden soll. Definieren Sie innerhalb der Zielfunktion den Suchbereich für Hyperparameter.
- Erstellen Sie ein Optuna Study-Objekt, und führen Sie den Optimierungsalgorithmus aus, indem Sie die
optimize
-Funktion des Study-Objekts aufrufen.
Im Folgenden finden Sie ein minimales Beispiel aus der Optuna-Dokumentation.
- Definieren Sie die Zielfunktion
objective
, und rufen Sie diesuggest_float
-Funktion auf, um den Suchbereich für den Parameterx
zu definieren. - Erstellen Sie ein Study-Objekt, und optimieren Sie die
objective
-Funktion mit 100 Versuchen, d. h. 100 Aufrufe derobjective
-Funktion mit unterschiedlichen Werten vonx
. - Abrufen der besten Parameter des Study-Objekts
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
Parallelisieren von Optuna-Testversionen auf mehreren Computern
Sie können Optuna-Testversionen mit dem Apache Spark-Back-End für Joblib an mehrere Computer in einem Azure Databricks-Cluster verteilen.
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)
Integration in MLflow
Verwenden Sie zum Nachverfolgen von Hyperparametern und Metriken aller Optuna-Testversionen das MLflowCallback
-Element der Optuna-Integrationsmodule, wenn Sie die optimize
-Funktion aufrufen.
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])
Notebook-Beispiel
Dieses Notebook enthält ein Beispiel für die Verwendung von Optuna zum Auswählen eines Scikit-learn-Modells und einer Reihe von Hyperparametern für das Iris-Dataset.
Neben einem Optuna-Workflow mit einem einzelnen Computer zeigt das Notebook, wie
- Optuna-Testversionen über Joblib auf mehreren Computern parallelisiert werden
- Ausführungen von Testversionen mit MLflow nachverfolgt werden