Ogni albero nella foresta è costruito da un campione bootstrap delle osservazioni nei dati di allenamento. Quelle osservazioni nel campione bootstrap costruiscono l'albero, mentre quelle non nel campione bootstrap formano i campioni out-of-bag (o OOB).
Dovrebbe essere chiaro che le stesse variabili sono disponibili per i casi nei dati utilizzati per costruire un albero come per i casi nell'esempio OOB. Per ottenere previsioni per l'esempio OOB, ognuno viene passato lungo l'albero corrente e le regole per l'albero vengono seguite fino a quando non arriva in un nodo terminale. Ciò produce le previsioni OOB per quel particolare albero.
Questo processo viene ripetuto un gran numero di volte, ogni albero viene addestrato su un nuovo campione bootstrap dai dati di addestramento e dalle previsioni per i nuovi campioni OOB derivati.
Man mano che aumenta il numero di alberi, ogni campione sarà nei campioni OOB più di una volta, quindi la "media" delle previsioni sugli alberi N in cui un campione è nell'OB è utilizzata come previsione OOB per ciascun campione di addestramento per alberi 1, ..., N. Per "media" utilizziamo la media delle previsioni per una risposta continua, oppure il voto della maggioranza può essere usato per una risposta categoriale (il voto della maggioranza è la classe con il maggior numero di voti sull'insieme di alberi 1, ..., N).
Ad esempio, supponiamo di avere le seguenti previsioni OOB per 10 campioni in training impostati su 10 alberi
set.seed(123)
oob.p <- matrix(rpois(100, lambda = 4), ncol = 10)
colnames(oob.p) <- paste0("tree", seq_len(ncol(oob.p)))
rownames(oob.p) <- paste0("samp", seq_len(nrow(oob.p)))
oob.p[sample(length(oob.p), 50)] <- NA
oob.p
> oob.p
tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1 NA NA 7 8 2 1 NA 5 3 2
samp2 6 NA 5 7 3 NA NA NA NA NA
samp3 3 NA 5 NA NA NA 3 5 NA NA
samp4 6 NA 10 6 NA NA 3 NA 6 NA
samp5 NA 2 NA NA 2 NA 6 4 NA NA
samp6 NA 7 NA 4 NA 2 4 2 NA NA
samp7 NA NA NA 5 NA NA NA 3 9 5
samp8 7 1 4 NA NA 5 6 NA 7 NA
samp9 4 NA NA 3 NA 7 6 3 NA NA
samp10 4 8 2 2 NA NA 4 NA NA 4
Dove NA
significa che il campione era nei dati di addestramento per quell'albero (in altre parole non era nel campione OOB).
La media dei non NA
valori per ogni riga fornisce la previsione OOB per ciascun campione, per l' intera foresta
> rowMeans(oob.p, na.rm = TRUE)
samp1 samp2 samp3 samp4 samp5 samp6 samp7 samp8 samp9 samp10
4.00 5.25 4.00 6.20 3.50 3.80 5.50 5.00 4.60 4.00
Man mano che ogni albero viene aggiunto alla foresta, possiamo calcolare l'errore OOB fino a includere quell'albero. Ad esempio, di seguito sono indicati i mezzi cumulativi per ciascun campione:
FUN <- function(x) {
na <- is.na(x)
cs <- cumsum(x[!na]) / seq_len(sum(!na))
x[!na] <- cs
x
}
t(apply(oob.p, 1, FUN))
> print(t(apply(oob.p, 1, FUN)), digits = 3)
tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1 NA NA 7.00 7.50 5.67 4.50 NA 4.6 4.33 4.0
samp2 6 NA 5.50 6.00 5.25 NA NA NA NA NA
samp3 3 NA 4.00 NA NA NA 3.67 4.0 NA NA
samp4 6 NA 8.00 7.33 NA NA 6.25 NA 6.20 NA
samp5 NA 2 NA NA 2.00 NA 3.33 3.5 NA NA
samp6 NA 7 NA 5.50 NA 4.33 4.25 3.8 NA NA
samp7 NA NA NA 5.00 NA NA NA 4.0 5.67 5.5
samp8 7 4 4.00 NA NA 4.25 4.60 NA 5.00 NA
samp9 4 NA NA 3.50 NA 4.67 5.00 4.6 NA NA
samp10 4 6 4.67 4.00 NA NA 4.00 NA NA 4.0
In questo modo vediamo come la previsione viene accumulata sugli N alberi nella foresta fino a una data iterazione. Se leggi le righe, la più a destra non-NA
valore è quello che mostro sopra per la previsione OOB. È così che possono essere fatte tracce delle prestazioni OOB: un RMSEP può essere calcolato per i campioni OOB in base alle previsioni OOB accumulate cumulativamente sugli N alberi.
Si noti che il codice R mostrato non è ricavato dall'interno del codice randomForest in randomForest pacchetto per R - Ho appena un po 'di codice semplice in modo da poter seguire ciò che sta succedendo una volta determinate le previsioni da ciascun albero.
È perché ogni albero è costruito da un campione bootstrap e che ci sono molti alberi in una foresta casuale, in modo tale che ogni osservazione dell'insieme di addestramento sia nell'esempio OOB per uno o più alberi, che le previsioni OOB possono essere fornite per tutti campioni nei dati di addestramento.
Ho risolto problemi come la mancanza di dati per alcuni casi OOB ecc., Ma questi problemi riguardano anche una singola regressione o albero di classificazione. Si noti inoltre che ogni albero in una foresta utilizza solo mtry
variabili selezionate casualmente.
"To get predictions for the OOB sample, each one is passed down the current tree and the rules for the tree followed until it arrives in a terminal node"
, hai una semplice spiegazione di cosarules for the tree
sono? E capiscosample
correttamente come una riga se capisco che i campioni sonogroups
di osservazioni in cui gli alberi dividono i dati?