Ajuste de hiperparâmetros com o Optuna
O Optuna é uma biblioteca Python de código aberto para ajuste de hiperparâmetros que pode ser dimensionada horizontalmente em vários recursos de computação. O Optuna também se integra ao MLflow para rastreamento e monitoramento de modelos e avaliações.
Instalar o Optuna
Use os seguintes comandos para instalar o Optuna e seu módulo de integração.
%pip install optuna
%pip install optuna-integration # Integration with MLflow
Defina o espaço de pesquisa e execute a otimização do Optuna
Aqui estão as etapas em um fluxo de trabalho do Optuna:
- Defina uma função objetiva para otimizar. Dentro da função objetivo, defina o espaço de pesquisa de hiperparâmetros.
- Crie um objeto Optuna Study e execute o algoritmo de ajuste chamando a
optimize
função do objeto Study.
Abaixo está um exemplo mínimo da documentação do Optuna.
- Defina a função
objective
objetiva e chame asuggest_float
função para definir o espaço de pesquisa para o parâmetrox
. - Crie um Estudo e otimize a
objective
função com 100 tentativas, ou seja, 100 chamadas daobjective
função com diferentes valores dex
. - Obtenha os melhores parâmetros do Estudo
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 testes do Optuna a várias máquinas
Você pode distribuir avaliações do Optuna para várias máquinas em um cluster do Azure Databricks com o Joblib Apache Spark Backend.
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)
Integração com MLflow
Para rastrear hiperparâmetros e métricas de todos os testes do Optuna, use os módulos de integração do Optuna MLflowCallback
quando chamar a optimize
função.
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])
Exemplo de bloco de notas
Este bloco de anotações fornece um exemplo de uso do Optuna para selecionar um modelo scikit-learn e um conjunto de hiperparâmetros para o conjunto de dados Iris.
Além de um fluxo de trabalho Optuna de máquina única, o notebook mostra como
- Paralelizar testes do Optuna para várias máquinas via Joblib
- Acompanhe as execuções de avaliação com o MLflow