Informed methods: genetische algoritmen

Hyperparameter Tuning in Python

Alex Scriven

Data Scientist

Een lesje genetica

 

In genetische evolutie in de echte wereld verloopt het zo:

  1. Er zijn veel wezens (nakomelingen)
  2. De sterksten overleven en paren
  3. Er is ‘crossover’ bij het vormen van nakomelingen
  4. Er treden willekeurige mutaties op bij sommige nakomelingen
    • Soms geven die mutaties een voordeel
  5. Terug naar (1)!
Hyperparameter Tuning in Python

Genetica in machine learning

 

Hetzelfde idee kun je toepassen op hyperparametertuning:

  1. Maak meerdere modellen (met hyperparameters)
  2. Kies de beste (volgens je scorefunctie)
    • Die ‘overleven’
  3. Maak nieuwe modellen die lijken op de beste
  4. Voeg wat willekeur toe om geen lokaal optimum te krijgen
  5. Herhaal tot je tevreden bent
Hyperparameter Tuning in Python

Waarom werkt dit goed?

 

Dit is een geïnformeerde zoekmethode met voordelen:

  • Leert van eerdere iteraties, net als Bayesiaanse tuning.
  • Heeft extra voordeel van wat willekeur
  • (Het pakket dat we gebruiken) regelt veel saaie ML-taken
Hyperparameter Tuning in Python

Introductie tot TPOT

 

Een handige library voor genetische hyperparametertuning is TPOT:

Zie TPOT als je data science-assistent. TPOT is een Python AutoML-tool die ML-pipelines optimaliseert met genetic programming.

Pipelines omvatten niet alleen het model (of meerdere) maar ook feature-bewerking en andere stappen. En je krijgt de Python-code van de pipeline terug!

Hyperparameter Tuning in Python

TPOT-onderdelen

De belangrijkste argumenten voor een TPOT-classifier:

  • generations: Aantal iteraties voor training.
  • population_size: Aantal modellen dat na elke iteratie overblijft.
  • offspring_size: Aantal te maken modellen per iteratie.
  • mutation_rate: Aandeel pipelines met willekeur.
  • crossover_rate: Aandeel pipelines dat per iteratie kruist.
  • scoring: Functie om de beste modellen te bepalen.
  • cv: Te gebruiken cross-validatiestrategie.
Hyperparameter Tuning in Python

Een simpel voorbeeld

Een simpel voorbeeld:

from tpot import TPOTClassifier
tpot = TPOTClassifier(generations=3, population_size=5, 
                      verbosity=2, offspring_size=10,
                      scoring='accuracy', cv=5)

tpot.fit(X_train, y_train) print(tpot.score(X_test, y_test))

We laten mutation_rate en crossover_rate op standaardwaarden staan; die werken meestal het best zonder diepgaande kennis van genetic programming.

Opvallend: geen algoritmespecifieke hyperparameters?

Hyperparameter Tuning in Python

Laten we oefenen!

Hyperparameter Tuning in Python

Preparing Video For Download...