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?