Het Gebrek van GridSearchCV
Voordat we GridSearchCV
bespreken, is het belangrijk op te merken dat de KNeighborsClassifier
meer dan één hyperparameter heeft om aan te passen. Tot nu toe hebben we alleen n_neighbors
gebruikt.
Laten we kort twee andere hyperparameters bespreken: weights
en p
.
weights
Zoals je je waarschijnlijk herinnert, werkt KNeighborsClassifier
door de k dichtstbijzijnde buren te vinden. Vervolgens wijst het de meest voorkomende klasse toe onder die buren, ongeacht hoe dichtbij elke buur is.
Een andere benadering is om ook de afstand tot die buur te overwegen, zodat de klassen van de dichtstbijzijnde buren meer gewicht krijgen. Dit kan worden ingesteld met weights='distance'
.
Standaard wordt de eerste benadering gebruikt, wat wordt ingesteld met weights='uniform'
.
p
Er zijn ook verschillende manieren om de afstand te berekenen. De hyperparameter p
bepaalt dit. Laten we illustreren hoe de afstand wordt berekend voor p=1
en p=2
:
p=1
is een Manhattan-afstand;p=2
is een Euclidische afstand die je op school hebt geleerd.
Een p
-parameter kan elke positieve integer aannemen. Er bestaan veel verschillende afstanden, maar deze zijn moeilijker te visualiseren dan bij p=1
of p=2
.
In het vorige hoofdstuk gebruikten we GridSeachCV
om de beste waarde voor n_neighbors
te vinden.
Wat als we de beste combinatie van n_neighbors
, weights
en p
willen vinden?
Dan zou de param_grid
er als volgt uitzien:
param_grid = {'n_neighbors': [1, 3, 5, 7],
'weights': ['distance', 'uniform'],
'p': [1, 2]}
GridSearchCV
probeert alle mogelijke combinaties om de beste te vinden, dus het zal ze allemaal proberen:
Dat is al veel werk. Maar wat als we meer waarden willen proberen?
param_grid = {'n_neighbors': [1, 3, 5, 7, 9, 12, 15, 17, 20, 25],
'weights': ['distance', 'uniform'],
'p': [1, 2, 3, 4, 5]}
Nu zijn er 100 combinaties. En onthoud dat we een model 5 keer moeten trainen en evalueren om de cross-validatiescore te verkrijgen, dus dit proces wordt 500 keer uitgevoerd.
Voor onze kleine dataset is dat geen probleem, maar meestal zijn datasets veel groter en kan het trainen veel tijd kosten. Dit proces 500 keer uitvoeren is in dat geval zeer traag.
Daarom wordt RandomizedSearchCV
vaker gebruikt bij grotere datasets.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.13
Het Gebrek van GridSearchCV
Veeg om het menu te tonen
Voordat we GridSearchCV
bespreken, is het belangrijk op te merken dat de KNeighborsClassifier
meer dan één hyperparameter heeft om aan te passen. Tot nu toe hebben we alleen n_neighbors
gebruikt.
Laten we kort twee andere hyperparameters bespreken: weights
en p
.
weights
Zoals je je waarschijnlijk herinnert, werkt KNeighborsClassifier
door de k dichtstbijzijnde buren te vinden. Vervolgens wijst het de meest voorkomende klasse toe onder die buren, ongeacht hoe dichtbij elke buur is.
Een andere benadering is om ook de afstand tot die buur te overwegen, zodat de klassen van de dichtstbijzijnde buren meer gewicht krijgen. Dit kan worden ingesteld met weights='distance'
.
Standaard wordt de eerste benadering gebruikt, wat wordt ingesteld met weights='uniform'
.
p
Er zijn ook verschillende manieren om de afstand te berekenen. De hyperparameter p
bepaalt dit. Laten we illustreren hoe de afstand wordt berekend voor p=1
en p=2
:
p=1
is een Manhattan-afstand;p=2
is een Euclidische afstand die je op school hebt geleerd.
Een p
-parameter kan elke positieve integer aannemen. Er bestaan veel verschillende afstanden, maar deze zijn moeilijker te visualiseren dan bij p=1
of p=2
.
In het vorige hoofdstuk gebruikten we GridSeachCV
om de beste waarde voor n_neighbors
te vinden.
Wat als we de beste combinatie van n_neighbors
, weights
en p
willen vinden?
Dan zou de param_grid
er als volgt uitzien:
param_grid = {'n_neighbors': [1, 3, 5, 7],
'weights': ['distance', 'uniform'],
'p': [1, 2]}
GridSearchCV
probeert alle mogelijke combinaties om de beste te vinden, dus het zal ze allemaal proberen:
Dat is al veel werk. Maar wat als we meer waarden willen proberen?
param_grid = {'n_neighbors': [1, 3, 5, 7, 9, 12, 15, 17, 20, 25],
'weights': ['distance', 'uniform'],
'p': [1, 2, 3, 4, 5]}
Nu zijn er 100 combinaties. En onthoud dat we een model 5 keer moeten trainen en evalueren om de cross-validatiescore te verkrijgen, dus dit proces wordt 500 keer uitgevoerd.
Voor onze kleine dataset is dat geen probleem, maar meestal zijn datasets veel groter en kan het trainen veel tijd kosten. Dit proces 500 keer uitvoeren is in dat geval zeer traag.
Daarom wordt RandomizedSearchCV
vaker gebruikt bij grotere datasets.
Bedankt voor je feedback!