24 votos

¿Cómo estima `predict.randomForest` las probabilidades de clase?

¿Cómo randomForest paquete de estimación clase probabilidades cuando utilizo predict(model, data, type = "prob")?

Yo estaba usando ranger para la formación de bosques aleatorios utilizando la probability = T argumento para predecir las probabilidades. ranger dice que en la documentación que se:

Crecer una probabilidad del bosque como en Malley et al. (2012).

He simulado algunos datos y trató de ambos paquetes y obtuvo resultados muy diferentes (véase el código de abajo)

enter image description here

Así que yo sé que se utiliza una técnica diferente (luego ranger) para la estimación de probabilidades. Pero, ¿cuál?

simulate_data <- function(n){
  X <- data.frame(matrix(runif(n*10), ncol = 10))
  Y <- data.frame(Y = rbinom(n, size = 1, prob = apply(X, 1, sum) %>%
                               pnorm(mean = 5)
                             ) %>% 
                    as.factor()

  ) 
  dplyr::bind_cols(X, Y)
}

treino <- simulate_data(10000)
teste <- simulate_data(10000)

library(ranger)
modelo_ranger <- ranger(Y ~., data = treino, 
                                num.trees = 100, 
                                mtry = floor(sqrt(10)), 
                                write.forest = T, 
                                min.node.size = 100, 
                                probability = T
                                )

modelo_randomForest <- randomForest(Y ~., data = treino,
                                    ntree = 100, 
                                    mtry = floor(sqrt(10)),
                                    nodesize = 100
                                    )

pred_ranger <- predict(modelo_ranger, teste)$predictions[,1]
pred_randomForest <- predict(modelo_randomForest, teste, type = "prob")[,2]
prob_real <- apply(teste[,1:10], 1, sum) %>% pnorm(mean = 5)

data.frame(prob_real, pred_ranger, pred_randomForest) %>%
  tidyr::gather(pacote, prob, -prob_real) %>%
  ggplot(aes(x = prob, y = prob_real)) + geom_point(size = 0.1) + facet_wrap(~pacote)

25voto

ssn Puntos 472

Es la proporción de votos de los árboles en el conjunto.


Alternativamente, si usted multiplica su probabilidad de `` , obtienes el mismo resultado, pero ahora en cuentas en vez de proporciones.

11voto

Alan Donnelly Puntos 1133

El Malley (2012) está disponible aquí: http://dx.doi.org/10.3414%2FME00-01-0052. La referencia completa se encuentra en las referencias de parte en el ranger de la documentación.

En resumen, cada árbol predice clase de probabilidades y estas probabilidades se calcula el promedio para el bosque de predicción. Para dos clases, esto es equivalente a una regresión del bosque por un 0-1 respuesta codificada.

En contraste, en randomForest con type="prob" cada árbol predice una clase y de las probabilidades se calculan a partir de estas clases.

En el ejemplo aquí traté de usar el uniforme de distribución en lugar de la distribución normal para generar las probabilidades, y aquí el otro enfoque parece funcionar mejor. Me pregunto si estas probabilidades son realmente la verdad?

Por cierto, los mismos resultados que en la randomForest ejemplo anterior se puede lograr con ranger mediante la clasificación y el manual de la probabilidad de la computación (uso predict.all=TRUE en la predicción).

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