Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Svagheden Ved Gridsearchcv | Modellering
ML Introduktion med Scikit-learn

bookSvagheden Ved Gridsearchcv

Før vi diskuterer GridSearchCV, bør det bemærkes, at KNeighborsClassifier har mere end én hyperparameter at justere. Indtil nu har vi kun brugt n_neighbors.

Lad os kort diskutere to andre hyperparametre: weights og p.

weights

Som du sikkert husker, fungerer KNeighborsClassifier ved at finde de k nærmeste naboer. Derefter tildeles den mest hyppige klasse blandt disse naboer, uanset hvor tæt hver enkelt er.

En anden tilgang er også at tage højde for afstanden til naboen, så de nærmeste naboers klasser vægtes højere. Dette kan gøres ved at sætte weights='distance'.

Som standard anvendes den første tilgang, hvilket indstilles med weights='uniform'.

p

Der findes også forskellige måder at beregne afstanden på. p-hyperparameteren styrer dette. Lad os illustrere, hvordan afstanden beregnes for p=1 og p=2:

  • p=1 er en Manhattan-afstand;
  • p=2 er en Euklidisk afstand, som du lærte i skolen.

En p-parameter kan antage ethvert positivt heltal. Der findes mange forskellige afstande, men de er sværere at visualisere end p=1 eller p=2.

I det forrige kapitel brugte vi GridSeachCV til at finde den bedste værdi af n_neighbors.
Hvad nu hvis vi ønskede at finde den bedste kombination af n_neighbors, weights og p? Så ville param_grid se således ud:

param_grid = {'n_neighbors': [1, 3, 5, 7],
                         'weights': ['distance', 'uniform'],
                         'p': [1, 2]}

GridSearchCV afprøver alle mulige kombinationer for at finde den bedste, så den vil prøve dem alle:

Det er allerede en del arbejde. Men hvad nu, hvis vi vil afprøve flere værdier?

param_grid = {'n_neighbors': [1, 3, 5, 7, 9, 12, 15, 17, 20, 25],
                         'weights': ['distance', 'uniform'],
                         'p': [1, 2, 3, 4, 5]}

Nu er der 100 kombinationer. Og husk, at vi skal træne og evaluere en model 5 gange for at få dens krydsvalideringsscore, så denne proces udføres 500 gange.

Det er ikke et problem for vores lille datasæt, men normalt er datasæt meget større, og træning kan tage lang tid. At udføre denne proces 500 gange er smertefuldt langsomt i sådanne tilfælde. Derfor bruges RandomizedSearchCV oftere til større datasæt.

question mark

Hovedproblemet med GridSearchCV er, at den afprøver alle mulige kombinationer (af det, der er angivet i param_grid), hvilket kan tage meget lang tid. Er denne påstand korrekt?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 7

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 3.13

bookSvagheden Ved Gridsearchcv

Stryg for at vise menuen

Før vi diskuterer GridSearchCV, bør det bemærkes, at KNeighborsClassifier har mere end én hyperparameter at justere. Indtil nu har vi kun brugt n_neighbors.

Lad os kort diskutere to andre hyperparametre: weights og p.

weights

Som du sikkert husker, fungerer KNeighborsClassifier ved at finde de k nærmeste naboer. Derefter tildeles den mest hyppige klasse blandt disse naboer, uanset hvor tæt hver enkelt er.

En anden tilgang er også at tage højde for afstanden til naboen, så de nærmeste naboers klasser vægtes højere. Dette kan gøres ved at sætte weights='distance'.

Som standard anvendes den første tilgang, hvilket indstilles med weights='uniform'.

p

Der findes også forskellige måder at beregne afstanden på. p-hyperparameteren styrer dette. Lad os illustrere, hvordan afstanden beregnes for p=1 og p=2:

  • p=1 er en Manhattan-afstand;
  • p=2 er en Euklidisk afstand, som du lærte i skolen.

En p-parameter kan antage ethvert positivt heltal. Der findes mange forskellige afstande, men de er sværere at visualisere end p=1 eller p=2.

I det forrige kapitel brugte vi GridSeachCV til at finde den bedste værdi af n_neighbors.
Hvad nu hvis vi ønskede at finde den bedste kombination af n_neighbors, weights og p? Så ville param_grid se således ud:

param_grid = {'n_neighbors': [1, 3, 5, 7],
                         'weights': ['distance', 'uniform'],
                         'p': [1, 2]}

GridSearchCV afprøver alle mulige kombinationer for at finde den bedste, så den vil prøve dem alle:

Det er allerede en del arbejde. Men hvad nu, hvis vi vil afprøve flere værdier?

param_grid = {'n_neighbors': [1, 3, 5, 7, 9, 12, 15, 17, 20, 25],
                         'weights': ['distance', 'uniform'],
                         'p': [1, 2, 3, 4, 5]}

Nu er der 100 kombinationer. Og husk, at vi skal træne og evaluere en model 5 gange for at få dens krydsvalideringsscore, så denne proces udføres 500 gange.

Det er ikke et problem for vores lille datasæt, men normalt er datasæt meget større, og træning kan tage lang tid. At udføre denne proces 500 gange er smertefuldt langsomt i sådanne tilfælde. Derfor bruges RandomizedSearchCV oftere til større datasæt.

question mark

Hovedproblemet med GridSearchCV er, at den afprøver alle mulige kombinationer (af det, der er angivet i param_grid), hvilket kan tage meget lang tid. Er denne påstand korrekt?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 7
some-alt