Ajuste de hiperparâmetros com o Optuna

Optuna é um código aberto Python biblioteca para ajuste de hiperparâmetros que pode ser dimensionado horizontalmente em vários compute recursos. O Optuna também se integra ao site MLflow para acompanhamento e monitoramento de modelos e testes.

Instalar o Optuna

Use o comando 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 busca e a execução da otimização Optuna

Aqui estão os passos em um fluxo de trabalho da Optuna:

  1. Defina uma função objetiva para otimizar. Na função objetiva, 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.

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 tentativas, 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 os testes do Optuna em várias máquinas

O senhor pode distribuir testes do Optuna para várias máquinas em um cluster da 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)

Integrar com o MLflow

Para rastrear hiperparâmetros e métricas de todas as tentativas do Optuna, use MLflowCallback dos módulos de integração do Optuna quando o senhor 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])

Notebook exemplo

Este Notebook fornece um exemplo de uso do Optuna para selecionar um modelo Scikit-Learn e um conjunto de hiperparâmetros para o Iris dataset.

Além de uma única máquina Optuna fluxo de trabalho, o site Notebook mostra como

  • Paralelize os testes do Optuna em várias máquinas por meio do Joblib

  • Acompanhe a execução do teste com MLflow

Ampliação do ajuste de hiperparâmetros com o Optuna e o MLflow

Abra o bloco de anotações em outra guia