%% -*- (fset 'tejer [?\C-x ?\C-s escape ?n ?S escape ?n ?P right return ?\C-x ?1]) -*-
%% -*- (local-set-key "\C-c\C-c" 'tejer) -*-
\documentclass[mathserif]{beamer}       % antiambiguo
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usetheme{Hannover}
\usepackage{heuristica}                 % antiambiguo y graso
\usepackage[heuristica,vvarbb,bigdelims]{newtxmath}
\usepackage{Sweave}
\begin{document}
\title{Árboles de decisión}
\author{N. Corral,\\C. Carleos}
\frame{\titlepage}
\frame{\tableofcontents}
\section{Ejemplo}
\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> summary (iris)
\end{Sinput}
\begin{Soutput}
  Sepal.Length   Sepal.Width    Petal.Length 
 Min.   :4,30   Min.   :2,00   Min.   :1,00  
 1st Qu.:5,10   1st Qu.:2,80   1st Qu.:1,60  
 Median :5,80   Median :3,00   Median :4,35  
 Mean   :5,84   Mean   :3,06   Mean   :3,76  
 3rd Qu.:6,40   3rd Qu.:3,30   3rd Qu.:5,10  
 Max.   :7,90   Max.   :4,40   Max.   :6,90  
  Petal.Width        Species  
 Min.   :0,1   setosa    :50  
 1st Qu.:0,3   versicolor:50  
 Median :1,3   virginica :50  
 Mean   :1,2                  
 3rd Qu.:1,8                  
 Max.   :2,5                  
\end{Soutput}
\end{Schunk}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-003}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-004}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-005}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-006}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-007}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-008}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-009}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-010}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> library (rpart.plot) # basta rpart para cálculos     
> árbol <- rpart (Species ~
+                   Petal.Length + Petal.Width, 
+                 iris)
> árbol
\end{Sinput}
\begin{Soutput}
n= 150 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 150 100 setosa (0,33333 0,33333 0,33333)  
  2) Petal.Length< 2.45 50   0 setosa (1,00000 0,00000 0,00000) *
  3) Petal.Length>=2.45 100  50 versicolor (0,00000 0,50000 0,50000)  
    6) Petal.Width< 1.75 54   5 versicolor (0,00000 0,90741 0,09259) *
    7) Petal.Width>=1.75 46   1 virginica (0,00000 0,02174 0,97826) *
\end{Soutput}
\end{Schunk}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-012}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-013}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, yes.text="verdadero", no.text="falso")
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-014}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=3)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-015}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-016}
\end{frame}



\section{Generalidades}
\begin{frame}\frametitle{Nomenclatura}
  \begin{itemize}
  \item predictores: \(X_1, \dots, X_p\)
  \item respuesta: \(Y\) 
    \begin{itemize}
    \item cualitativa: árbol de clasificación
    \item cuantitativa: árbol de regresión
    \end{itemize}
  \item el árbol consta de \emph{ramas}
  \item cada rama nace de un \emph{nodo} o \emph{nudo}
  \item cada nodo representa un subconjunto de la muestra
  \item la muestra completa es el nodo \emph{raíz}
  \item nodo \(k\,^\text{\underline o}\): regla de decisión asociada a cierta \(X_i\)
    \begin{itemize}
    \item \(X_i\) cualitativa: ¿\(X_i\in A_{ik}\)?
    \item \(X_i\) cuantitativa: ¿\(X_i\leq c_k\)?
    \end{itemize}
  \item los nodos finales se llaman \emph{hojas}; \\ representan una partición de la muestra
  \end{itemize}
\end{frame}
\begin{frame}\frametitle{Algoritmos}
  \begin{description}
  \item [CHAID] 1980. CHi\(^2\) Automatic Interaction Detection.  Ramificaciones múltiples.  Sólo clasificación.
  \item [CART] 1984.  Classification and Regression Trees.  Ramificaciones binarias.  El más usado en R.
  \item [ID3\(\rightarrow\)C4.5] 1986.  El más popular en Weka (llamado J48).  Ramificaciones múltiples.  Sólo clasificación.
  \item [MARS] 1991.  Multivariate Adaptive Regression Splines.  Sólo regresión (lineal a trozos).
  \item [CIT] 2006.  Conditional Inference Trees.  Basados en contrastes múltiples no paramétricos.
  \end{description}
