martes, 16 de junio de 2015

Mediciones del Random Forest


Para conocer la eficiencia de un modelo de Random Forest (ver detalle de randomForest AQUI), puede usarse las siguientes medidas, todas obtenidas con funciones incluidas en el package randomForest.

OOB error (out of bag error)
Cuando el algoritmo randomForest selecciona una muestra con reemplazo para crear un árbol en una iteración, algunas observaciones se quedan fuera (out of bag)  y no son usadas para crear el árbol. Para esas observaciones que quedaron fuera del árbol, se  hace una predicción y se calcula el error de la predicción. Esto se hace en cada iteración para calcular el error estimado, llamado OOB error.

La función print(modelo_rf) muestra el OOB del modelo:







GRAFICAR ERROR DEL MODELO 
Para saber el promedio del error a medida que se agregan más arboles, puede usarse plot(modelo_rf) que identifica el OOB promedio acumulado en cada iteración, como también los errores de la clase que se quiere predecir. 
En este gráfico se muestra un modelo que intenta predecir la variable churn={yes,no}. La linea negra representa el OOB, la linea roja es el error al intentar predecir churn={yes}, y la linea verde es el error en la prediccion churn={no}. La linea negra siempre será el OOB, y las siguientes lineas se pueden identificar con la matriz de confusión usando print(modelo_rf) . 

queda así:






















Notas:
• En este gráfico existirán tantas lineas como cantidad de clases que se quieran predecir. En el ejemplo anterior solo hay dos: churn=si  y  churn=no. Cuando la predicción sea de un valor numérico (regresión), entonces solo se graficará la linea del OOB error.
• Cuando todas las lineas se superponen, indica que todas las medidas tienen mismo error y no tiene sentido idenficarlas.
• Estas lineas tienen otro significado si al crear el modelo se especifica el parametro ytest. Para detalle, ejecutar ayuda con  ?plot.randomForest




IMPORTANCIA DE VARIABLES
varImpPlot(modelo.rf) Grafica importancia de las variables.
importance(modelo.rf)  Imprime lista con importancia de variables.
Nota: para especificar la medida que usa para importancia, ver el parametro type,  tanto en la funcion varImpPlot como en importance

ejemplo:















OTRAS MEDIDAS
getTree(modelo_rf, 1)
Imprime reglas de un arbol especifico del randomforest

partialPlot(modelo_rf, datos, total_day_charge, "yes")  
Grafica la dependencia parcial de la variable total_day_charge sobre una de las clases que se desea predecir (churn=yes). Para detalle ver referencia No.3

MDSplot(modelo_rf, datos$churn)
Grafíca los PCA de la matriz de proximidad. Para esto se debe especificar parametro proximity=T en la cracion del modelo así: modelo_rf <- randomForest(churn ~ ., data=datos,proximity=TRUE). Para detalle ver referencia No.2





Referencia
1. Coneptos sobre RandomForest:  https://www.stat.berkeley.edu/~breiman/Using_random_forests_v4.0.pdf
2. Funcion MDSplot:
http://stats.stackexchange.com/questions/2344/best-way-to-present-a-random-forest-in-a-publication
3. Funcion partialPlot:
https://github.com/srisatish/randomForest/blob/master/R/partialPlot.R







1 comentario: