Informerad sökning: från grov till fin

Hyperparameterjustering i Python

Alex Scriven

Data Scientist

Informerad vs oinformerad sökning

 

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?

Hyperparameterjustering i Python

Informerad vs oinformerad

Hittills har processen sett ut så här:

karta över oinformerad process

Ett alternativt tillvägagångssätt:

karta över informerad process

Hyperparameterjustering i Python

Justering från grov till fin

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:

  1. Slumpmässig sökning
  2. Identifiera lovande områden
  3. Rutnätssökning i det mindre området
  4. Fortsätt tills ett optimalt resultat uppnås

Du kan ersätta steg (3) med ytterligare slumpmässiga sökningar innan rutnätssökningen

Hyperparameterjustering i Python

Varför grov till fin?

Justering från grov till fin har flera fördelar:

  • Kombinerar fördelarna med rutnäts- och slumpmässig sökning.
    • Bred sökning till att börja med
    • Djupare sökning när du vet var ett bra område troligen finns
  • Effektivare användning av tid och beräkningsresurser gör att du kan iterera snabbare

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

Hyperparameterjustering i Python

Att genomföra grov-till-fin-sökning

Ta följande hyperparameterintervall som exempel:

  • max_depth_list mellan 1 och 65
  • min_sample_list mellan 3 och 17
  • learn_rate_list 150 värden mellan 0,01 och 150

Hur 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
Hyperparameterjustering i Python

Visualisering av grov-till-fin

Vi gör en slumpmässig sökning på bara 500 kombinationer.

Här plottar vi noggrannhetsresultaten:

täthetsgraf över modellers noggrannhet

Vilka modeller var de bästa?

Hyperparameterjustering i Python

Visualisering av grov-till-fin

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
Hyperparameterjustering i Python

Visualisering av grov-till-fin

Vi visualiserar max_depth-värden mot noggrannhetsresultat:

spridningsdiagram: max depth vs noggrannhet

Hyperparameterjustering i Python

Visualisering av grov-till-fin

min_samples_leaf bättre under 8

spridningsdiagram: min samples leaf vs noggrannhet

learn_rate sämre över 1,3

spridningsdiagram: learn rate vs noggrannhet

Hyperparameterjustering i Python

Nästa steg

Vad vi vet efter första iterationen:

  • max_depth mellan 8 och 30
  • learn_rate mindre än 1,3
  • min_samples_leaf troligen mindre än 8

Vad 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

Nu kör vi en övning!

Hyperparameterjustering i Python

Preparing Video For Download...