\documentclass[serif]{beamer}
\usepackage[spanish]{babel}
\usepackage{beamerthemesplit}
\usepackage{arev}
\title[Bagging]{Bagging (Boostrap Aggregating}
\begin{document}
\begin{frame} {Bagging}
Un problema muy común es intentar predecir el comportamiento de una
variable dependiente $Y$ a partir de un conjunto de $p$ variables
independientes $X \in R^p$

\vspace{1cm}

A partir de una muestra de observaciones $(\vec{x}_i, y_i), \; i=1,\ldots, n$  se busca una regla de clasificación, ${\rm RC}$, mediante regresión logística, árboles de clasificación, etc.

\end{frame}

\begin{frame} {Bagging}

Si se conociera la distribución conjunta de $(\vec{X}, Y)$, es decir, 
$$P[(\vec{X}, Y) = (\vec{x},y)]$$
el procedimiento más eficiente sería utilizar como regla de predicción la probabilidad a posteriori
$$ {\rm RC}(\vec{x}) = {\rm arg}\max_{y} P(Y=y\mid \vec{x})= {\rm arg}\max_{y} P[(\vec{X}, Y) = (\vec{x},y)] $$

El problema es que la distribución conjunta suele ser desconocida  y es necesario estimarla.
\end{frame}


\begin{frame} {Bagging. Bootstrap}
  El método \textcolor{red}{bootstrap} se basa en sustituir la función de distribución teórica $F_{(X,Y)}$ por la función de distribución empírica $\hat{F}{(X,Y)}$.
  Para ello se considera la distribución estimada de probabilidad

$$\hat{P}{(X,Y)} = \left \{
  \begin{array}{ll}
    \frac{1}{n} &  \mbox{si }(\vec{x},y) = (\vec{x}_i ,y_i) \mbox{ para algún $i$ } \\
0  & \mbox{en otro caso }
    \end{array}
                   \right.$$

(Teorema de Glivenko-Cantelli)

\vspace{.5cm}

Una muestra bootstrap $\bigl\{(\vec{x}_i^*,y_i^*)\mid i=1,\dots,n\bigr\}$, se obtiene eligiendo al azar y con reposición $n$ observaciones de la muestra original $(\vec x_1,y_1), \ldots, (\vec x_n ,y_n)$.
 
\vspace{.5cm}

Así se tiene una idea de la variabilidad que produciría repetir varias veces el proceso de muestreo inicial.

\end{frame}


\begin{frame} {Bagging}
   A partir de una muestra $(\vec{x}_i, y_i), \; i=1,\ldots, n$ el método \textcolor{red}{bagging} utiliza el siguiente algoritmo
 \begin{itemize}
 \item Se eligen $b$ muestras bootstrap
   $\{(\vec{x_i}^{*b},y_i^{*b}) \mid i=1,\dots,n;b=1,\ldots, B\}$
    \item Se calcula una regla de clasificación  ${\rm RC}^{b}$ basada en la correspondiente muestra bootstrap $b$-ésima.
    %% \item Se aplica la regla de clasificación para una de esas $B$ muestras,
    %%   ${\rm RC}^{b}(\vec{x_i}^{*b})$
\end{itemize}

\vspace{0.5cm}

     La clasificación final de cada individuo $\vec{x}$ se hace como promedio de la $B$ predicciones
    $${\rm RC}_{\rm bag}(\vec{x}) = {\rm arg}\max_{k} \sum_{b=1}^{B} I({\rm RC}^{b}(\vec{x})=k)$$
    
    es decir, se asigna a la categoría más elegida.


\end{frame}


\begin{frame} {Bagging}
 
 La estimación de la probabilidad de pertenencia a un categoría $k$
 se basa en las probabilidades de clasificación obtenidas en cada una de las $B$ réplicas realizadas
 
  $$\hat{P}_{\rm bag}(k\mid\vec{x}) = \frac{1}{B} \sum_{b=1}^{B} 
  \hat{P}^b{}(k\mid\vec{x})$$ 
 
 
 Esta estimación sugiere asignar las observaciones a clases empleando un nuevo criterio:
 
  $${\rm RC}_{\rm bag}(\vec{x}) = {\rm arg}\max_{k}  \{ \hat{P}_{\rm bag}(k\mid\vec{x})  \} $$
 
 \end{frame}
 
 
 
 \begin{frame} {Bagging}
  Estimación del error out-of-bag (OOB)
  \begin{itemize}
   \item Usar validación cruzada para estimar el error en la predicción.
   \item En cada bootstrap se utiliza aproximadamente el 63\% de las muestras.
   \item Usar el 37\% restante para estimar el error. $$e_i= y_i - \hat{y}_i^{\rm oob}$$
   \item Calcular el Error Cuadrático Medio.$${\rm ECM} = \frac1n\sum e_i^2$$
  \end{itemize}

 \end{frame}
 
 \begin{frame} {Bagging}
  \textcolor{red}{VENTAJAS}
   \begin{itemize}
    \item  La tasa de error tiende a reducirse al promediar muchos criterios de clasificación.
    \item Permite estimar la importancia de las variables.
       \begin{enumerate}
       \item Se estima la reducción del Error Cuadrático Medio cada vez que interviene una variable.
      \item Se calcula el promedio de las reducciones en todas las muestras bootstrap.
       \end{enumerate}
     \end{itemize}

 \end{frame}
 
 \begin{frame} {Bagging}
 
 \textcolor{red}{DESVENTAJAS}
   \begin{itemize}
    \item No se debe emplear cuando los clasificadores individuales funcionan mal.
    \item La interpretación del criterio de clasificación suele ser mucho más difícil.
    \item Requiere muchos más cálculos.
   \end{itemize}
\end{frame}
  
\begin{frame} [fragile]  {CÓDIGO DE R}
 

 \begin{verbatim}
  
## Ejemplo

library(ipred)            # para bagging

library(rpart)            # para rpart.control

library(mlbench)          # para BreastCancer

data(BreastCancer)        # cargar ejemplo

BC <- BreastCancer        # ahorrar pulsaciones

n <- nrow(BC)             # tamaño muestral

entrena <- sample(n, 2*n/3) # índices entrenam.
 \end{verbatim}

\end{frame}


\begin{frame} [fragile]  {CÓDIGO DE R}
\footnotesize
\begin{verbatim}
BC.bagg <- bagging(Class ~., data=BC[entrena,-1],
                   nbagg=10, coob=TRUE,
                   control=rpart.control(maxdepth=3))
             
BC.bagg.pred <- predict(BC.bagg, BC[-entrena,-1], 
                type="class") # por omisión

BC.bagg.pred <- predict(BC.bagg, BC[-entrena,-1], 
                type="prob")
           
names(BC.bagg)    # componentes de la salida
BC.bagg$mtrees    # árboles
BC.bagg$OOB       # si se usan los out-of-bag 
BC.bagg$err       # estimación del error basada en OOB
\end{verbatim}

\end{frame}


\begin{frame} [fragile]  {CÓDIGO DE R}
 \footnotesize
 \begin{verbatim}
## bagging depende de las rutinas de rpart

## En cada bootstrap, rpart se controla con los
## parámetros habituales.
      
## Por defecto rpart.control tiene minsplit=2, cp=0
## y xval=0.
      
## Se puede utilizar la función prune para podar 
## los árboles.               
 \end{verbatim}

\end{frame}

% 
% \begin{frame} [fragile]
%  
%  CÓDIGO DE R \\
%  Argumentos
% 
% formula: a formula, as in the lm function.
% data: a data frame in which to interpret the variables named in formula
% v: An integer, specifying the type of v-fold cross validation. Defaults to 10. If v is set as the number of observations, leave-one-out cross validation is carried out. Besides this, every value between two and the number of observations is valid and means that roughly every v-th observation is left out.
% mfinal: número de réplicas bootstrap a realizar. Por defecto mfinal = 100 
% control: opciones para controlar el algorítmo rpart.
% par: si es TRUE, el proceso de validación cruzada se hace en paralelo. La opción por defecto es FALSE 
% 
% Value: An object of class bagging.cv, which is a list with the following components:
% class: clase a la que se asigna cada individuothe class predicted by the ensemble classifier.
% confusion: Matriz de confusión con las frecuencias de aciertos y errores. 
% error: Error promedio
%  \vspace{-0.3cm}
%  
%  \begin{verbatim}
% ## Validación cruzada
% ## Los datos se dividen en vc subconjuntos disjuntos de igual tamaño. 
% ## El bagging se aplica sobre vc-1 de ellos y se usa el restante para estimar el error
% ## el proceso se repite vc veces
% 
% bagging.cv(formula, data, v = 10, mfinal = 100, 
%            control, par=FALSE)
%  
%  
%  
%             CÓDIGO DE R \\
%  Argumentos
% 
% v: Número de subconjuntos para la validación cruzada. 
%    Por defecto v=10. Si v=n, se deja un individuo fuera. 
%  \end{verbatim}
% 
% \end{frame}


\end{document}
Diferencias entre el Boosting y el Bagging
I El Boosting opera de manera secuencial.
El Bagging funciona en paralelo
I El Boosting trabaja con el mismo conjunto de datos y asigna
m´as peso a los casos mal clasiﬁcados en el paso anterior.
En el Bagging cada modelo se calcula con muestras elegidas
de manera independiente.
I En el Boosting cada etapa depende de la anterior.
En el bagging todos los criterios se calculan de manera
independiente.
I El Boosting pretende reducir el error.
El Bagging intenta reducir la varianza de las predicciones.
