Apresentando Random Search

Ajuste de Hiperparâmetros em Python

Alex Scriven

Data Scientist

O que você já sabe

 

Bem parecido com grid search:

  • Defina um estimador, os hiperparâmetros a ajustar e o intervalo de valores de cada um.
  • Ainda definimos um esquema de validação cruzada e uma função de pontuação

 

MAS em vez disso selecionamos quadrados da grade de forma aleatória.

Ajuste de Hiperparâmetros em Python

Por que isso funciona?

Bengio & Bergstra (2012):

Este artigo mostra, empiricamente e teoricamente, que testes escolhidos aleatoriamente são mais eficientes para otimização de hiperparâmetros do que testes em grade.

Duas razões principais:

  1. Nem todo hiperparâmetro é igualmente importante
  2. Um truque de probabilidade
Ajuste de Hiperparâmetros em Python

Um truque de probabilidade

Uma grid search:

10x10 de modelos diferentes

Quantos modelos precisamos rodar para ter 95% de chance de pegar um dos quadrados verdes?

Nossos melhores modelos:

10x10 de modelos diferentes

Ajuste de Hiperparâmetros em Python

Um truque de probabilidade

 

Se selecionarmos combinações de hiperparâmetros aleatoriamente e de forma uniforme, vamos considerar a chance de ERRAR todos os testes, para mostrar como isso é improvável

  • Teste 1 = 0,05 de chance de sucesso e (1 - 0,05) de errar

    • Teste 2 = (1-0,05) x (1-0,05) de errar a faixa
      • Teste 3 = (1-0,05) x (1-0,05) x (1-0,05) de errar de novo
  • Com n testes, temos (1-0,05)^n de chance de que cada teste erre o ponto desejado.

Ajuste de Hiperparâmetros em Python

Um truque de probabilidade

 

Então, quantos testes para ter alta (95%) chance de cair nessa região?

  • Temos (1-0,05)^n de chance de errar tudo.
  • Então precisamos de (1 - errar tudo) de chance de cair lá, ou (1-(1-0,05)^n)
  • Resolvendo 1-(1-0,05)^n >= 0,95 obtemos n >= 59
Ajuste de Hiperparâmetros em Python

Um truque de probabilidade

 

O que isso tudo significa?

  • É improvável você continuar errando a "boa área" por muito tempo ao escolher pontos aleatórios
  • Uma grid search pode gastar muito tempo em uma "área ruim" ao cobrir tudo exaustivamente.
Ajuste de Hiperparâmetros em Python

Algumas observações importantes

 

Lembre-se:

  1. O máximo ainda é tão bom quanto a grade que você definiu!

  2. Para comparar de forma justa com grid search, use o mesmo "orçamento" de modelagem

Ajuste de Hiperparâmetros em Python

Criando uma amostra aleatória de hiperparâmetros

Podemos criar nossa própria amostra aleatória de combinações de hiperparâmetros:

# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in 
                    product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
                            range(0,len(combinations_list)), 100, 
                            replace=False)
combinations_random_chosen = [combinations_list[x] for x in 
                            random_combinations_index]
Ajuste de Hiperparâmetros em Python

Visualizando um Random Search

Também podemos visualizar a cobertura do random search plotando as escolhas de hiperparâmetros nos eixos X e Y.

gráfico de cobertura do random search

Perceba que há ampla dispersão, mas pouca cobertura em profundidade.

Ajuste de Hiperparâmetros em Python

Vamos praticar!

Ajuste de Hiperparâmetros em Python

Preparing Video For Download...