Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Het Gebrek van GridSearchCV | Modellering
ML Introductie Met Scikit-learn

bookHet 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.

question mark

Het belangrijkste probleem van GridSearchCV is dat het alle mogelijke combinaties (van wat is opgegeven in param_grid) probeert, wat veel tijd kan kosten. Is deze uitspraak correct?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 3.13

bookHet 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.

question mark

Het belangrijkste probleem van GridSearchCV is dat het alle mogelijke combinaties (van wat is opgegeven in param_grid) probeert, wat veel tijd kan kosten. Is deze uitspraak correct?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 7
some-alt