Metodo Bagging o Métodos de Agregación de clasificadores

Una forma de mejorar un modelo predictivo es usando la técnica creada por Leo Breiman que denominó Bagging (o Agregacion de clasificadores). Esta técnica consiste en crear diferentes modelos usando muestras aleatorias con reemplazo y luego combinar o ensamblar los resultado

Historia

Bagging fue propuesto por Breiman en 1996 y se basa en los métodos de remuestreo y de agregación, ya que presentan propiedades beneficiosas. Bootstrapping consiste en obtener muestras aleatorias con reemplazamiento de igual tamaño que el conjunto original. Partiendo del conjunto de entrenamiento \(X= (X1, X2, ....,Xn)\), mediante la extracción aleatoria con reemplazamiento con el mismo número de elementos que el conjunto original de n elementos, se obtienen \(B\) muestras bootstrap \(X^b= (X1^b, X2^b, ...., Xn^b)\) donde \(b=1, 2,.., B\). En algunas de estas muestras se habrá eliminado o al menos reducido la presencia de observaciones ruidosas, por lo que el clasificador construido en ese conjunto presentará un mejor comportamiento que el clasificador construido en el conjunto original. Así pues Bagging puede ser útil para construir un mejor clasificador cuando el conjunto de entrenamiento presente observaciones ruidosas.

Caracteristicas

1.- Divide el conjunto de Entrenamiento en distintos conjuntos de datos, obteniendo como resultado diferentes muestras aleatorias con las siguientes características:

2.-Luego se crea un modelo predictivo con cada conjunto, obteniendo modelos diferentes.

3.- Luego se construye o ensambla un único modelo predictivo, que es el promedio de todos los modelos.

Función Principal

El método de clasificación Bagging es una técnica clasificatoria que busca conseguir,una vez combinado los datos de entrenamiento y los datos de evaluación a obtener un clasificador con mejores propiedades,donde se reduzca el error tanto de regresión como de clasificación.

Ventajas de los Bagging:

Ejemplo

Para este ejemplo se urilizó la base de datos iris.

library(MASS)
library(DMwR2)
library(rpart)
library(adabag)
library(ipred)

data("iris")
head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

Train y Test

Se divide la base de datos iris en dos: La primera parte que es el 80% se va a utilizar para el entrenamiento del algoritmo y lo restante es para medir la capacidad del modelo.

set.seed(123)
tamanoTrain <- sample(1:nrow(iris), size = round(nrow(iris) * 0.8, 0))
train <- iris[tamanoTrain, ]
test <- iris[-tamanoTrain, ]
set.seed(123)

Modelación y predicción con una variable cualitativa

Predecir el tipo de especie de una flor.

mod1 <- adabag::bagging(Species ~ ., train, mfinal = 10)
ps <- predict(mod1, test)

A continuación se presenta la matriz de confusión y el error

ps$confusion
               Observed Class
Predicted Class setosa versicolor virginica
     setosa          8          0         0
     versicolor      0          9         1
     virginica       0          0        12
ps$error * 100
[1] 3.333333

Se realiza una predicción con un nuevo individuo

Sepal.Length <- 4.8
Sepal.Width <- 3.3
Petal.Length <- 1.6
Petal.Width <- 0.7
d <- data.frame(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
ps1 <- predict(mod1, d)
ps1$class
[1] "setosa"

Modelación y predicción con una variable cuantitativa

Predecir la longitud del sepalo de una flor.

mod2 <- ipred::bagging(Sepal.Length ~ ., train, nbagg = 10)
ps2 <- predict(mod2, test)

RMSE - Error Cuadrático Medio

### RMSE
rmse <- sqrt(sum((test$Sepal.Length - ps2)^2)/length(ps2)) * 100
rmse
[1] 35.04866

Se realiza una predicción con un nuevo individuo

Sepal.Width <- 3.3
Petal.Length <- 1.6
Petal.Width <- 0.7
Species <- "setosa"
d1 <- data.frame(Sepal.Width, Petal.Length, Petal.Width, Species)
ps1 <- predict(mod2, d1)
ps1
[1] 4.996728

APLICACIÓN

Presione aquí para interactuar con la aplicación

Manual

La finalidad de la aplicación denominada PredictBagging es realizar predicciones de variables cualitativas y cuantitativas de cualquier base de datos externa utilizando el método Bagging. El tipo de archivo que puede ingresar en la aplicación es de tipo excel con extención .csv y .xlsx.

En la parte izquierda de la pantalla se tiene diferentes íconos en donde se puede subir una base de datos y elegir los parámetros para realizar la modelación y predicción (cada ícono se detallará mas adelante). En la parte derecha se puede encontrar 3 menús:

  • Base de datos .- Se visualiza la base de datos ingresada.

  • Datos Faltantes .- Se visualiza el número y los porcentajes de datos faltantes en caso de que la base de datos tenga valores NA´s.

  • Predicción .- Se visualiza un resumen de la modelación y predicción, además, tiene la opción de ingresar una base de datos de individuos nuevos para predecir.

Pasos para predecir una variable de la base de datos ingresada.

Paso 1. Escoger la extención del archivo. (En el caso de que se elija .csv se desplegará tres íconos que permite seleccionar si la base tiene encabezado, el tipo de separador de las variables y decima. En caso de que se seleccione .xlsx se desplegará un ícono en donde se elige la hoja en donde esté la base de datos)

Paso 2. Se verifica si existe datos faltantes. En el caso de que haya o no datos faltantes se debe seleccionar el ícono Activar-Imputar Datos.

Paso 3. Se escoge la variable que se quiera predecir (Puede ser de tipo cualitativo o cuantitativo.)

Paso 4. Se escoge el porcentaje de entrenamiento para la modelación, el número de interacción y luego Analizar. Nos dirigimos al panel Predicción y esperamos a que se carge y arroge reultados.

Paso 5. Ingresamos una base de datos de tipo excel en donde esten los datos, sólo de las variables predictoras de los nuevos individuos, es decir, si la variable elegida anteriormente. Seleccionamos Predecir y se obtiene el datos predicho.

Presione aquí para interactuar con la aplicación