\end{frame}
\begin{frame}\frametitle{Elementos para la construcción}
  \begin{itemize}
  \item Método para elegir hoja candidata a división.
  \item Criterio de parada.
  \item Método para asignar a un nodo una predicción.
  \end{itemize}
\end{frame}
\begin{frame}\frametitle{Notación de los nodos}
  \begin{itemize}
  \item \(t\) un cierto nodo
  \item \(t_L\) nodo hijo izquierdo
  \item \(t_R\) nodo hijo derecho
  \item \(T\) conjunto de las hojas del árbol
  \end{itemize}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-017}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> árbol $ frame [, 1:5]          # todos los nodos
\end{Sinput}
\begin{Soutput}
           var   n  wt dev yval
1 Petal.Length 150 150 100    1
2       <leaf>  50  50   0    1
3  Petal.Width 100 100  50    2
6       <leaf>  54  54   5    2
7       <leaf>  46  46   1    3
\end{Soutput}
\begin{Sinput}
> árbol $ where [c(1:5,145:150)] # hojas
\end{Sinput}
\begin{Soutput}
  1   2   3   4   5 145 146 147 148 149 150 
  2   2   2   2   2   5   5   5   5   5   5 
\end{Soutput}
\begin{Sinput}
> table (árbol$where)     
\end{Sinput}
\begin{Soutput}
 2  4  5 
50 54 46 
\end{Soutput}
\end{Schunk}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4, nn=TRUE)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-019}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4, ni=TRUE)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-020}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4, extra=1)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-021}
\end{frame}


\section{Árboles de clasificación}
\begin{frame}\frametitle{Elegir siguiente corte:\\medidas de impureza}
  \begin{displaymath}
     \Phi \colon \begin{array}[t]{ccc}
                   \mathbb P & \rightarrow & \mathbb R  \\
                   (p_1,\dots,p_k) & \mapsto     & \Phi(p_1,\dots,p_k)
                 \end{array}
  \end{displaymath}
  donde
  \[ \mathbb P = \{ (p_1,\dots,p_k)\in[0;1]^k\mid p_1+\dots+p_k=1\} \]
  Requisitos:
  \begin{itemize}
  \item Alcanzar máximo en \(\bigl(\frac1k,\dots,\frac1k\bigr)\).
  \item Alcanzar mínimo en conjuntos homogéneos como \(\bigl(0,\dots,0,1,0,\dots0\bigr)\).
  \item Invariante frente a permutaciones de \((p_1,\dots,p_k)\).
  \end{itemize}
\end{frame}
\begin{frame}\frametitle{}
  \begin{itemize}
  \item impureza del nodo \(t\): \[i(t) = \Phi(\Pr[1\mid t],\dots,\Pr[k\mid t])\]
    donde \(\Pr[j\mid t]\) es la probabilidad de la clase \(j\) en el nodo \(t\)
  \item reducción de la impureza al dividir \(t\) en \(\{t_L,t_R\}\)
    \[ \Delta i(t\rightarrow t_L,t_R) = i(t) - p_Li(t_L) - p_Ri(t_R)\]
    donde
    \begin{itemize}
    \item \(p_L\) es la proporción de \(t\) que se va a \(t_L\)
    \item \(p_R\) es la proporción de \(t\) que se va a \(t_R\) = \(1-p_L\)
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}\frametitle{}
  \begin{itemize}
  \item impureza del árbol \[ I(T) = \sum_{t\in T}\Pr(t)i(t)\]
  \item medidas habituales
    \begin{itemize}
    \item entropía o información \[ -\sum_j p_j \log p_j\]
    \item Gini \[ \sum_j p_j (1-p_j) = 1-\sum_j p_j^2 \]
    \end{itemize}
  \end{itemize}
