A: come utilizzare traincontrol per controllare i parametri di allenamento


Per valutare quanto bene un modello sia in grado di adattarsi a un set di dati, dobbiamo analizzare le sue prestazioni su osservazioni mai viste prima.

Uno dei modi più comuni per raggiungere questo obiettivo è utilizzare la 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 le funzioni trainControl() e train() dalla libreria caret in R.

La funzione trainControl() viene utilizzata per specificare i parametri di training (ad esempio il tipo di convalida incrociata da utilizzare, il numero di pieghe da utilizzare, ecc.) e la funzione train() viene utilizzata per adattare effettivamente il modello ai dati. .

L’esempio seguente mostra come utilizzare nella pratica le funzioni trainControl() e train() .

Esempio: come utilizzare trainControl() 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

Supponiamo ora di utilizzare la funzione lm() per adattare un modello di regressione lineare multipla a questo set di dati, utilizzando x1 e x2 come variabili predittive e y come variabile di risposta:

 #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

Utilizzando i coefficienti nell’output del modello, possiamo scrivere il modello di regressione adattato:

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

Per avere un’idea del rendimento di questo modello su osservazioni invisibili, possiamo utilizzare la convalida incrociata k-fold.

Il codice seguente mostra come utilizzare la funzione trainControl() del pacchetto caret per specificare la convalida incrociata k-fold ( Method=”cv” ) che utilizza 5 pieghe ( number=5 ).

Passiamo quindi questa funzione trainControl() alla funzione train() per eseguire effettivamente la convalida incrociata k-fold:

 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

Dal risultato possiamo vedere che il modello è stato adattato 5 volte utilizzando ogni volta una dimensione del campione di 8 osservazioni.

Ogni volta, il modello è stato poi utilizzato per prevedere i valori delle 2 osservazioni conservate e ogni volta sono state calcolate le seguenti metriche:

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

Nel risultato viene visualizzata la media dei valori RMSE e MAE per i cinque componenti:

  • RMSE: 3.612302
  • MAE: 3.232153

Queste metriche ci danno un’idea delle prestazioni del modello sui nuovi dati.

In pratica, in genere adattiamo diversi modelli diversi e confrontiamo questi parametri per determinare quale modello offre le migliori prestazioni sui dati invisibili.

Ad esempio, potremmo adattare un modello di regressione polinomiale ed eseguire una convalida incrociata K-fold su di esso per vedere come le metriche RMSE e MAE si confrontano con il modello di regressione lineare multipla.

Nota n. 1: 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.

Nota n.2 : la funzione trainControl() accetta molti potenziali argomenti. Puoi trovare la documentazione completa per questa funzione qui .

Risorse addizionali

Le esercitazioni seguenti forniscono informazioni aggiuntive sui modelli di training:

Introduzione alla convalida incrociata K-Fold
Introduzione alla convalida incrociata Leave-One-Out
Cos’è l’overfitting nell’apprendimento automatico?

Aggiungi un commento

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