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:
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/
Excelente, gracias por el aporte, doctor
ResponderEliminar