Zephyrnet Logo

Otimização de hiperparâmetros bayesianos com tune-sklearn no PyCaret

Data:

Otimização de hiperparâmetros bayesianos com tune-sklearn no PyCaret

PyCaret, uma biblioteca Python ML de baixo código, oferece várias maneiras de ajustar os hiperparâmetros de um modelo criado. Neste post, gostaria de mostrar como o Ray Tune é integrado ao PyCaret e como é fácil alavancar seus algoritmos e computação distribuída para obter resultados superiores ao método de pesquisa aleatório padrão.


By Antonio Baum, Colaborador principal da PyCaret e Colaborador da Ray Tune


Imagem para postagem

Aqui está uma situação a cada PyCaretName o usuário está familiarizado: depois de selecionar um ou dois modelos promissores compare_models(), é hora de ajustar seus hiperparâmetros para espremer todo o potencial do modelo com tune_model().

from pycaret.datasets import get_data
from pycaret.classification import * data = get_data("juice") exp = setup( data, target = "Purchase",
)
best_model = compare_models()
tuned_best_model = tune_model(best_model)


(Se você quiser saber mais sobre PyCaret - uma biblioteca de aprendizado de máquina de código aberto e baixo código em Python, este guia é um bom lugar para começar.)

Por padrão, o tune_model() usa o experimentado e testado RandomizedSearchCV do scikit-learn. No entanto, nem todo mundo conhece as várias opções avançadas tune_model()proporciona.

Neste post, vou mostrar como é fácil usar outros algoritmos de última geração com PyCaret, graças a afinar-sklearn, um substituto imediato para o módulo de seleção de modelo do scikit-learn com técnicas de ajuste de hiperparâmetros de ponta. Também relatarei os resultados de uma série de benchmarks, mostrando como o tune-sklearn é capaz de melhorar facilmente o desempenho do modelo de classificação.

Pesquisa aleatória vs otimização bayesiana

 
Os algoritmos de otimização de hiperparâmetros podem variar muito em eficiência.

A pesquisa aleatória tem sido um grampo do aprendizado de máquina e por um bom motivo: é fácil de implementar, entender e dá bons resultados em um tempo razoável. No entanto, como o nome indica, é completamente aleatório - muito tempo pode ser gasto na avaliação de configurações incorretas. Considerando que a quantidade de iterações é limitada, faria sentido que o algoritmo de otimização se concentrasse nas configurações que considera promissoras, levando em consideração as configurações já avaliadas.

Essa é, em essência, a ideia da otimização bayesiana (BO). Os algoritmos BO acompanham todas as avaliações e usam os dados para construir um "modelo de probabilidade substituto", que pode ser avaliado muito mais rápido do que um modelo ML. Quanto mais configurações foram avaliadas, mais informado o algoritmo se torna e mais próximo o modelo substituto se torna da função objetivo real. Dessa forma, o algoritmo pode fazer uma escolha informada sobre quais configurações avaliar em seguida, em vez de apenas amostrar as aleatórias. Se você quiser saber mais sobre a otimização Bayesiana, confira este excelente artigo de Will Koehrsen.

Felizmente, o PyCaret foi integrado invólucros para várias bibliotecas de otimização, e neste artigo, vamos nos concentrar em afinar-sklearn.

tune-sklearn no PyCaret

 
afinar-sklearn é um substituto imediato para o módulo de seleção de modelo do scikit-learn. tune-sklearn fornece uma API unificada baseada em scikit-learn que dá acesso a vários algoritmos e bibliotecas de otimização de última geração, incluindo Optuna e scikit-optimize. Essa API unificada permite alternar entre muitas bibliotecas de otimização de hiperparâmetros diferentes com apenas um único parâmetro.

tune-sklearn é alimentado por Sintonia de raio, uma biblioteca Python para execução de experimentos e ajuste de hiperparâmetros em qualquer escala. Isso significa que você pode dimensionar seu ajuste em várias máquinas sem alterar seu código.

Para tornar as coisas ainda mais simples, a partir da versão 2.2.0, tune-sklearn foi integrado ao PyCaret. Você pode simplesmente fazer pip install "pycaret[full]" e todas as dependências opcionais serão atendidas.


Imagem para postagem
Como tudo funciona em conjunto

!pip install "pycaret[full]" from pycaret.datasets import get_data
from pycaret.classification import * data = get_data("juice") exp = setup( data, target = "Purchase",
)
best_model = compare_models()
tuned_best_model_hyperopt = tune_model( best_model, search_library="tune-sklearn", search_algorithm="hyperopt", n_iter=20
)
tuned_best_model_optuna = tune_model( best_model, search_library="tune-sklearn", search_algorithm="optuna", n_iter=20
)


Apenas adicionando dois argumentos para tune_model()você pode alternar da pesquisa aleatória para a otimização Bayesiana otimizada por tune-sklearn através Hiperopção or Optar. Lembre-se de que o PyCaret possui espaços de busca integrados para todos os modelos incluídos, mas você sempre pode passar pelo seu próprio, se desejar.

Mas quão bem eles se comparam à pesquisa aleatória?

Um experimento simples

 
Para ver como a otimização bayesiana se compara à pesquisa aleatória, conduzi um experimento muito simples. Usando o Conjunto de dados de preços de casas Kaggle, Criei dois modelos de regressão populares usando PyCaret - Floresta Aleatória e Rede Elástica. Em seguida, ajustei os dois usando o Random Search do scikit-learn e o Hyperopt e o Optuna Searchers do tune-sklearn (20 iterações para todos, minimizando RMSLE). O processo foi repetido três vezes com sementes diferentes e os resultados foram calculados. Abaixo está uma versão resumida do código - você pode encontrar o código completo SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

from pycaret.datasets import get_data
from pycaret.regression import * data = get_data("house")
exp = setup( data, target = "SalePrice", test_data=data, # so that the entire dataset is used for cross validation - do not normally do this! session_id=42, fold=5
)
rf = create_model("rf")
en = create_model("en") tune_model(rf, search_library = "scikit-learn", optimize="RMSLE", n_iter=20)
tune_model(rf, search_library = "tune-sklearn", search_algorithm="hyperopt", n_iter=20)
tune_model(rf, search_library = "tune-sklearn", search_algorithm="optuna", optimize="RMSLE", n_iter=20) tune_model(en, search_library = "scikit-learn", optimize="RMSLE", n_iter=20)
tune_model(en, search_library = "tune-sklearn", search_algorithm="hyperopt", n_iter=20)
tune_model(en, search_library = "tune-sklearn", search_algorithm="optuna", optimize="RMSLE", n_iter=20)


Não é ótimo como a PyCaret torna as coisas tão fáceis? De qualquer forma, aqui estão as pontuações RMSLE que obtive em minha máquina:

Pontuações RMSLE do experimento

E para colocá-lo em perspectiva, aqui está a porcentagem de melhoria em relação à pesquisa aleatória:

Melhoria percentual em relação à pesquisa aleatória

Tudo isso usando o mesmo número de iterações em tempo comparável. Lembre-se de que, devido à natureza estocástica do processo, sua milhagem pode variar. Se sua melhoria não for perceptível, tente aumentar o número de iterações (n_iter) do padrão 10. 20–30 geralmente é uma escolha sensata.

O que é ótimo sobre o Ray é que você pode facilmente escalar além de uma única máquina para um cluster de dezenas, centenas ou mais nós. Embora o PyCaret ainda não suporte a integração completa do Ray, é possível inicializar um Aglomerado de raios antes de sintonizar - e tune-sklearn irá usá-lo automaticamente.

exp = setup( data, target = "SalePrice", session_id=42, fold=5
) rf = create_model("rf") tune_model(rf, search_library = "tune-sklearn", search_algorithm="optuna", optimize="RMSLE", n_iter=20) # Will run on Ray cluster!


Desde que todas as configurações necessárias estejam no lugar ( RAY_ADDRESSvariável de ambiente), nada mais é necessário para aproveitar o poder da computação distribuída de Ray para ajuste de hiperparâmetros. Como a otimização de hiperparâmetros geralmente é a parte que exige mais desempenho na criação de um modelo de ML, o ajuste distribuído com o Ray pode economizar muito tempo.

Conclusão

 
Para acelerar a otimização de hiperparâmetros no PyCaret, tudo que você precisa fazer é instalar as bibliotecas necessárias e alterar dois argumentos em tune_model() - e graças ao suporte integrado ao tune-sklearn, você pode aproveitar facilmente a computação distribuída de Ray para expandir além de sua máquina local.

Certifique-se de verificar a documentação para PyCaretNameSintonia de raio e afinar-sklearn bem como os repositórios GitHub de PyCaretName e afinar-sklearn. Finalmente, se você tiver alguma dúvida ou quiser se conectar com a comunidade, participe PyCaret's Slack e Discurso de Ray.

Agradecimentos a Richard Liaw e Moez Ali pela revisão e conselhos.

 
Bio: Antonio Baum é estudante de mestrado em Ciência da Computação e Econometria, além de colaborador principal da PyCaret e colaborador do Ray Tune.

Óptimo estado. Original. Republicado com permissão.

Relacionado:

Confira PrimeXBT
Negocie com os Parceiros CFD Oficiais do AC Milan
A maneira mais fácil de negociar criptografia.
Fonte: https://www.kdnuggets.com/2021/03/bayesian-hyperparameter-optimization-tune-sklearn-pycaret.html

local_img

Inteligência mais recente

local_img

Fale Conosco

Olá! Como posso ajudá-lo?