Partilhar via


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:

  1. Defina uma função objetiva para otimizar. Dentro da função objetivo, defina o espaço de pesquisa de hiperparâmetros.
  2. 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 objectiveobjetiva e chame a suggest_float função para definir o espaço de pesquisa para o parâmetro x.
  • Crie um Estudo e otimize a objective função com 100 tentativas, ou seja, 100 chamadas da objective função com diferentes valores de x.
  • 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

Ampliando o ajuste de hiperparâmetros com Optuna e MLflow

Obter o bloco de notas