Svagheden 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.
Tak for dine kommentarer!
Spørg AI
Spørg AI
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
Svagheden 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.
Tak for dine kommentarer!