81 votos

¿Mejor manera de presentar un bosque aleatorio en una publicación?

Estoy usando el algoritmo al azar del bosque como un clasificador robusto de dos grupos en un estudio de microarreglos con 1000s de características.

  • ¿Cuál es la mejor manera de presentar el bosque al azar por lo que hay suficiente información para que sea reproducible en un papel?
  • ¿Hay un método de parcela en R para realmente representar el árbol, si hay un pequeño número de características?
  • ¿Es la estimación OOB de error la mejor estadística para cotizar la tarifa?

Muchas gracias

52voto

Jon Galloway Puntos 28243

Respecto a lo que es reproducible, la mejor manera es proporcionar reproducible de investigación (es decir, de código y de datos) junto con el papel. Hacer que esté disponible en su sitio web, o en un sitio de alojamiento (como github).

Con respecto a la visualización, Leo Breiman ha hecho algún trabajo interesante en este sentido (ver su página web, en particular la sección gráficos).

Pero si usted está utilizando R, entonces el randomForest paquete tiene algunas funciones útiles:

data(mtcars)
mtcars.rf <- randomForest(mpg ~ ., data=mtcars, ntree=1000, keep.forest=FALSE,
                           importance=TRUE)
plot(mtcars.rf, log="y")
varImpPlot(mtcars.rf)

Y

set.seed(1)
data(iris)
iris.rf <- randomForest(Species ~ ., iris, proximity=TRUE,
                        keep.forest=FALSE)
MDSplot(iris.rf, iris$Species)

No estoy al tanto de una manera sencilla, en realidad la trama de un árbol, pero puede utilizar el getTree función para recuperar el árbol y la trama que por separado.

getTree(randomForest(iris[,-5], iris[,5], ntree=10), 3, labelVar=TRUE)

El Strobl/Zeileis presentación sobre "por Qué y cómo utilizar bosque aleatorio de la variable importancia de las medidas (y cómo no)" tiene ejemplos de árboles que deben haber sido producidos de esta manera. Esta entrada en el blog sobre modelos de árbol tiene algunos buenos ejemplos de CARRITO de parcelas de árboles que se puede utilizar por ejemplo.

Como @chl comentado, un solo árbol no es especialmente significativo en este contexto, por lo corto de su uso para explicar lo que es un bosque aleatorio es, yo no incluir esto en un papel.

19voto

ESRogs Puntos 1381
  1. Como Shane escribió; hacer que sea reproducible de investigación + incluyen semillas aleatorias, porque RF es estocástico.
  2. Primero de todos, el trazado de una sola árboles que forman RF es una tontería; este es un conjunto de clasificador, sólo tiene sentido como un todo. Pero incluso el trazado de la de todo el bosque es una tontería, es una caja negra clasificador, por lo que no es la intención de explicar los datos con su estructura, en lugar de replicar el proceso original. En su lugar, hacer algunas de las parcelas de Shane sugerido.
  3. En la práctica, OOB es una muy buena error de aproximación; sin embargo, este no es un hecho ampliamente aceptado, por lo que para su publicación es mejor hacer un CV para confirmar.

14voto

Marcos Placona Puntos 133

Tenga en cuenta las salvedades en las otras respuestas acerca de la trama es necesariamente significativo. Pero si quieres una parcela fines ilustrativos/pedagógico, el siguiente fragmento de R puede ser útil. No es difícil añadir "punto de partida" para el texto del borde si es necesario.

to.dendrogram <- function(dfrep,rownum=1,height.increment=0.1){

  if(dfrep[rownum,'status'] == -1){
    rval <- list()

    attr(rval,"members") <- 1
    attr(rval,"height") <- 0.0
    attr(rval,"label") <- dfrep[rownum,'prediction']
    attr(rval,"leaf") <- TRUE

  }else{##note the change "to.dendrogram" and not "to.dendogram"
    left <- to.dendrogram(dfrep,dfrep[rownum,'left daughter'],height.increment)
    right <- to.dendrogram(dfrep,dfrep[rownum,'right daughter'],height.increment)
    rval <- list(left,right)

    attr(rval,"members") <- attr(left,"members") + attr(right,"members")
    attr(rval,"height") <- max(attr(left,"height"),attr(right,"height")) + height.increment
    attr(rval,"leaf") <- FALSE
    attr(rval,"edgetext") <- dfrep[rownum,'split var']
  }

  class(rval) <- "dendrogram"

  return(rval)
}

mod <- randomForest(Species ~ .,data=iris)
tree <- getTree(mod,1,labelVar=TRUE)

d <- to.dendrogram(tree)
str(d)
plot(d,center=TRUE,leaflab='none',edgePar=list(t.cex=1,p.col=NA,p.lty=0))

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X