Hyperparameterjustering i Python
Alex Scriven
Data Scientist
Hittills har vi använt oinformerad sökning:
Oinformerad sökning: Varje iteration av hyperparameterjustering lär sig inte från tidigare iterationer.
Detta gör att vi kan parallellisera arbetet – men det låter inte särskilt effektivt?
Hittills har processen sett ut så här:

Ett alternativt tillvägagångssätt:

En grundläggande metod för informerad sökning:
Börja grovt och slumpmässigt, och förfina sedan sökningen steg för steg.
Processen är:
Du kan ersätta steg (3) med ytterligare slumpmässiga sökningar innan rutnätssökningen
Justering från grov till fin har flera fördelar:
Ingen anledning att slösa tid på sökrymder som inte ger bra resultat!
Obs: Detta baseras inte på en enskild modell utan på batchar
Ta följande hyperparameterintervall som exempel:
max_depth_list mellan 1 och 65min_sample_list mellan 3 och 17learn_rate_list 150 värden mellan 0,01 och 150Hur många möjliga modeller har vi?
combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
Vi gör en slumpmässig sökning på bara 500 kombinationer.
Här plottar vi noggrannhetsresultaten:

Vilka modeller var de bästa?
Toppresultat:
| 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 |
Vi visualiserar max_depth-värden mot noggrannhetsresultat:

min_samples_leaf bättre under 8

learn_rate sämre över 1,3

Vad vi vet efter första iterationen:
max_depth mellan 8 och 30learn_rate mindre än 1,3min_samples_leaf troligen mindre än 8Vad händer nu? Ny slumpmässig eller rutnätssökning med den kunskap vi har!
Obs: Detta var enbart bivariat analys. Du kan också undersöka flera hyperparametrar (3, 4 eller fler!) i ett och samma diagram, men det faller utanför den här kursens ramar.
Hyperparameterjustering i Python