Ajuste de hiperparâmetro com Optuna

Optuna é uma biblioteca Python de software livre para ajuste de hiperparâmetro que pode ser dimensionada horizontalmente em vários recursos de computação. O Optuna também se integra ao MLflow para acompanhamento e monitoramento de modelo e avaliação.

Instalar o Optuna

Use os comandos a seguir para instalar o Optuna e seu módulo de integração.

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

Definir o espaço de pesquisa e executar a otimização do Optuna

Estas são as etapas em um fluxo de trabalho do Optuna:

  1. Defina uma função objetiva para otimizar. Dentro da função de objetivo, defina o espaço de pesquisa do hiperparâmetro.
  2. Crie um objeto Optuna Study e execute o algoritmo de ajuste chamando a função optimize do objeto Study.

Veja abaixo um exemplo mínimo da documentação do Optuna.

  • Defina a função objetiva objective e chame a função suggest_float para definir o espaço de pesquisa para o parâmetro x.
  • Crie um Estudo e otimize a função objective com 100 avaliações, ou seja, 100 chamadas da função objective com valores diferentes de x.
  • Obter 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 avaliações do Optuna em vários computadores

Você pode distribuir as avaliações do Optuna para vários computadores em um cluster do Azure Databricks com o Back-end do Apache Spark do 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)

Integração com o MLflow

Para acompanhar hiperparâmetros e métricas de todas as avaliações do Optuna, use os MLflowCallback módulos de Integração do Optuna ao chamar a função optimize.

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 notebook

Este notebook fornece um exemplo de como usar o Optuna para selecionar um modelo scikit-learn e um conjunto de hiperparâmetros para o conjunto de dados Iris.

Sobre um fluxo de trabalho do Optuna de computador único, o notebook mostra como

  • Paralelizar avaliações do Optuna em vários computadores por meio do Joblib
  • Acompanhar execuções de avaliação com o MLflow

Dimensionando o ajuste do hiperparâmetro com Optuna e MLflow

Obter notebook