2015-01-24 9 views
5

Sono in esecuzione randomForest in R con la modalità dettagliata (do.trace), e mi chiedevo quale sia il significato delle colonne nel messaggio. Posso vedere ntree numero di alberi e OOB è la% dei campioni fuori borsa, ma quali sono "1" e "2"?La spiegazione della modalità dettagliata durante l'esecuzione randomForest in R

> rf.m <- randomForest(x = X.train, y=as.factor(y.train), do.trace=10) 
ntree  OOB  1  2 
    10: 32.03% 15.60% 82.47% 
    20: 29.18% 10.51% 86.31% 
    30: 27.44% 7.47% 88.57% 
    40: 26.48% 5.29% 91.33% 
    50: 25.92% 4.35% 91.96% 
    .... 

risposta

9

Colonne 1 e 2 nell'output danno l'errore di classificazione per ogni classe. Il valore OOB è la media ponderata degli errori di classe (ponderata per la frazione di osservazioni in ogni classe).

Un esempio (adattando l'esempio foresta casuale dalla pagina di aiuto):

# Keep every 100th tree in the trace 
set.seed(71) 
iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, 
         proximity=TRUE, do.trace=100) 

ntree  OOB  1  2  3 
    100: 6.00% 0.00% 8.00% 10.00% 
    200: 5.33% 0.00% 6.00% 10.00% 
    300: 6.00% 0.00% 8.00% 10.00% 
    400: 4.67% 0.00% 8.00% 6.00% 
    500: 5.33% 0.00% 8.00% 8.00% 

La media ponderata degli errori di classe per l'albero di 100 ° dà un tasso di errore OOB del 6,0%, esattamente come riportato nel traccia sopra. (prop.table restituisce la frazione di osservazioni in ogni categoria (ogni classe) di specie). Moltiplichiamo questo elemento in base agli errori di classe per il centesimo albero, come indicato nei valori di traccia sopra, e quindi somma per ottenere l'errore medio ponderato su tutte le classi (l'errore OOB).

sum(prop.table(table(iris$Species)) * c(0, 0.08, 0.10)) 
[,1] 
[1,] 0.06 

È possibile evitare di dover utilizzare somma se si utilizza la moltiplicazione di matrici, che qui è equivalente al dot/scalare/prodotto interno:

prop.table(table(iris$Species)) %*% c(0, 0.08, 0.10)