Processing math: 100%

30 votos

¿Cómo a medida/categoría "importancia de la variable" cuando usando el carro? (específicamente usando {rpart} de R)

Cuando la construcción de un CARRO de modelo (específicamente el árbol de clasificación) utilizando rpart (en R), a menudo es interesante saber cuál es la importancia de las distintas variables introducidas en el modelo.

Por lo tanto, mi pregunta es: ¿Qué medidas comunes existe para la clasificación y medición de la variable importancia de la participación de las variables en un modelo CART? Y cómo puede ser calculada mediante R (por ejemplo, cuando se utiliza el rpart paquete)

Por ejemplo, aquí es algunas código ficticio, creado para que usted pueda mostrar sus soluciones. Este ejemplo está estructurado de manera que es claro que la variable x1 y x2 son "importantes", mientras que (en cierto sentido) x1 es más importante, a continuación, x2 (desde x1 deben aplicarse a los más de los casos, por lo tanto hacer más influencia en la estructura de los datos, a continuación, x2).

set.seed(31431)
n <- 400
x1 <- rnorm(n)
x2 <- rnorm(n)
x3 <- rnorm(n)
x4 <- rnorm(n)
x5 <- rnorm(n)

X <- data.frame(x1,x2,x3,x4,x5)

y <- sample(letters[1:4], n, T)
y <- ifelse(X[,2] < -1 , "b", y)
y <- ifelse(X[,1] < 0 , "a", y)

require(rpart)
fit <- rpart(y~., X)
plot(fit); text(fit)

info.gain.rpart(fit) # your function - telling us on each variable how important it is

(las referencias son siempre bienvenidas)

48voto

DavLink Puntos 101

De importancia Variable generalmente puede ser calculada basándose en la correspondiente reducción de la precisión predictiva cuando el predictor de interés se quita con una permutación de la técnica, como en el Bosque Aleatorio) o alguna medida de la disminución del nodo de impureza, pero ver (1) para una visión general de los métodos disponibles. Una alternativa lógica a la CESTA es de RF de curso (randomForest, pero ver también parte). Con la radiofrecuencia, la importancia de Gini índice se define como el promedio del coeficiente de Gini disminución en el nodo de impurezas sobre todos los árboles en el bosque (que se deriva del hecho de que el coeficiente de Gini de la impureza índice para un determinado nodo padre es mayor que el valor de la medida para su hija de dos nodos, ver, por ejemplo, (2)).

Sé que Carolin Strobl y coll. han contribuido mucho de simulación y experimentales de los estudios sobre (condicional) variable de importancia en RFs y Carros (por ejemplo, (3-4), pero hay muchas otras, o su tesis de Problemas Estadísticos en el Aprendizaje de Máquina – Hacia Fiable de la División de Selección y la Variable Medidas de Importancia).

A mi conocimiento, el símbolo de intercalación (paquete de 5) sólo se considera una función de pérdida para el caso de regresión (es decir, el error cuadrático). Tal vez se agreguen en el futuro cercano (de todos modos, un ejemplo de clasificación de caso por k-NN está disponible en la ayuda en línea para dotPlot).

Sin embargo, Noel M O'Boyle parece tener algo de código R para la Variable de importancia en el CARRITO.

Referencias

  1. Sandri y Zuccolotto. Un sesgo en el algoritmo de corrección para el coeficiente de Gini de la variable de medida de importancia en los árboles de clasificación. 2008
  2. Izenman. Modernas Técnicas Estadísticas Multivariables. Springer, 2008
  3. Strobl, Hothorn, y Zeilis. Partido!. R Diario De 2009 1/2
  4. Strobl, Boulesteix, Kneib, Augustin, y Zeilis. Condicional variable de importancia para los bosques aleatorios. BMC Bioinformatics 2008, 9:307
  5. Kuhn. La construcción de Modelos Predictivos en R Mediante el símbolo de intercalación Paquete. JSS 2008 28(5)

4voto

hermiod Puntos 153

La siguiente función (del paquete de símbolo de intercalación) se puede utilizar para la evaluación de variable importancia en árboles rpart. Corregí un error en la función de símbolo de intercalación cuando esto sólo raíz nodo en el árbol.

varImp <- function(object, surrogates = FALSE, competes = TRUE, ...)
  {
tmp <- rownames(object$splits)

 allVars <- colnames(attributes(object$terms)$factors)
if(is.null(tmp))
  {
  out<-NULL
    zeros <- data.frame(x = rep(0, length(allVars)),
                        Variable = allVars)
    out <- rbind(out, zeros)
  }

else {

rownames(object$splits) <- 1:nrow(object$splits)
splits <- data.frame(object$splits)
    splits$var <- tmp
splits$type <- ""

frame <- as.data.frame(object$frame)
    index <- 0
    for(i in 1:nrow(frame))
      {
        if(frame$var[i] != "<leaf>")
          {
            index <- index + 1
            splits$type[index] <- "primary"
            if(frame$ncompete[i] > 0)
              {
                for(j in 1:frame$ncompete[i])
                  {
                    index <- index + 1
                    splits$type[index] <- "competing"
                  }
              }
            if(frame$nsurrogate[i] > 0)
              {
                for(j in 1:frame$nsurrogate[i])
                  {
                    index <- index + 1
                    splits$type[index] <- "surrogate"
                  }
              }
          }
      }
    splits$var <- factor(as.character(splits$var))
    if(!surrogates) splits <- subset(splits, type != "surrogate")
    if(!competes) splits <- subset(splits, type != "competing")
    out <- aggregate(splits$improve,
                 list(Variable = splits$var),
                 sum,
                 na.rm = TRUE)

allVars <- colnames(attributes(object$terms)$factors)
if(!all(allVars %in% out$Variable))
      {
        missingVars <- allVars[!(allVars %in% out$Variable)]
        zeros <- data.frame(x = rep(0, length(missingVars)),
                            Variable = missingVars)
        out <- rbind(out, zeros)
      }
    }
    out2 <- data.frame(Overall = out$x)
rownames(out2) <- out$Variable
out2

}

El siguiente código r producirá resultados de importancia para un árbol rpart "fit"

 varImp(fit)

1voto

thursdaysgeek Puntos 3097

names(result)muestravariable.importance

result$variable.importance¿debe ayudar a?

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