Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Kruisvalidering | Modellering
ML-Introductie Met Scikit-Learn

bookKruisvalidering

In het vorige hoofdstuk werd de train-test-split gebruikt voor modelevaluatie. Deze methode heeft twee belangrijke nadelen:

  1. Beperkte trainingsdata: slechts een deel van de dataset wordt gebruikt voor training, terwijl meer data over het algemeen de prestaties verbetert.
  2. Afhankelijkheid van de splitsing: omdat de splitsing willekeurig is, kunnen de resultaten merkbaar variëren tussen verschillende runs.

Om deze problemen aan te pakken, wordt een alternatieve evaluatiemethode gebruikt, genaamd cross-validatie.

Verdeel eerst de volledige dataset in 5 gelijke delen, bekend als folds.

Gebruik vervolgens één fold als testset en combineer de overige folds om de trainingsset te vormen.

Zoals bij elk evaluatieproces wordt de trainingset gebruikt om het model te trainen, terwijl de testset wordt gebruikt om de prestaties te meten.

Het proces wordt herhaald zodat elke fold één keer als testset fungeert, terwijl de overige folds de trainingset vormen.

Dit proces levert vijf nauwkeurigheidsscores op, één uit elke splitsing. Het nemen van het gemiddelde van deze scores geeft de gemiddelde modelprestatie.

In Python kan de cross-validatiescore worden berekend met cross_val_score() uit de module sklearn.model_selection.

Note
Opmerking

Hoewel het voorbeeld 5 vouwen gebruikt, kun je elke gewenste hoeveelheid vouwen kiezen voor kruisvalidatie. Je kunt bijvoorbeeld 10 vouwen gebruiken, waarbij je er 9 toewijst aan de trainingsset en 1 aan de testset. Dit is aanpasbaar via de cv parameter in de functie cross_val_score().

1234567891011
import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
copy

Het levert stabielere en betrouwbaardere resultaten op dan de train-test split methode; echter, het is aanzienlijk trager omdat het model vijf keer (of n keer als je n vouwen instelt) getraind en geëvalueerd moet worden, in vergelijking met slechts één keer bij de train-test split.

Kruisvalidatie wordt doorgaans gebruikt bij hyperparameterafstemming, waarbij het volledige kruisvalidatieproces wordt uitgevoerd voor elke mogelijke hyperparameterwaarde.

Bijvoorbeeld, bij het bepalen van het optimale aantal buren in een k-nearest neighbors algoritme, voer je een volledige ronde kruisvalidatie uit voor elke kandidaatwaarde. Deze methode zorgt voor een grondige evaluatie van elke hyperparameterinstelling over de gehele dataset, waardoor je de waarde kunt selecteren die consistent de beste prestaties oplevert.

question mark

Waarom kan kruisvalidatie de voorkeur hebben boven een train-test-splitsing voor het evalueren van de prestaties van een machine learning-model?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 4

Vraag AI

expand

Vraag AI

ChatGPT

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

Suggested prompts:

Can you explain how cross-validation improves model evaluation compared to train-test split?

What are some common use cases for cross-validation in machine learning?

How do I choose the number of folds for cross-validation?

Awesome!

Completion rate improved to 3.13

bookKruisvalidering

Veeg om het menu te tonen

In het vorige hoofdstuk werd de train-test-split gebruikt voor modelevaluatie. Deze methode heeft twee belangrijke nadelen:

  1. Beperkte trainingsdata: slechts een deel van de dataset wordt gebruikt voor training, terwijl meer data over het algemeen de prestaties verbetert.
  2. Afhankelijkheid van de splitsing: omdat de splitsing willekeurig is, kunnen de resultaten merkbaar variëren tussen verschillende runs.

Om deze problemen aan te pakken, wordt een alternatieve evaluatiemethode gebruikt, genaamd cross-validatie.

Verdeel eerst de volledige dataset in 5 gelijke delen, bekend als folds.

Gebruik vervolgens één fold als testset en combineer de overige folds om de trainingsset te vormen.

Zoals bij elk evaluatieproces wordt de trainingset gebruikt om het model te trainen, terwijl de testset wordt gebruikt om de prestaties te meten.

Het proces wordt herhaald zodat elke fold één keer als testset fungeert, terwijl de overige folds de trainingset vormen.

Dit proces levert vijf nauwkeurigheidsscores op, één uit elke splitsing. Het nemen van het gemiddelde van deze scores geeft de gemiddelde modelprestatie.

In Python kan de cross-validatiescore worden berekend met cross_val_score() uit de module sklearn.model_selection.

Note
Opmerking

Hoewel het voorbeeld 5 vouwen gebruikt, kun je elke gewenste hoeveelheid vouwen kiezen voor kruisvalidatie. Je kunt bijvoorbeeld 10 vouwen gebruiken, waarbij je er 9 toewijst aan de trainingsset en 1 aan de testset. Dit is aanpasbaar via de cv parameter in de functie cross_val_score().

1234567891011
import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
copy

Het levert stabielere en betrouwbaardere resultaten op dan de train-test split methode; echter, het is aanzienlijk trager omdat het model vijf keer (of n keer als je n vouwen instelt) getraind en geëvalueerd moet worden, in vergelijking met slechts één keer bij de train-test split.

Kruisvalidatie wordt doorgaans gebruikt bij hyperparameterafstemming, waarbij het volledige kruisvalidatieproces wordt uitgevoerd voor elke mogelijke hyperparameterwaarde.

Bijvoorbeeld, bij het bepalen van het optimale aantal buren in een k-nearest neighbors algoritme, voer je een volledige ronde kruisvalidatie uit voor elke kandidaatwaarde. Deze methode zorgt voor een grondige evaluatie van elke hyperparameterinstelling over de gehele dataset, waardoor je de waarde kunt selecteren die consistent de beste prestaties oplevert.

question mark

Waarom kan kruisvalidatie de voorkeur hebben boven een train-test-splitsing voor het evalueren van de prestaties van een machine learning-model?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 4
some-alt