A: hoe traincontrol te gebruiken om trainingsparameters te controleren


Om te beoordelen hoe goed een model in een dataset past, moeten we de prestaties ervan analyseren op basis van waarnemingen die het nog nooit eerder heeft gezien.

Een van de meest gebruikelijke manieren om dit te bereiken is het gebruik van k-voudige kruisvalidatie , waarbij de volgende aanpak wordt gebruikt:

1. Verdeel een dataset willekeurig in k groepen, of ‘vouwen’, van ongeveer gelijke grootte.

2. Kies een van de vouwen als bevestigingsset. Pas de sjabloon aan de resterende k-1-vouwen aan. Bereken de MSE-proef op de waarnemingen in de gespannen lamel.

3. Herhaal dit proces k keer, telkens met een andere set als uitsluitingsset.

4. Bereken de totale test-MSE als het gemiddelde van de k- test-MSE’s.

De eenvoudigste manier om k-voudige kruisvalidatie uit te voeren in R is door de functies trainControl() en train() uit de caret- bibliotheek in R te gebruiken.

De functie trainControl() wordt gebruikt om de trainingsparameters te specificeren (bijvoorbeeld het type kruisvalidatie dat moet worden gebruikt, het aantal te gebruiken vouwen, enz.) en de functie train() wordt gebruikt om het model daadwerkelijk aan de gegevens aan te passen. .

Het volgende voorbeeld laat zien hoe u de functies trainControl() en train() in de praktijk kunt gebruiken.

Voorbeeld: Hoe trainControl() te gebruiken 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

Stel nu dat we de functie lm() gebruiken om een meervoudig lineair regressiemodel aan deze dataset aan te passen, waarbij we x1 en x2 als voorspellende variabelen gebruiken en y als de responsvariabele:

 #fit multiple linear regression model to data
fit <- lm(y ~ x1 + x2, data=df)

#view model summary
summary(fit)

Call:
lm(formula = y ~ x1 + x2, data = df)

Residuals:
    Min 1Q Median 3Q Max 
-3.6650 -1.9228 -0.3684 1.2783 5.0208 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept) 21.2672 6.9927 3.041 0.0188 *
x1 0.7803 0.6942 1.124 0.2981  
x2 -1.1253 0.4251 -2.647 0.0331 *
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.093 on 7 degrees of freedom
Multiple R-squared: 0.801, Adjusted R-squared: 0.7441 
F-statistic: 14.09 on 2 and 7 DF, p-value: 0.003516

Met behulp van de coëfficiënten in de modeluitvoer kunnen we het gepaste regressiemodel schrijven:

y = 21,2672 + 0,7803*(x 1 ) – 1,1253(x 2 )

Om een idee te krijgen van hoe goed dit model presteert op onzichtbare waarnemingen , kunnen we k-voudige kruisvalidatie gebruiken.

De volgende code laat zien hoe u de trainControl() -functie van het caret- pakket kunt gebruiken om k-fold kruisvalidatie ( method=“cv“ ) op te geven die 5 folds ( number=5 ) gebruikt.

Vervolgens geven we deze trainControl()- functie door aan de train() -functie om daadwerkelijk de k-voudige kruisvalidatie uit te voeren:

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " cv ", number = 5 )

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

#view summary of k-fold CV               
print (model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 8, 8, 8, 8, 8 
Resampling results:

  RMSE Rsquared MAE     
  3.612302 1 3.232153

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

Uit het resultaat kunnen we opmaken dat het model vijf keer werd aangepast met een steekproefomvang van telkens acht waarnemingen.

Telkens werd het model vervolgens gebruikt om de waarden van de 2 bewaarde waarnemingen te voorspellen en telkens werden de volgende statistieken berekend:

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

In het resultaat wordt het gemiddelde van de RMSE- en MAE-waarden voor de vijf componenten weergegeven:

  • RMSE: 3.612302
  • MAE: 3.232153

Deze statistieken geven ons een idee van de prestaties van het model op nieuwe gegevens.

In de praktijk passen we doorgaans verschillende modellen toe en vergelijken we deze statistieken om te bepalen welk model het beste presteert op onzichtbare gegevens.

We zouden bijvoorbeeld een polynoom regressiemodel kunnen passen en er K-voudige kruisvalidatie op kunnen uitvoeren om te zien hoe de RMSE- en MAE-metrieken zich verhouden tot het meervoudige lineaire regressiemodel.

Opmerking #1: In dit voorbeeld kiezen we ervoor om k=5 vouwen te gebruiken, maar u kunt elk gewenst aantal vouwen kiezen. In de praktijk kiezen we doorgaans tussen 5 en 10 lagen, omdat dit het optimale aantal lagen blijkt te zijn dat betrouwbare testfoutpercentages oplevert.

Opmerking #2 : De functie trainControl() accepteert veel potentiële argumenten. De volledige documentatie voor deze functie vindt u hier .

Aanvullende bronnen

De volgende zelfstudies bieden aanvullende informatie over trainingsmodellen:

Inleiding tot K-voudige kruisvalidatie
Inleiding tot Leave-One-Out-kruisvalidatie
Wat is overfitting in machine learning?

Einen Kommentar hinzufügen

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