\end{frame}
\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-022}
\end{frame}
\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> ## por omisión se usa Gini
> a.gini <- rpart (Species ~
+                   Petal.Length + Petal.Width, 
+                 iris,
+                 parms = list(split="gini"))
> a.info <- rpart (Species ~
+                   Petal.Length + Petal.Width, 
+                 iris,
+                 parms = list(split="information"))
\end{Sinput}
\end{Schunk}
\end{frame}

\begin{frame}\frametitle{Riesgo}
  \begin{itemize}
  \item riesgo de una hoja \[R(t) =\Pr[\text{error clasif.}\mid t]=1-\max_{j\in\text{clases}} \Pr[j\mid t]\]
  \end{itemize}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4, extra=1)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-024}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4, extra=2)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-025}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4, extra=3)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-026}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prp (árbol, type=4, extra=4)
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-027}
\end{frame}

\begin{frame}\frametitle{Riesgo}
  \begin{itemize}
  \item riesgo de una hoja \[R(t) =\Pr[\text{error clasif.}\mid t]=1-\max_{j\in\text{clases}} \Pr[j\mid t]\]
  \item riesgo del árbol \[R(T) =\Pr[\text{error clasif.}]= \sum_{t\in T} R(t)\Pr[t]\]
  \item disminución del riesgo si \(t\rightarrow\{t_L,t_R\}\) 
    \[ \Delta r = R(t) - R(t_L,t_R) >0 \]
    \item posible criterio de corte: maximizar \(\Delta r\)
  \end{itemize}
\end{frame}

\begin{frame}\frametitle{¿Riesgo como criterio de corte?}
  \begin{itemize}
    \item ¿maximizar \(\Delta r\)?
    \item supóngase:
      \begin{itemize}
      \item 80\% de individuos de clase 1 en la raíz
      \item cierto corte candidato llevaría a
        \begin{itemize}
        \item 54\% de clase 1 en \(t_L\) \(\Rightarrow\) asignar clase 1
        \item 100\% de clase 1 en \(t_R\) \(\Rightarrow\) asignar clase 1
        \end{itemize}
        pero \(\Delta r = 0\) aunque la bifurcación es muy informativa
      \end{itemize}
    \item supónganse dos cortes candidatos:
      \begin{itemize}
      \item corte A llevaría a 70\% y 70\% de clase 1
      \item corte B llevaría a 85\% y 50\% de clase 1
      \item el A tiene menos riesgo
      \item el B es preferible en la práctica, \\porque establece mejor
        cómo seguir dividiendo
      \end{itemize}
  \end{itemize}
\end{frame}
\begin{frame}\frametitle{Criterios de parada}
  \begin{description}
  \item[minsplit] Tamaño mínimo antes de cortar. \\ Por omisión, $20$.
  \item[minbucket] Tamaño mínimo de cada hoja.  Por omisión, $7$.
  \item[cp] Parámetro de complejidad. \\
    % Proporción mínima de mejora en el ajuste. \\
    Coeficiente de penalización por número de hojas. \\
    Por omisión, $1\%$.
  \item[maxdepth] 
    Máxima profundidad de las hojas \\(0 = profundidad de la raíz). \\ Por omisión, $30$.
  \end{description}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> árbol$frame[,1:6]
\end{Sinput}
\begin{Soutput}
           var   n  wt dev yval complexity
1 Petal.Length 150 150 100    1       0,50
2       <leaf>  50  50   0    1       0,01
3  Petal.Width 100 100  50    2       0,44
6       <leaf>  54  54   5    2       0,00
7       <leaf>  46  46   1    3       0,01
\end{Soutput}
\begin{Sinput}
> table (iris$Species,      
+        predict (árbol, iris, type="class"))
\end{Sinput}
\begin{Soutput}
             setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         49         1
  virginica       0          5        45
