Estoy tratando de entender cómo funciona el bosque al azar. Tengo una idea sobre cómo árboles son construir pero no pueden entender cómo bosque al azar hacer predicciones sobre de muestra de bolsa. Podría alguien darme una explicación sencilla, por favor?:)
Respuesta
¿Demasiados anuncios?Cada uno de los árboles en el bosque es construido a partir de un bootstrap de la muestra de las observaciones en los datos de su entrenamiento. Esas observaciones en el arranque de la muestra construir el árbol, mientras que los que no en el bootstrap formulario de ejemplo los de fuera de la bolsa (o OOB) muestras.
Debe quedar claro que las mismas variables están disponibles para los casos en que los datos utilizados para construir un árbol como para los casos en los OOB de la muestra. Para obtener las predicciones para el OOB de la muestra, cada uno se lo pasan por el actual árbol y las reglas para el árbol seguido hasta llegar a un nodo terminal. Que los rendimientos de la OOB predicciones para ese árbol en particular.
Este proceso se repite un gran número de veces, en cada árbol se entrenó en una nueva bootstrap de la muestra a partir de los datos de entrenamiento y las predicciones para el nuevo OOB muestras derivadas.
Como el número de árboles que crece, cualquier muestra será en el OOB muestras más de una vez, así que el "promedio" de las predicciones sobre el N árboles, donde un ejemplo es en el OOB se utiliza como el OOB predicción para cada entrenamiento de la muestra para los árboles 1, ..., N. Por "promedio" utilizamos la media de las predicciones para una respuesta continua, o el voto de la mayoría puede ser utilizado para una respuesta categórica (el voto de la mayoría es la clase con la mayoría de votos en el conjunto de los árboles 1, ..., N).
Por ejemplo, supongamos que disponemos de las siguientes OOB predicciones para 10 muestras en el conjunto de entrenamiento el 10 de árboles
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
Donde NA
significa que la muestra fue en los datos de entrenamiento para que el árbol (en otras palabras, no estaba en el OOB de la muestra).
La media de la no-NA
valores para cada fila da la OOB de predicción para cada muestra, para el bosque entero
> 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
Como cada árbol se agrega el bosque, podemos calcular el OOB de error de hasta un incluidas ese árbol. Por ejemplo, los de abajo son los acumulativo significa para cada muestra:
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
De esta manera vemos cómo la predicción es acumulado a través de los N de los árboles en el bosque hasta una iteración dada. Si usted lee a través de las filas, el derecho de la no-NA
valor es el que muestro arriba para el OOB predicción. Que es como las huellas de OOB, el rendimiento puede ser una RMSEP puede ser calculado para el OOB muestras en función de la OOB predicciones acumulado acumulativamente con el N de árboles.
Tenga en cuenta que el código R que se muestra no es tomar desde la parte interna de la randomForest código en el randomForest paquete R - me golpeó hasta un código simple para que usted pueda seguir lo que está pasando en vez de las predicciones de cada árbol se determinan.
Esto es debido a que cada árbol es construido a partir de un bootstrap de la muestra y que hay un gran número de árboles en un bosque al azar, de tal manera que cada conjunto de entrenamiento de la observación en el OOB muestra para uno o más árboles, que OOB predicciones pueden ser provistos para todas las muestras en los datos de entrenamiento.
He glosado sobre cuestiones tales como la falta de datos en algunos OOB casos, etc, pero estos problemas también pertenecen a una sola de regresión o de árbol de clasificación. También tenga en cuenta que cada árbol en un bosque sólo utiliza mtry
azar de las variables seleccionadas.