test rpubs mtry forest for dummies bloggers r machine-learning random-forest predict

mtry - random forest rpubs



Usando el paquete randomForest en R, ¿cómo obtener probabilidades del modelo de clasificación? (1)

TL; DR:

¿Hay algo que pueda marcar en la llamada original randomForest para evitar tener que volver a ejecutar la función de predict para obtener probabilidades categóricas predichas, en lugar de solo la categoría probable?

Detalles:

Estoy usando el paquete randomForest .

Tengo un modelo algo como:

model <- randomForest(x=out.data[train.rows, feature.cols], y=out.data[train.rows, response.col], xtest=out.data[test.rows, feature.cols], ytest=out.data[test.rows, response.col], importance= TRUE)

donde out.data es un marco de datos, con feature.cols una mezcla de características numéricas y categóricas, mientras que response.col es una variable binaria TRUE / FALSE , que randomForest a factor en factor para que el modelo randomForest lo trate como categórico.

Todo funciona bien, y el model variable se me devuelve correctamente. Sin embargo, parece que no puedo encontrar una bandera o parámetro para pasar a la función randomForest , de modo que el model sea ​​devuelto con las probabilidades de TRUE o FALSE . En lugar de eso, simplemente obtengo valores predichos. Es decir, si miro el model$predicted , veré algo como:

FALSE FALSE TRUE TRUE FALSE . . .

En cambio, quiero ver algo como:

FALSE TRUE 1 0.84 0.16 2 0.66 0.34 3 0.11 0.89 4 0.17 0.83 5 0.92 0.08 . . . . . . . . .

Puedo obtener lo anterior, pero para hacerlo, necesito hacer algo como:

tmp <- predict(model, out.data[test.rows, feature.cols], "prob")

[ test.rows captura los números de fila de aquellos que se usaron durante la prueba del modelo. Los detalles no se muestran aquí, pero son simples ya que las ID de fila de prueba se envían al model .]

Entonces todo funciona bien. El problema es que el modelo es grande y tarda mucho tiempo en ejecutarse, e incluso la predicción en sí toma un tiempo. Como la predicción debería ser totalmente innecesaria (simplemente estoy buscando calcular la curva ROC en el conjunto de datos de prueba, el conjunto de datos que ya debería haberse calculado), esperaba omitir este paso. ¿Hay algo que pueda marcar en la llamada original randomForest para evitar tener que volver a ejecutar la función de predict ?


model$predicted NO es lo mismo que predict() . Si desea la probabilidad de la clase TRUE o FALSE , debe ejecutar predict() o pasar x,y,xtest,ytest como

randomForest(x,y,xtest=x,ytest=y),

donde x=out.data[, feature.cols], y=out.data[, response.col] .

model$predicted devuelve la clase en función de qué clase tuvo el mayor valor en el model$votes para cada registro. votes , como @joran señaló es la proporción de ''votos'' OOB (fuera de bolsa) del bosque aleatorio, un voto que solo cuenta cuando se seleccionó el registro en una muestra OOB. Por otro lado, predict() devuelve la probabilidad real para cada clase basada en los votos de todos los árboles.

El uso de randomForest(x,y,xtest=x,ytest=y) funciona un poco diferente al pasar una fórmula o simplemente randomForest(x,y) , como se muestra en el ejemplo anterior. randomForest(x,y,xtest=x,ytest=y) devolverá la probabilidad para cada clase, esto puede sonar un poco raro, pero se encuentra bajo el model$test$votes , y la clase predicha bajo el model$test$predicted , que simplemente selecciona la clase en función de qué clase tenía el mayor valor en el model$test$votes . Además, cuando se usa randomForest(x,y,xtest=x,ytest=y) , el model$predicted y el model$votes tienen la misma definición que arriba.

Finalmente, solo para tener en cuenta, si se randomForest(x,y,xtest=x,ytest=y) , entonces, para usar la función predict (), el indicador keep.forest se debe establecer en TRUE.

model=randomForest(x,y,xtest=x,ytest=y,keep.forest=TRUE). prob=predict(model,x,type="prob")

prob SERÁ equivalente al model$test$votes ya que la entrada de datos de prueba es x .