\end{Soutput}
\end{Schunk}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> rpart (Species~Petal.Length+Petal.Width, iris,
+    control = rpart.control (cp = 0, minsplit = 2))
\end{Sinput}
\begin{Soutput}
n= 150 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

 1) root 150 100 setosa (0,33333 0,33333 0,33333)  
   2) Petal.Length< 2.45 50   0 setosa (1,00000 0,00000 0,00000) *
   3) Petal.Length>=2.45 100  50 versicolor (0,00000 0,50000 0,50000)  
     6) Petal.Width< 1.75 54   5 versicolor (0,00000 0,90741 0,09259)  
      12) Petal.Length< 4.95 48   1 versicolor (0,00000 0,97917 0,02083)  
        24) Petal.Width< 1.65 47   0 versicolor (0,00000 1,00000 0,00000) *
        25) Petal.Width>=1.65 1   0 virginica (0,00000 0,00000 1,00000) *
      13) Petal.Length>=4.95 6   2 virginica (0,00000 0,33333 0,66667)  
        26) Petal.Width>=1.55 3   1 versicolor (0,00000 0,66667 0,33333)  
          52) Petal.Length< 5.45 2   0 versicolor (0,00000 1,00000 0,00000) *
          53) Petal.Length>=5.45 1   0 virginica (0,00000 0,00000 1,00000) *
        27) Petal.Width< 1.55 3   0 virginica (0,00000 0,00000 1,00000) *
     7) Petal.Width>=1.75 46   1 virginica (0,00000 0,02174 0,97826) *
\end{Soutput}
\end{Schunk}
\end{frame}
\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-030}
\end{frame}
\begin{frame}[fragile]\frametitle{}
\includegraphics{arboles-woven-031}
\end{frame}
\begin{frame}\frametitle{Criterio de poda}
  \begin{itemize}
  \item \(T_\infty\) árbol sin ramas, sólo raíz 
  \item $\alpha>0$ parámetro de complejidad
  \item \(R_\alpha(T)=R(T)+\alpha\cdot|T|\cdot R(T_\infty)\)
  \item \(T_\alpha\) único árbol que minimiza \(R_\alpha\)
  \item \(T_0\) árbol completo
  \end{itemize}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> printcp (árbol)                 # árbol$cptable
\end{Sinput}
\begin{Soutput}
Classification tree:
rpart(formula = Species ~ Petal.Length + Petal.Width, data = iris)

Variables actually used in tree construction:
[1] Petal.Length Petal.Width 

Root node error: 100/150 = 0,67

n= 150 

    CP nsplit rel error xerror  xstd
1 0,50      0      1,00   1,16 0,051
2 0,44      1      0,50   0,58 0,060
3 0,01      2      0,06   0,07 0,026
\end{Soutput}
\end{Schunk}
\end{frame}

\begin{frame}[fragile]\frametitle{Validación cruzada}
Cambiar número de cruzvalidaciones\\
para obtener resultados más estables:\\[3ex]
\begin{Schunk}
\begin{Sinput}
> a100 <- rpart (Species~Petal.Length+Petal.Width, 
+                iris,
+                control=rpart.control(cp=0,
+                                      minsplit=2,
+                                      xval=100))
> a100$cptable
\end{Sinput}
\begin{Soutput}
    CP nsplit rel error xerror    xstd
1 0,50      0      1,00   1,50 0,00000
2 0,44      1      0,50   0,88 0,06031
3 0,02      2      0,06   0,08 0,02752
4 0,01      3      0,04   0,09 0,02909
5 0,00      6      0,01   0,07 0,02583
\end{Soutput}
\end{Schunk}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> plotcp (a100) # abscisas = medias geométricas
\end{Sinput}
\end{Schunk}
\includegraphics{arboles-woven-034}
\end{frame}

\begin{frame}[fragile]\frametitle{}
\begin{Schunk}
\begin{Sinput}
> prune (a100, cp=0.09) # cualq. entre 0,02 y 0,44
\end{Sinput}
\begin{Soutput}
n= 150 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 150 100 setosa (0,33333 0,33333 0,33333)  
  2) Petal.Length< 2.45 50   0 setosa (1,00000 0,00000 0,00000) *
  3) Petal.Length>=2.45 100  50 versicolor (0,00000 0,50000 0,50000)  
    6) Petal.Width< 1.75 54   5 versicolor (0,00000 0,90741 0,09259) *
    7) Petal.Width>=1.75 46   1 virginica (0,00000 0,02174 0,97826) *
\end{Soutput}
\end{Schunk}
\end{frame}
\begin{frame}[fragile]\frametitle{Importancia de las variables}
\includegraphics{arboles-woven-036}
\end{frame}

\begin{frame}[fragile]\frametitle{Importancia de las variables}
  \begin{itemize}
  \item suma de calidad de la división en
    nodos cuyas reglas involucran la variable
  \item si dos variables están muy correladas, su importancia conjunta
    se dividirá entre las dos y puede que ninguna destaque
  \item como componente \texttt{variable.importance} del
    objeto \texttt{rpart} aparece en forma absoluta
\begin{Schunk}
\begin{Sinput}
> árbol $ variable.importance
\end{Sinput}
\begin{Soutput}
 Petal.Width Petal.Length 
       88,97        81,34 
\end{Soutput}
\end{Schunk}
  \item en la salida de \verb+summary+ aparece en porcentajes
  \end{itemize}
\end{frame}

\begin{frame}[fragile]\frametitle{Importancia de las variables}
\begin{Schunk}
\begin{Sinput}
> summary (árbol)
\end{Sinput}
\begin{Soutput}
Call:
rpart(formula = Species ~ Petal.Length + Petal.Width, data = iris)
  n= 150 

    CP nsplit rel error xerror    xstd
1 0,50      0      1,00   1,16 0,05128
2 0,44      1      0,50   0,58 0,05964
3 0,01      2      0,06   0,07 0,02583

Variable importance
 Petal.Width Petal.Length 
          52           48 

Node number 1: 150 observations,    complexity param=0,5
  predicted class=setosa      expected loss=0.6667  P(node) =1
    class counts:    50    50    50
   probabilities: 0.333 0.333 0.333 
  left son=2 (50 obs) right son=3 (100 obs)
  Primary splits:
      Petal.Length < 2,45 to the left,  improve=50, (0 missing)
      Petal.Width  < 0,8  to the left,  improve=50, (0 missing)
  Surrogate splits:
      Petal.Width < 0,8  to the left,  agree=1, adj=1, (0 split)

Node number 2: 50 observations
  predicted class=setosa      expected loss=0  P(node) =0.3333
    class counts:    50     0     0
   probabilities: 1.000 0.000 0.000 

Node number 3: 100 observations,    complexity param=0,44
  predicted class=versicolor  expected loss=0.5  P(node) =0.6667
    class counts:     0    50    50
   probabilities: 0.000 0.500 0.500 
  left son=6 (54 obs) right son=7 (46 obs)
  Primary splits:
      Petal.Width  < 1,75 to the left,  improve=38,97, (0 missing)
      Petal.Length < 4,75 to the left,  improve=37,35, (0 missing)
  Surrogate splits:
      Petal.Length < 4,75 to the left,  agree=0,91, adj=0,804, (0 split)

Node number 6: 54 observations
  predicted class=versicolor  expected loss=0.09259  P(node) =0.36
    class counts:     0    49     5
   probabilities: 0.000 0.907 0.093 

Node number 7: 46 observations
  predicted class=virginica   expected loss=0.02174  P(node) =0.3067
    class counts:     0     1    45
   probabilities: 0.000 0.022 0.978 
\end{Soutput}
\end{Schunk}
\end{frame}

\section{Árboles de regresión}
\begin{frame}[fragile]\frametitle{Regresión}
  \begin{itemize}
  \item \(Y\) cuantitativa
  \item \verb|rpart| usa el método \verb|anova|
  \item predicción \(\hat y_t\): al nodo \(t\) se le asigna \(\bar y = \frac1{n_t}\sum_{i\in t} y_i\) \\
    (en clasificación asignábamos la moda)
  \item criterio: maximizar \(\text{SC}_t-\text{SC}_L-\text{SC}_R\) donde
    \begin{itemize}
    \item \(\text{SC}_t\) = suma de cuadrados \(\sum (y_i-\bar y)^2\) en el nodo \(t\)
    \item \(\text{SC}_L\) = ídem en su nodo hijo \(L\)
    \item \(\text{SC}_R\) = ídem en su nodo hijo \(R\)
    \end{itemize}
  \item riesgo en el nodo \(t\): varianza \(\frac1{n_t}\sum_{i\in t} (y_i-\hat y_t)^2\) \\
    (en clasificación era la tasa de incorrectos)
  \end{itemize}
