La técnica de Bagging sigue estos pasos:
1. Divide el set de Entrenamiento en distintos sub set de datos, obteniendo como resultado diferentes muestras aleatorias con las siguientes características:
- Muestra uniforme (misma cantidad de individuos en cada set)
- Muestras con reemplazo (los individuos pueden repetirse en el mismo set de datos).
- El tamaño de la muestra es igual al tamaño del set de entrenamiento, pero no contiene a todos los individuos ya que algunos se repiten.
- Si se usan muestras sin reemplazo, suele elegirse el 50% de los datos como tamaño de muestra
2. Luego se crea un modelo predictivo con cada set, obteniendo modelos diferentes
3. Luego se construye o ensambla un único modelo predictivo, que es el promedio de todos los modelos.
Conceptos sobre Bagging:
• Disminuye la varianza de un data set al realizar remuestreo con reemplazo..
• Si no existe varianza en el data set, la tecnica de Baggin no mejora significativamente el modelo.
• Es recomendable en modelos de alta inestabilidad (data set con mucha varianza). Ejemplo de inestabilidad: el % de error de la predicción de fraudes de enero , es muy diferente al de febrero.
• Mientras más inestable es un modelo, mejor será la predicción al usar Bagging.
• Se reduce el overfetting o sobre entrenamiento de modelos. Esto porque los modelos no pueden sobreaprender o memorizar ya que ninguno tiene todos los datos de entrenamiento.
• Mejora la predicción, ya que lo que no detecta un modelo lo detectan los otros.
• Reduce el ruido de los outliers, ya los outliers no pueden estar presenten en todos los modelos.
• No mejora significativamente las funciones lineales, ya que el ensamble de una función lineal da como resultado otra función linear.
• Una técnica mejorada del Bagging es el Random Forest (ver ejemplo publicado AQUI), que ademas de elegir un grupo aleatorio de individuos, también elige un grupo aleatorio de variables.
• Los diferentes modelos creados con la técnica Bagging pueden considerarse como algoritmos que buscan respuestas (o hipótesis) en un data set (o espacio h). Como cada algoritmo tiene un set de datos diferentes, cada uno creará una hipótesis diferentes sobre la realidad.
Conceptualmente la técnica Bagging sería así:
El siguiente script crea un Arbol de Decisión (sin aplicar bagging), y acierta en un 62% en la predicción de la desafiliacion de clientes:
Con el siguiente script se aplica Bagging al modelo anterior, obteniendo un 68% de aciertos en la predicción de la desafiliacion. Utiliza el package adabag que aplica el concepto de bagging:
# Ejemplo de Bagging
library(adabag);library(rpart);library(C50);data(churn); Entrenamiento <- churnTrain Test <- churnTest set.seed(110) Modelo_AdaBag <- bagging(churn~., data=Entrenamiento, mfinal=9, control=rpart.control(cp = 0.001, minsplit=7)) Prediccion <- predict(Modelo_AdaBag,Test,type="class")$class MC <-table(Test[, "churn"],Prediccion);MC Aciertos <-MC[1,2]/(MC[1,1]+MC[1,2]);Aciertos
REFERENCIAS:
Documentos
Conceptos sobre Bagging (ppt)
http://www.asepelt.org/ficheros/File/Anales/2003%20-%20Almeria/asepeltPDF/128.pdf
http://webdelprofesor.ula.ve/ingenieria/hhoeger/simulacion/EJEMPLO_BOOTSTRAP.pdf
http://www.unt.edu/rss/class/mike/6810/articles/ResamplingMethods.pdf
videos
https://www.youtube.com/watch?v=goY0CCLgvdQ
https://www.youtube.com/watch?v=Rm6s6gmLTdg
> Prediccion <- predict(Modelo_AdaBag,Test,type="class")$class
ResponderEliminar> MC <-table(Test[, "churn"],Prediccion);MC
Prediccion
no yes
yes 90 134
no 1427 16
> Aciertos <-MC[1,2]/(MC[1,1]+MC[1,2]);Aciertos
[1] 0.5982143
> library(rpart);suppressMessages(library(C50));data(churn);
ResponderEliminar> Entrenamiento <- churnTrain
> Test <- churnTest
> Modelo_Arbol <- rpart(churn~., data=Entrenamiento)
> Prediccion <- predict(Modelo_Arbol,Test,type="class")
> MC <- table(Test[, "churn"],Prediccion);MC
Prediccion
yes no
yes 141 83
no 34 1409
> Aciertos <- MC[1,1]/(MC[1,1]+MC[1,2]);Aciertos
[1] 0.6294643
And
ResponderEliminar> Prediccion <- predict(Modelo_AdaBag,Test,type="class")$class
> MC <-table(Test[, "churn"],Prediccion);MC
Prediccion
no yes
yes 73 151
no 1421 22
> Aciertos <-MC[1,2]/(MC[1,1]+MC[1,2]);Aciertos
[1] 0.6741071