Foresta casuale e previsione


13

Sto cercando di capire come funziona Random Forest. Ho una comprensione di come vengono costruiti gli alberi, ma non riesco a capire come Random Forest faccia previsioni sul campione fuori borsa. Qualcuno potrebbe darmi una spiegazione semplice, per favore? :)

Risposte:


16

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 NAvalori 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 mtryvariabili selezionate casualmente.


Ottima risposta Gavin! Quando scrivi "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 cosa rules for the treesono? E capisco samplecorrettamente come una riga se capisco che i campioni sono groupsdi osservazioni in cui gli alberi dividono i dati?
user1665355

@ user1665355 Ho presunto che hai capito come sono stati costruiti gli alberi di regressione o classificazione? Gli alberi in RF non sono diversi (tranne forse nelle regole di arresto). Ogni albero suddivide i dati di allenamento in gruppi di campioni con "valori" simili per la risposta. La posizione variabile e suddivisa (ad es. PH> 4.5) che predice meglio (ovvero riduce al minimo "errore") costituisce la prima divisione o regola nella struttura. Ogni ramo di questa divisione viene quindi considerato a sua volta e vengono identificate nuove divisioni / regole che riducono al minimo l '"errore" dell'albero. Questo è l'algoritmo binario di partizionamento ricorsivo. Le divisioni sono le regole.
Ripristina Monica - G. Simpson l'

@ user1665355 Sì, scusa vengo da un campo in cui un campione è un'osservazione, una riga nel set di dati. Ma quando inizi a parlare di un campione bootstrap, questo è un insieme di N osservazioni, disegnate con la sostituzione dai dati di addestramento e quindi ha N righe o osservazioni. Proverò a ripulire la mia terminologia più tardi.
Ripristina Monica - G. Simpson l'

Grazie! Sono molto nuovo di RF, quindi mi dispiace per domande forse stupide :) Penso di aver capito quasi tutto quello che hai scritto, un'ottima spiegazione! Mi chiedo solo La posizione variabile e divisa (ad es. PH> 4.5) che predice meglio (ovvero minimizza "errore") costituisce la prima divisione o regola nella struttura ad albero ... Non riesco a capire quale sia l'errore. : / Sto leggendo e cercando di capire http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf. A pagina 115-116 gli autori usano la RF per scegliere variable importancegli indicatori tecnici.
user1665355

L '"errore" dipende dal tipo di albero che viene montato. La devianza è la solita misura per le risposte continue (gaussiane). Nel pacchetto rpart, il coefficiente Gini è il valore predefinito per le risposte categoriche, ma ce ne sono altri per modelli diversi, ecc. Dovresti avvalerti di un buon libro su Alberi e RF se vuoi distribuirlo con successo. Le misure dell'imprortanza delle variabili sono qualcosa di diverso: misurano l '"importanza" di ciascuna variabile nel set di dati vedendo quanto cambia qualcosa quando quella variabile viene utilizzata per adattarsi a un albero e quando quella variabile non viene utilizzata.
Ripristina Monica - G. Simpson l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.