sábado, 10 de enero de 2015

Bagging para Clasificador Binario


El siguiente script realiza una predicción usando la técnica bagging con un clasificador binario (ver ejemplo y concepto de bagging publicado AQUI). En este ejemplo se utilizó un Arbol de Decisión usando el package rpart. Para usar bagging con otro clasificador, solo debe cargarse la librería correspondiente y cambiar el funcion del modelo.

Conceptualmente el script sigue estos pasos:










































Resultado Final:

Para calcular la predicción final se utilizó el concepto de Voto Mayoritario, donde se considera una observacion verdadera cuando la mayoría de los algoritmos la predicen como verdadera .

Conceptualmente sigue esta lógica:







# Bagging para un clasificador binario
 
 
# -----------------------------------------------------------
# PASO 1. Carga de package y datos
suppressMessages(library(C50));data(churn);   # para datos
suppressMessages(library(foreach))            # para la logica de bagging
library(rpart)                                # para algoritmo Arbol Decision
 
Train        <- churnTrain[,1:20]
Test         <- churnTest [,1:20]
Clase        <- unique(churnTrain$churn)
Iteraciones  <- 5  # Debe ser impar, para evitar el empate en el "Voto mayoritario"
 
#-----------------------------------------------------------
# PASO 2. Crea modelos y crea predicciones en columnas
Prediccion   <- foreach(i=1:Iteraciones,.combine=cbind) %do% {  
  muestra    <- sample(nrow(Train), size=floor((nrow(Train)*.7)))
  modelo     <- rpart(churn ~., data=Train[muestra,])
  as.character(predict(modelo, Test, type="class"))
}  
 
# -----------------------------------------------------------
# PASO 3. Evaluación del Voto Mayoritario
Prediccion                 <- as.data.frame(Prediccion)
Prediccion$Cantidad_yes    <- rowSums(Prediccion [, 1:Iteraciones] == "yes")
Prediccion$Cantidad_no     <- rowSums(Prediccion [, 1:Iteraciones] == "no")
Prediccion$Prediccion      <- with(Prediccion,ifelse(Cantidad_yes>Cantidad_no,"yes","no"))
MC                         <- table(Test[, "churn"],Prediccion[,"Prediccion"])
Efectividad                <- MC["yes","yes"]/(MC["yes","yes"]+MC["yes","no"])
print(MC)
print(Efectividad)


Referencia:
http://www.vikparuchuri.com/blog/build-your-own-bagging-function-in-r/




1 comentario: