Leave-one-out kruisvalidatie in r (met voorbeelden)


Om de prestaties van een model op een dataset te evalueren, moeten we meten hoe goed de voorspellingen van het model overeenkomen met de waargenomen gegevens.

Een veelgebruikte methode om dit te doen staat bekend als Leave-One-Out Cross-Validation (LOOCV) , waarbij de volgende aanpak wordt gebruikt:

1. Splits een dataset op in een trainingsset en een testset, waarbij op één na alle observaties worden gebruikt als onderdeel van de trainingsset.

2. Maak een model met alleen gegevens uit de trainingsset.

3. Gebruik het model om de responswaarde te voorspellen van de waarneming die is uitgesloten van het model en bereken de gemiddelde kwadratische fout (MSE).

4. Herhaal dit proces n keer. Bereken de test-MSE als het gemiddelde van alle test-MSE’s.

De eenvoudigste manier om LOOCV in R uit te voeren is door de functie trainControl() uit de caret- bibliotheek in R te gebruiken.

Deze tutorial geeft een snel voorbeeld van hoe u deze functie kunt gebruiken om LOOCV uit te voeren voor een bepaald model in R.

Voorbeeld: Leave-One-Out kruisvalidatie in R

Stel dat we de volgende dataset in R hebben:

 #create data frame
df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                 x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                 x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))

#view data frame
df

y x1 x2
6 2 14
8 5 12
12 4 12
14 3 13
14 4 7
15 6 8
17 7 7
22 5 4
24 8 6
23 9 5

De volgende code laat zien hoe u een meervoudig lineair regressiemodel aan deze gegevensset in R kunt aanpassen en LOOCV kunt uitvoeren om de prestaties van het model te evalueren:

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " LOOCV ")

#fit a regression model and use LOOCV to evaluate performance
model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl)

#view summary of LOOCV               
print(model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Leave-One-Out Cross-Validation 
Summary of sample sizes: 9, 9, 9, 9, 9, 9, ... 
Resampling results:

  RMSE Rsquared MAE     
  3.619456 0.6186766 3.146155

Tuning parameter 'intercept' was held constant at a value of TRUE

Zo interpreteert u het resultaat:

  • Er werden 10 verschillende monsters gebruikt om 10 modellen te bouwen. Elk model gebruikte twee voorspellende variabelen.
  • Er heeft geen voorbewerking plaatsgevonden. Dat wil zeggen dat we de gegevens op geen enkele manier hebben geschaald voordat we de modellen hebben aangepast.
  • De resamplingmethode die we gebruikten om de 10 monsters te genereren, was Leave-One-Out-kruisvalidatie.
  • De steekproefomvang voor elke trainingsset was 9.
  • RMSE: wortelgemiddelde kwadratische fout. Dit meet het gemiddelde verschil tussen de voorspellingen van het model en de daadwerkelijke waarnemingen. Hoe lager de RMSE, hoe nauwkeuriger een model daadwerkelijke waarnemingen kan voorspellen.
  • Rsquared: Dit is een maatstaf voor de correlatie tussen voorspellingen van het model en feitelijke waarnemingen. Hoe hoger het R-kwadraat, hoe nauwkeuriger een model feitelijke waarnemingen kan voorspellen.
  • MAE: De gemiddelde absolute fout. Dit is het gemiddelde absolute verschil tussen de voorspellingen van het model en de feitelijke waarnemingen. Hoe lager de MAE, hoe nauwkeuriger een model daadwerkelijke waarnemingen kan voorspellen.

Elk van de drie metingen in het resultaat (RMSE, R-kwadraat en MAE) geeft ons een idee van de prestaties van het model op basis van niet-gepubliceerde gegevens.

In de praktijk passen we doorgaans verschillende modellen toe en vergelijken we de drie meetgegevens die de hier gepresenteerde resultaten opleveren om te beslissen welk model de laagste testfoutenpercentages oplevert en daarom het beste model is om te gebruiken.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert