10 votos

¿Cómo cambiar el umbral para la clasificación en R randomForests?

Todas las Especies de Modelado de la Distribución de la literatura sugiere que a la hora de predecir la presencia/ausencia de las especies, utilizando un modelo que genera probabilidades (por ejemplo, RandomForests), la elección del umbral de probabilitiy por que realmente clasificar una especie como la presencia o ausencia es importante y no siempre se debe confiar en el valor por defecto de 0.5. Necesito un poco de ayuda con esto! Aquí está mi código:

library(randomForest)
library(PresenceAbsence)

#build model
RFfit <- randomForest(Y ~ x1 + x2 + x3 + x4 + x5, data=mydata, mytry = 2, ntrees=500)

#eventually I will apply this to (predict for) new data but for first I predict back    to training data to compare observed vs. predicted
RFpred <- predict(RFfit, mydata, type = "prob")

#put the observed vs. predicted in the same dataframe
ObsPred <- data.frame(cbind(mydata), Predicted=RFpred)

#create auc.roc plot
auc.roc.plot(ObsPred, threshold = 10, xlab="1-Specificity (false positives)",
  ylab="Sensitivity (true positives)", main="ROC plot", color=TRUE,
  find.auc=TRUE, opt.thresholds=TRUE, opt.methods=9) 

A partir de esto he determinado que el umbral que me gustaría usar para la clasificación de la presencia de la predicción de probabilidades es de 0,7, no el valor por defecto de 0.5. No estoy totalmente de entender qué hacer con esta información. Puedo simplemente usar este umbral cuando la creación de un mapa de mi salida? Yo podría fácilmente crear un mapa de salida continua de probabilidades, a continuación, simplemente reclasificación de aquellos con valores superiores a 0.7 como presente, y las < 0.7 como ausente.

O, ¿quiero tomar esta información y volver a ejecutar mi randomForests modelado, mediante el cut-off parámetro? ¿Qué es exactamente el cut-off parámetro haciendo? ¿Cambia la resultante de la votación? (en la actualidad dice que es "la mayoría"). ¿Cómo debo utilizar este corte parámetro? No entiendo la documentación! Gracias!

8voto

hermiod Puntos 153

#set umbral o valor de corte a 0.7

 cutoff=0.7
 

# Todos los valores inferiores al valor de corte 0.7 serán clasificados como 0 (presente en este caso)

 RFpred[RFpred<cutoff]=0
 

# Todos los valores mayores que el valor de corte 0.7 serán clasificados como 1 (ausente en este caso)

  RFpred[RFpred>=cutoff]=1
 

7voto

sd2k9 Puntos 21

Lamento que usted no los he conseguido, y los intentos de las respuestas. Recomendaría Max Kuhn libro para la cobertura de este problema. Esto es bastante amplio tema. Sólo tiene que añadir algunas mas:
(1) las curvas ROC son populares. Pero sólo tiene sentido si usted está tratando de entender el trade-off entre el costo de Falsos Negativos y Falsos Positivos. Si CostFN=CostFP entonces seguro que no tienen sentido. El c-estadística y otros derivados de las medidas todavía no se han de utilizar. Si desea maximizar la precisión de ajustar su modelo de este (punto de inserción del paquete hace que sea fácil), no te vayas haciendo una curva ROC.
(2) Todo el mundo utiliza las probabilidades derivadas de RF modelos. Creo que creo que se debería pensar un poco para hacer esto - estos no son modelos probabilísticos, no están construidos para ello. A menudo funciona. Como mínimo me gustaría producir una validación de la parcela de RF probabilies en los nuevos datos, si yo estaba realmente interesado en probabilies
(3) La forma más sencilla sería utilizar "simplemente reclasificación de aquellos con valores superiores a 0.7 como presente, y las < 0.7 como ausente".
(4) SI el costo FN no es igual a costo de FP, entonces usted necesita para hacer la RF de los costos. R no se hace así de fácil. La función de ponderación en la RandomForest paquete no funciona. La mejor opción es jugar con el muestreo, undersample mayoría de casos para obtener la función de costo que usted desea. Pero la relación entre muestra y del ratio de coste no es directa. Por lo tanto, puedes seguir con (3)

Actualización Con respecto a la Clase pesos Andy Liaw:
"La actual "classwt" opción en la randomForest paquete ha estado allí desde el principio, y es diferente de cómo el oficial código Fortran (versión 4 y posteriores) implementa la clase pesos. Simplemente cuenta para la clase pesos en el índice de Gini de cálculo cuando la división de nodos, exactamente como un solo CARRO árbol se realiza cuando se da clase pesos. Prof. Breiman ocurrió con la nueva clase de sistema de ponderación aplicado en la más reciente versión de su código de Fortran después, nos encontramos con que, simplemente, el uso de las ponderaciones en el índice de Gini no parece ayudar mucho en muy desequilibrada datos (por ejemplo 1:100 o peor). Si el uso ponderado de Gini ayuda en su situación, por todos los medios hacerlo. Sólo puedo decir que en el pasado no nos dan el resultado que esperábamos."

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