Introductie van random search

Hyperparameter Tuning in Python

Alex Scriven

Data Scientist

Wat je al weet

 

Heel vergelijkbaar met grid search:

  • Definieer een estimator, welke hyperparameters je afstemt en het waardebereik per hyperparameter.
  • We stellen nog steeds een cross-validatieschema en scoringsfunctie in.

 

MAAR we kiezen nu willekeurig rasters.

Hyperparameter Tuning in Python

Waarom werkt dit?

Bengio & Bergstra (2012):

Dit artikel toont empirisch en theoretisch aan dat willekeurige pogingen efficiënter zijn voor hyperparameteroptimalisatie dan grid-pogingen.

Twee hoofdredenen:

  1. Niet elke hyperparameter is even belangrijk
  2. Een kleine kansreken-truc
Hyperparameter Tuning in Python

Een kansreken-truc

Een grid search:

10x10 van verschillende modellen

Hoeveel modellen moeten we draaien om 95% kans te hebben op een van de groene vakjes?

Onze beste modellen:

10x10 van verschillende modellen

Hyperparameter Tuning in Python

Een kansreken-truc

 

Als we hyperparameter-combinaties uniform willekeurig kiezen, kijk dan naar de kans om ELKE poging te MISSEN, om te laten zien hoe onwaarschijnlijk dat is

  • Poging 1 = 0,05 kans op succes en (1 - 0,05) om te missen

    • Poging 2 = (1-0,05) x (1-0,05) om het bereik te missen
      • Poging 3 = (1-0,05) x (1-0,05) x (1-0,05) om weer te missen
  • Met n pogingen is de kans (1-0,05)^n dat elke poging die plek mist.

Hyperparameter Tuning in Python

Een kansreken-truc

 

Hoeveel pogingen voor een hoge (95%) kans om daar in te komen?

  • We hebben (1-0.05)^n kans om alles te missen.
  • Dus de kans om erin te komen is (1 - alles missen) = (1-(1-0.05)^n)
  • Oplossen van 1-(1-0.05)^n >= 0.95 geeft n >= 59
Hyperparameter Tuning in Python

Een kansreken-truc

 

Wat betekent dit?

  • Bij willekeurige keuzes blijf je niet lang de ‘goede zone’ volledig missen.
  • Grid search kan veel tijd in een ‘slechte zone’ doorbrengen door uitputtend te dekken.
Hyperparameter Tuning in Python

Belangrijke notities

 

Onthoud:

  1. Het maximum is slechts zo goed als het raster dat je kiest!

  2. Vergelijk eerlijk met grid search: gebruik hetzelfde modelleer-‘budget’.

Hyperparameter Tuning in Python

Een willekeurige steekproef van hyperparameters maken

We kunnen zelf een willekeurige steekproef van hyperparameter-combinaties maken:

# 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]
Hyperparameter Tuning in Python

Random search visualiseren

We kunnen de dekking van random search ook visualiseren door de hyperparameterkeuzes op X- en Y-as te plotten.

random search dekkingsgrafiek

Zie je de brede spreiding maar geen diepe dekking?

Hyperparameter Tuning in Python

Laten we oefenen!

Hyperparameter Tuning in Python

Preparing Video For Download...