Hyperparameter Tuning in Python
Alex Scriven
Data Scientist
Tot nu toe deden we uninformed search:
Uninformed search: elke iteratie van hyperparametertuning leert niet van eerdere iteraties.
Zo kunnen we paralleliseren. Maar is dit efficiënt?
Het proces tot nu toe:

Een alternatieve manier:

Een basisaanpak voor informed search:
Begin grof en willekeurig en verfijn iteratief.
De stappen:
Je kunt (3) vervangen door extra random searches vóór de grid search
Voordelen van grof-naar-fijn tunen:
Geen tijd verspillen aan zoekruimtes met slechte resultaten!
Let op: Dit is informed op batches, niet op één model
Neem dit voorbeeld met deze hyperparameterranges:
max_depth_list tussen 1 en 65min_sample_list tussen 3 en 17learn_rate_list 150 waarden tussen 0.01 en 150Hoeveel mogelijke modellen hebben we?
combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
We doen een random search op 500 combinaties.
Hier plotten we de accuraciescores:

Welke modellen waren goed?
Topresultaten:
| max_depth | min_samples_leaf | learn_rate | accuracy |
|---|---|---|---|
| 10 | 7 | 0.01 | 96 |
| 19 | 7 | 0.023355705 | 96 |
| 30 | 6 | 1.038389262 | 93 |
| 27 | 7 | 1.11852349 | 91 |
| 16 | 7 | 0.597651007 | 91 |
Visualiseer max_depth versus accuracyscore:

min_samples_leaf beter onder 8

learn_rate slechter boven 1.3

Wat we weten na iteratie één:
max_depth tussen 8 en 30learn_rate kleiner dan 1.3min_samples_leaf mogelijk kleiner dan 8Wat nu? Nog een random of grid search met wat we weten!
Let op: Dit was alleen bivariate analyse. Je kunt ook meerdere hyperparameters (3, 4 of meer!) in één grafiek verkennen, maar dat valt buiten deze cursus.
Hyperparameter Tuning in Python