Come eseguire l'insaccamento in r (passo dopo passo)
Quando creiamo un albero decisionale per un determinato set di dati, utilizziamo solo un singolo set di dati di addestramento per costruire il modello.
Tuttavia, lo svantaggio di utilizzare un unico albero decisionale è che tende a soffrire di un’elevata varianza . Cioè, se dividiamo il set di dati in due metà e applichiamo l’albero decisionale a entrambe le metà, i risultati potrebbero essere molto diversi.
Un metodo che possiamo utilizzare per ridurre la varianza di un singolo albero decisionale è noto come bagging , a volte chiamato aggregazione bootstrap .
L’insaccamento funziona come segue:
1. Prendi b campioni bootstrap dal set di dati originale.
2. Creare un albero decisionale per ciascun campione di bootstrap.
3. Media delle previsioni di ciascun albero per ottenere un modello finale.
Costruendo centinaia o addirittura migliaia di alberi decisionali individuali e prendendo le previsioni medie di tutti gli alberi, spesso ci ritroviamo con un modello a sacco che produce un tasso di errore di test molto più basso rispetto a un singolo albero decisionale.
Questo tutorial fornisce un esempio passo passo di come creare un modello con bag in R.
Passaggio 1: caricare i pacchetti necessari
Innanzitutto, caricheremo i pacchetti necessari per questo esempio:
library (dplyr) #for data wrangling library (e1071) #for calculating variable importance library (caret) #for general model fitting library (rpart) #for fitting decision trees library (ipred) #for fitting bagged decision trees
Passaggio 2: montare il modello con busta
Per questo esempio, utilizzeremo un set di dati R integrato chiamato Air Quality che contiene misurazioni della qualità dell’aria a New York City nell’arco di 153 giorni individuali.
#view structure of air quality dataset
str(airquality)
'data.frame': 153 obs. of 6 variables:
$ Ozone: int 41 36 12 18 NA 28 23 19 8 NA ...
$Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind: num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp: int 67 72 74 62 56 66 65 59 61 69 ...
$Month: int 5 5 5 5 5 5 5 5 5 5 ...
$Day: int 1 2 3 4 5 6 7 8 9 10 ...
Il codice seguente mostra come adattare un modello con bag in R utilizzando la funzione bagging() dalla libreria ipred .
#make this example reproducible set.seed(1) #fit the bagged model bag <- bagging( formula = Ozone ~ ., data = airquality, nbagg = 150 , coob = TRUE , control = rpart. control (minsplit = 2 , cp = 0 ) ) #display fitted bagged model bag Bagging regression trees with 150 bootstrap replications Call: bagging.data.frame(formula = Ozone ~ ., data = airquality, nbagg = 150, coob = TRUE, control = rpart.control(minsplit = 2, cp = 0)) Out-of-bag estimate of root mean squared error: 17.4973
Tieni presente che abbiamo scelto di utilizzare 150 campioni sottoposti a bootstrap per creare il modello in bag e abbiamo specificato che coob è TRUE per ottenere l’errore stimato di out-of-bag.
Abbiamo utilizzato anche le seguenti specifiche nella funzione rpart.control() :
- minsplit = 2: indica al modello di richiedere solo 2 osservazioni in un nodo per la divisione.
- cp = 0 . Questo è il parametro della complessità. Impostandolo su 0, non richiediamo che il modello sia in grado di migliorare l’adattamento generale in alcun modo per eseguire una divisione.
Essenzialmente, questi due argomenti consentono ai singoli alberi di crescere estremamente in profondità, portando ad alberi con varianza elevata ma bassa distorsione. Quindi, quando applichiamo il bagging, siamo in grado di ridurre la varianza del modello finale mantenendo bassa la distorsione.
Dai risultati del modello, possiamo vedere che l’RMSE out-of-bag stimato è 17.4973 . Questa è la differenza media tra il valore previsto per l’ozono e il valore effettivamente osservato.
Passaggio 3: visualizzare l’importanza dei predittori
Sebbene i modelli con contenitori tendano a fornire previsioni più accurate rispetto ai singoli alberi decisionali, è difficile interpretare e visualizzare i risultati dei modelli con contenitori adattati.
Possiamo, tuttavia, visualizzare l’importanza delle variabili predittive calcolando la riduzione totale dell’RSS (somma residua dei quadrati) dovuta alla distribuzione su un dato predittore, mediata su tutti gli alberi. Maggiore è il valore, più importante è il predittore.
Il codice seguente mostra come creare un grafico di importanza variabile per il modello di borsa aderente, utilizzando la funzione varImp() dalla libreria caret :
#calculate variable importance VI <- data.frame(var= names (airquality[,-1]), imp= varImp (bag)) #sort variable importance descending VI_plot <- VI[ order (VI$Overall, decreasing= TRUE ),] #visualize variable importance with horizontal bar plot barplot(VI_plot$Overall, names.arg= rownames (VI_plot), horiz= TRUE , col=' steelblue ', xlab=' Variable Importance ')
Possiamo vedere che Solar.R è la variabile predittiva più importante nel modello mentre Month è la meno importante.
Passaggio 4: utilizzare il modello per fare previsioni
Infine, possiamo utilizzare il modello della borsa attrezzata per fare previsioni su nuove osservazioni.
#define new observation new <- data.frame(Solar.R=150, Wind=8, Temp=70, Month=5, Day=5) #use fitted bagged model to predict Ozone value of new observation predict(bag, newdata=new) 24.4866666666667
Sulla base dei valori delle variabili predittive, il modello della borsa attrezzata prevede che il valore dell’ozono sarà 24.487 in questo particolare giorno.
Il codice R completo utilizzato in questo esempio può essere trovato qui .