Toda la literatura de Modelado de Distribución de Especies sugiere que cuando se predice la presencia / ausencia de una especie utilizando un modelo que genera probabilidades (por ejemplo, RandomForests), la elección del umbral de probabilidad para clasificar una especie como presencia o ausencia es importante y uno debe No siempre se basa en el valor predeterminado de 0.5. ¡Necesito algo 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, determiné que el umbral que me gustaría usar para clasificar la presencia de las probabilidades pronosticadas es 0.7, no el valor predeterminado de 0.5. No entiendo totalmente qué hacer con esta información. ¿Simplemente uso este umbral al crear un mapa de mi salida? Podría crear fácilmente una salida mapeada con probabilidades continuas y luego simplemente reclasificar aquellos con valores mayores que 0.7 como presentes, y aquellos <0.7 como ausentes.
¿O quiero tomar esta información y volver a ejecutar mi modelado randomForests, usando el parámetro de corte? ¿Qué está haciendo exactamente el parámetro de corte? ¿Cambia el voto resultante? (actualmente dice que es "mayoría"). ¿Cómo uso este parámetro de corte? ¡No entiendo la documentación! ¡Gracias!
Respuestas:
# establecer umbral o valor de corte a 0.7
# todos los valores inferiores al valor de corte 0.7 se clasificarán como 0 (presente en este caso)
#todos los valores mayores que el valor de corte 0.7 se clasificarán como 1 (ausente en este caso)
fuente
Lo siento, no has recibido e intentos de respuestas. Recomendaría el libro de Max Kuhn para la cobertura de este tema. Este es un tema bastante amplio. Solo agrega algunos bits:
Actualización sobre los pesos de la clase Andy Liaw:
"La opción" classwt "actual en el paquete randomForest ha estado allí desde el principio, y es diferente de cómo el código oficial de Fortran (versión 4 y posterior) implementa los pesos de la clase. Simplemente da cuenta de la clase ponderaciones en el cálculo del índice de Gini al dividir nodos, exactamente como se hace un solo árbol CART cuando se dan ponderaciones de clase. El profesor Breiman ideó el nuevo esquema de ponderación de clase implementado en la versión más nueva de su código Fortran después de descubrir que simplemente usando los pesos en el índice de Gini no parecían ayudar mucho en datos extremadamente desequilibrados (digamos 1: 100 o peor). Si usar Gini ponderado ayuda en su situación, hágalo de todas maneras. Solo puedo decir que en el pasado no nos dio el resultado que esperábamos ".
fuente