\end{frame}

\section{Resumen}

\begin{frame}[fragile]\frametitle{Protocolo para\\construir un \'arbol}
  \begin{enumerate}
  \item Determinar el n\'umero adecuado de permutaciones
    para validaci\'on cruzada: ¿\texttt{xval} = $n$, 10...?
  \item Crear un \'arbol completo
    \begin{itemize}
    \item \texttt{cp} = 0
    \item \texttt{minsplit} = 2 \'o \texttt{minbucket} = 1
    \item ¿\texttt{xval}?
    \end{itemize}
  \item Fijarse en si \verb|xstd|
    (errores t\'\i picos obtenidos por cruzvalidaci\'on)
    son reducidos.  Si no, aumentar \verb+xval+
  \item Buscar el par\'ametro de complejidad (\texttt{cp}) adecuado
\begin{verbatim}
plotcp (árbol)         # o printcp(árbol)
\end{verbatim}
  \item Podar el \'arbol (o recalcularlo con \texttt{cp})
\begin{verbatim}
arbol <- prune (árbol, cp=...)
rpart (..., control=rpart.control(cp=...))
\end{verbatim}
  \end{enumerate}
\end{frame}

\section{Ejercicios}

\begin{frame}[fragile]\frametitle{Ejercicio 1: iris}
  \begin{itemize}
  \item Construye un árbol de clasificación para los datos
    \verb+iris+ a partir de todas sus variables (en la
    presentación usamos sólo las de los pétalos).
  \item ¿Se gana algo respecto a usar sólo los pétalos?
  \item Compáralo con el análisis discriminante.
  \end{itemize}
\end{frame}

\begin{frame}[fragile]\frametitle{Ejercicio 2: mtcars}
  \begin{itemize}
  \item Construir un modelo de regresión lineal para estimar
    \verb+mpg+ a partir del resto de variables.
  \item Construir un árbol de regresión con el mismo objetivo.
  \item Comparar ambos modelos:
    \begin{itemize}
    \item Con la información que producen las funciones de R.
    \item Con el método de retención (entrenamiento y validación).
    \item Con validación cruzada.
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]\frametitle{Ejercicio 3: solder}
  \begin{itemize}
  \item Construye un árbol a partir de los datos
    \verb+solder.balance+ para buscar variables que afecten al número de
    proyecciones (\verb|skips|).
  \end{itemize}
\end{frame}

\begin{frame}[fragile]\frametitle{Ejercicio 4: genotipos}
  \begin{itemize}
  \item Construye un árbol para los datos
    \url{http://bellman.ciencias.uniovi.es/~carleos/master/manadine/curso1/AnalisisDatos1/3-arboles/dat/geno.csv} para predecir \verb|genotipo|.
  \end{itemize}
\end{frame}

% \begin{frame}[fragile]\frametitle{Ejercicio 5: tejido mamario}
%   \begin{itemize}
%   \item Construye un árbol de clasificación para los datos
%     sobre tejido mamario
%     de la Hoja 2.  Compáralo con el resultado obtenido con análisis discriminante.
%   \end{itemize}
% \end{frame}

\section{Bibliografía}
\begin{frame}[fragile]\frametitle{Más detalles}
  \begin{itemize}
  \item \url{https://es.wikipedia.org/wiki/Aprendizaje_basado_en_%C3%A1rboles_de_decisi%C3%B3n}
  \item \url{https://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf}
  \item \url{https://www.researchgate.net/publication/263671703_Fifty_Years_of_Classification_and_Regression_Trees}
  \end{itemize}
\end{frame}
\end{document}
