miércoles, 26 de noviembre de 2014

Ejemplo de Random Forest

Random Forest es un algoritmo predictivo que usa la técnica de Bagging para combinar diferentes arboles, donde cada árbol es construido con observaciones y variables aleatorias.

En forma resumida sigue este proceso:
  1. Selecciona individuos al azar (usando muestreo con reemplazo) para crear diferentes set de datos.
  2. Crea un árbol de decisión con cada set de datos, obteniendo diferentes arboles, ya que cada set contiene diferentes individuos y diferentes variables en cada nodo.
  3. Al crear los arboles se eligen variables al azar en cada nodo del arbol, dejando crecer el arbol en profundidad (es decir, sin podar).
  4. Predice los nuevos datos usando el "voto mayoritario", donde clasificará como "positivo" si la mayoría de los arboles predicen la observación como positiva.

Conceptualmente sería así:








Para medir eficiencia del randomForest, ver nota publicada AQUI
Para optimizar la cantidad de variables, ver nota publicada AQUI

En script en R seria el siguiente:

# Ejemplo Random Forest
#-----------------------------------------------------------
# Carga package y datos
library(randomForest);library(C50); data(churn);
Entrenamiento  <-churnTrain   
Test           <-churnTest     
 
 
#----------------------------------------------------------- 
# Crea modelo predictivo
Modelo<-randomForest(churn ~ ., 
                      data=Entrenamiento, # datos para entrenar 
                      ntree=30,           # cantidad de arboles   
                      mtry=6,             # cantidad de variables
                      replace=T)          # muestras con reemplazo
 
 
#-----------------------------------------------------------            
# Crea prediccion y Matriz de confusion
Prediccion <- predict (Modelo , Test[,-20]); 
 
# Matriz de Confusion
MC<-table(Test[, "churn"],Prediccion)     
MC




Referencia:
http://oz.berkeley.edu/~breiman/randomforest2001.pdf
http://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.youtube.com/watch?v=3kYujfDgmNk
http://www.rinfinance.com/agenda/2015/talk/MarkSeligman.pdf








3 comentarios:

  1. Hola Emmanuel Santana,

    Muchas gracias po compartir este post, muy explicativo.

    Felicidades,
    Fabioo C

    ResponderEliminar
  2. Buenas, no puedo ver bien el árbol a la derecha (las etiquetas). Podrias resubirlo por favor?

    ResponderEliminar
  3. Algunas implementaciones no hacen el voto por mayoría sino el voto suave (soft voting en inglés). Esta forma de votar hace que las predicciones de los árboles con más confianza cuentan más que las predicciones con menos. Por lo menos, en la implementación de python de scikit-learn es así.

    ResponderEliminar