Qual é o método mais eficiente para otimização de hiperparâmetros no scikit-learn?

10

Uma visão geral do processo de otimização de hiperparâmetros no scikit-learn está aqui .

A pesquisa exaustiva na grade encontrará o conjunto ideal de hiperparâmetros para um modelo. A desvantagem é que a busca exaustiva na grade é lenta.

A pesquisa aleatória é mais rápida que a pesquisa em grade, mas apresenta uma variação desnecessariamente alta.

Também existem estratégias adicionais em outros pacotes, incluindo o scikit-optimize , auto-sklearn e scikit-hyperband .

Qual é o método mais eficiente (encontrar parâmetros de desempenho razoavelmente rápido) para a otimização do hiperparâmetro no scikit-learn?

Idealmente, eu gostaria de trabalhar exemplos de código com benchmarks.

Brian Spiering
fonte
Eu suspeito que a resposta vai depender um pouco do tipo de modelo. Você tinha um específico em mente?
Ben Reiniger
No scikit-learn, você também pode tentar o scikit-hyperband. Desculpe, não tenho código para fazer benchmark no momento. No entanto, existem outros métodos que não são implementados no scikit learn.
Ethan
1
Hyperopt ou usando Abordagem Bayesiana parece Kaggle dominar .. E obviamente Experimente posteriormente, como não se pode realmente fazê-lo sempre :)
Aditya
No scikit-learn, geralmente uso conjuntos de árvores. Os conjuntos de árvores seriam um bom lugar para começar, pois tendem a ter um bom desempenho e têm muitos botões para girar.
Brian Spiering
1
O interessante é que alguns benchmarks recentes mostram que o x2 aleatório pode superar alguns dos métodos "mais sofisticados". Posso vincular um artigo / artigo realmente bom para você ler. Além disso, se eu encontrar algum tempo na próxima semana, talvez eu possa responder sua pergunta mais completamente.
Ethan

Respostas:

6

A otimização não é o meu campo, mas até onde eu sei, a otimização de hiperparâmetros eficiente e eficaz nos dias de hoje gira fortemente em torno da construção de um modelo substituto. À medida que os modelos aumentam em complexidade, eles se tornam uma caixa preta mais opaca. Este é o caso de redes neurais profundas e também de árvores presumivelmente complexas. Um modelo substituto tenta regredir o espaço subjacente dentro dessa caixa preta. Com base em uma variedade de técnicas de amostragem, eles sondam o espaço do hiperparâmetro e tentam criar uma função que represente o verdadeiro espaço subjacente do hiperparâmetro.

A otimização bayesiana enfoca o modelo substituto e a forma como esse modelo é construído é crucial para a BO. Também crucial para o BO é escolher uma boa função de perda.

Penso que o desempenho entre a pesquisa aleatória e a pesquisa bayesiana varia de conjunto de dados para conjunto de dados e de modelo para modelo. Bergstra & Bengio (2012) fizeram um forte argumento para pesquisa aleatória sobre pesquisa em grade. Shahriari et al. (2016) defendem a BO. As estratégias de banda hiperbásica baseadas em modelo podem potencialmente ter um desempenho melhor que o BO, especialmente para grandes dimensões, no entanto, é puramente exploração, não exploração. Isso pode resultar facilmente em muito cedo para parar. No entanto, houve esforços para combinar Hyperband e BO .

Eu tive um bom sucesso com otimização de scikit, apesar de haver um pouco de falta de implementação. É fácil criar um protótipo e pode interagir facilmente com o scikit-learn.


Bergstra, J. & Bengio, Y. (2012). Pesquisa aleatória para otimização de hiperparâmetros. Journal of Machine Learning Research, 13 (fev), 281-305.

Shahriari, B., Swersky, K., Wang, Z., Adams, RP e De Freitas, N. (2016). Tirando o ser humano do circuito: uma revisão da otimização bayesiana. Anais do IEEE, 104 (1), 148-175.

Alex L
fonte
2

Você pode dar uma olhada no auto-sklearn . Esse é um kit de ferramentas de aprendizado de máquina automatizado, que é uma extensão direta do scikit-learn.

TQA
fonte
2
Muito interessante. Isso usa a abordagem bayesiana para otimização de hiperparâmetros sob o capô @Aditya.
Esmailian 13/03/19