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

bookSvakheten Ved Gridsearchcv

Før vi diskuterer GridSearchCV, bør det bemerkes at KNeighborsClassifier har flere enn én hyperparameter som kan justeres. Til nå har vi kun brukt n_neighbors.

La oss kort diskutere to andre hyperparametere: weights og p.

weights

Som du kanskje husker, fungerer KNeighborsClassifier ved å finne de k nærmeste naboene. Deretter tildeles den mest vanlige klassen blant disse naboene, uavhengig av hvor nær hver enkelt er.

En annen tilnærming er å også ta hensyn til avstanden til naboen, slik at klassene til de nærmeste naboene får større vekt. Dette kan gjøres ved å sette weights='distance'.

Som standard brukes den første tilnærmingen, som settes med weights='uniform'.

p

Det finnes også ulike måter å beregne avstanden på. Hyperparameteren p styrer dette. La oss illustrere hvordan avstanden beregnes for p=1 og p=2:

  • p=1 er en Manhattan-avstand;
  • p=2 er en Euklidsk avstand som du lærte om på skolen.

En p-parameter kan ha enhver positiv heltallverdi. Det finnes mange ulike avstander, men de er vanskeligere å visualisere enn p=1 eller p=2.

I forrige kapittel brukte vi GridSeachCV for å finne den beste verdien for n_neighbors.
Hva om vi ønsket å finne den beste kombinasjonen av n_neighbors, weights og p? Da ville param_grid sett slik ut:

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

GridSearchCV prøver alle mulige kombinasjoner for å finne den beste, så den vil prøve alle disse:

Det er allerede mye arbeid. Men hva om vi ønsker å prøve flere verdier?

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

Nå finnes det 100 kombinasjoner. Og husk at vi må trene og evaluere en modell 5 ganger for å få dens kryssvalideringsscore, så denne prosessen gjentas 500 ganger.

Dette er ikke et problem for vårt lille datasett, men vanligvis er datasett mye større, og trening kan ta mye tid. Å gjennomføre denne prosessen 500 ganger er smertefullt tregt i slike tilfeller. Derfor brukes RandomizedSearchCV oftere for større datasett.

question mark

Hovedproblemet med GridSearchCV er at den prøver alle mulige kombinasjoner (av det som er spesifisert i param_grid), noe som kan ta mye tid. Er denne påstanden korrekt?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 7

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 3.13

bookSvakheten Ved Gridsearchcv

Sveip for å vise menyen

Før vi diskuterer GridSearchCV, bør det bemerkes at KNeighborsClassifier har flere enn én hyperparameter som kan justeres. Til nå har vi kun brukt n_neighbors.

La oss kort diskutere to andre hyperparametere: weights og p.

weights

Som du kanskje husker, fungerer KNeighborsClassifier ved å finne de k nærmeste naboene. Deretter tildeles den mest vanlige klassen blant disse naboene, uavhengig av hvor nær hver enkelt er.

En annen tilnærming er å også ta hensyn til avstanden til naboen, slik at klassene til de nærmeste naboene får større vekt. Dette kan gjøres ved å sette weights='distance'.

Som standard brukes den første tilnærmingen, som settes med weights='uniform'.

p

Det finnes også ulike måter å beregne avstanden på. Hyperparameteren p styrer dette. La oss illustrere hvordan avstanden beregnes for p=1 og p=2:

  • p=1 er en Manhattan-avstand;
  • p=2 er en Euklidsk avstand som du lærte om på skolen.

En p-parameter kan ha enhver positiv heltallverdi. Det finnes mange ulike avstander, men de er vanskeligere å visualisere enn p=1 eller p=2.

I forrige kapittel brukte vi GridSeachCV for å finne den beste verdien for n_neighbors.
Hva om vi ønsket å finne den beste kombinasjonen av n_neighbors, weights og p? Da ville param_grid sett slik ut:

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

GridSearchCV prøver alle mulige kombinasjoner for å finne den beste, så den vil prøve alle disse:

Det er allerede mye arbeid. Men hva om vi ønsker å prøve flere verdier?

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

Nå finnes det 100 kombinasjoner. Og husk at vi må trene og evaluere en modell 5 ganger for å få dens kryssvalideringsscore, så denne prosessen gjentas 500 ganger.

Dette er ikke et problem for vårt lille datasett, men vanligvis er datasett mye større, og trening kan ta mye tid. Å gjennomføre denne prosessen 500 ganger er smertefullt tregt i slike tilfeller. Derfor brukes RandomizedSearchCV oftere for større datasett.

question mark

Hovedproblemet med GridSearchCV er at den prøver alle mulige kombinasjoner (av det som er spesifisert i param_grid), noe som kan ta mye tid. Er denne påstanden korrekt?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 7
some-alt