Convalida incrociata k-fold in r (passo dopo passo)


Per valutare le prestazioni di un modello su un set di dati, dobbiamo misurare quanto bene le previsioni fatte dal modello corrispondono ai dati osservati.

Un metodo comunemente utilizzato per eseguire questa operazione è noto come convalida incrociata k-fold , che utilizza il seguente approccio:

1. Dividere casualmente un set di dati in k gruppi, o “pieghe”, di dimensioni approssimativamente uguali.

2. Scegli una delle pieghe come set di ritenuta. Adatta il modello alle restanti pieghe k-1. Calcolare il test MSE sulle osservazioni nello strato che è stato tensionato.

3. Ripetere questo processo k volte, ogni volta utilizzando un insieme diverso come insieme di esclusione.

4. Calcolare l’MSE complessivo del test come media dei k MSE del test.

Il modo più semplice per eseguire la convalida incrociata k-fold in R è utilizzare la funzione trainControl() dalla libreria caret in R.

Questo tutorial fornisce un rapido esempio di come utilizzare questa funzione per eseguire la convalida incrociata k-fold per un determinato modello in R.

Esempio: convalida incrociata K-Fold in R

Supponiamo di avere il seguente set di dati in R:

 #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

Il codice seguente mostra come adattare un modello di regressione lineare multipla a questo set di dati in R ed eseguire una convalida incrociata k-fold con k = 5 volte per valutare le prestazioni del modello:

 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.018979 1 2.882348

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

Ecco come interpretare il risultato:

  • Non è stata effettuata alcuna preelaborazione. Cioè, non abbiamo ridimensionato i dati in alcun modo prima di adattarli ai modelli.
  • Il metodo di ricampionamento utilizzato per valutare il modello è stato la convalida incrociata 5 volte.
  • La dimensione del campione per ciascun set di formazione era di 8.
  • RMSE: errore quadratico medio. Questo misura la differenza media tra le previsioni fatte dal modello e le osservazioni effettive. Più basso è l’RMSE, più accuratamente un modello può prevedere le osservazioni effettive.
  • Rsquared: questa è una misura della correlazione tra le previsioni fatte dal modello e le osservazioni effettive. Quanto più alto è l’R quadrato, tanto più accuratamente un modello può prevedere le osservazioni reali.
  • MAE: L’errore medio assoluto. Questa è la differenza media assoluta tra le previsioni fatte dal modello e le osservazioni effettive. Più basso è il MAE, più accuratamente un modello può prevedere le osservazioni effettive.

Ognuna delle tre misurazioni fornite nel risultato (RMSE, R-quadrato e MAE) ci dà un’idea della performance del modello su dati non pubblicati.

In pratica, in genere adattiamo diversi modelli diversi e confrontiamo i tre parametri forniti dai risultati qui presentati per decidere quale modello produce i tassi di errore di test più bassi ed è quindi il modello migliore da utilizzare.

Possiamo utilizzare il seguente codice per esaminare l’adattamento del modello finale:

 #view final model
model$finalModel

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
(Intercept) x1 x2  
    21.2672 0.7803 -1.1253  

Il modello finale risulta essere:

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

Possiamo utilizzare il seguente codice per visualizzare le previsioni del modello effettuate per ciascuna piega:

 #view predictions for each fold
model$resample

      RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5

Tieni presente che in questo esempio scegliamo di utilizzare k=5 pieghe, ma puoi scegliere qualsiasi numero di pieghe desideri. In pratica, in genere scegliamo tra 5 e 10 strati, poiché questo risulta essere il numero ottimale di strati che produce tassi di errore di prova affidabili.

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *