flowchart TD A[Datos entrenamiento] --> B[Muestra 1 nuevos pesos] B --> C[Muestra 2 nuevos pesos] C --> |...|D[Muestra M nuevos pesos] style A fill:#b6daf6
Métodos de potenciación
Aprendizaje Supervisado vs Aprendizaje no supervisado.
La mayoría de problemas de aprendizaje estadístico pueden ser clasificados dos categorías: Aprendizaje Supervisado y Aprendizaje No Supervisado.
Aprendizaje supervisado.
Para cada observación de las variables predictoras \(x_i~;~i=1,..,n\) existe una variable respuesta \(y_i\). Se desea ajustar un modelo de datos que relacione la variable respuesta \(y_i\) con las variables predictoras.
Predicción: para futuras observaciones de individuos tratar de pronosticar con exactitud la respuesta.
Inferencia: comprender mejor la relación entre la respuesta y las predictoras.
Algunos ejemplos de métodos de solución de problemas asociados con aprendizaje supervisado:
- Regresión lineal
- Regresión polinómica.
- Regresión Ridge.
- Regresión Lasso.
- Regresión logística.
- Árboles de decisión.
- Máquinas de soporte vectorial.
- Random Forest.
- K-Nearest Neighbors (KNN).
- Naive Bayes. …
Aprendizaje no supervisado.
Para cada observación \(i=1,..., n\), se tiene un vector \(x_i\), sin embargo, no se tiene asociado una variable respuesta \(y_i\) que permita supervisar algún ajuste.
Cuando se utiliza aprendizaje no supervisado se puede tratar de entender las relaciones entre variables o las relaciones entre las observaciones. Una herramienta de aprendizaje estadístico que podemos utilizar en este contexto es el análisis de conglomerados, o clustering. El objetivo del análisis de conglomerados es determinar, a partir del análisis de x1, . , xn , si las observaciones pertenecen a grupos relativamente distintos. Por ejemplo, en un estudio de segmentación de mercado podríamos observar múltiples características (variables) de los clientes potenciales, como el código postal, los ingresos familiares y los hábitos de compra. Podríamos pensar que los clientes pertenecen a grupos diferentes, como los que gastan mucho o los que gastan poco. Si se dispusiera de información sobre los patrones de gasto de cada cliente, sería posible realizar un análisis supervisado. Sin embargo, esta información no está disponible, es decir, no sabemos si cada cliente potencial es un gran gastador o no. En este caso, podemos intentar agrupar a los clientes en función de las variables medidas, con el fin de identificar distintos grupos de clientes potenciales. La identificación de estos grupos puede ser interesante porque es posible que difieran en alguna propiedad de interés, como los hábitos de gasto. Algunos métodos de aprendizaje no supervisado:
- K-means
- Clustering jerárquico.
- Análisis de componentes principales.
- Análisis discriminante no supervizado. …
Problemas de regresión vs Problemas de clasificación
Las variables pueden ser clasificadas como cuantitativas o cualitativas. Las variables cuantitativas toman valores numéricos: edad, estatura, ingreso, precio de una materia prima, costo de una vivienda. En contraste, las variables cualitativas toman valores en una de \(k\) clases o categorías diferentes: estado civil, marca de producto comprado, tipo de diagnóstico de una enfermedad.
En análisis de datos suele referirse a los problemas con variables respuesta cuantitativas como problemas de regresión, mientras que, a los problemas con variable respuesta cualitativa se consideran problemas de clasificaicón
Métodos de potenciación
También conocido como BOOSTING La idea de los métodos de potenciación consiste en tomas una muestra aleatoria de los datos originales y aplicar sobre esta un método predictivo y luego aumentar el peso (potenciar) a los individuos mal clasificados para que en la siguiente aplicación del método predictivo se enfoque en los individuos mal clasificados, mejornado su clasificación.
El boosting nació en el contexto de los problemas de clasificación y tardó varios años en poderse extender a los problemas de regresión. Originalmente se emplea para métodos de clasificación en dondela variable respuesta tiene 2 clases
Funcionamiento del método de potenciación.
El funcionamiento gráfico del método se observa en la Figura 1
Para la tabla de entrenamiento se aplica el método de clasificación \(G_1(x)\).
Para la Muestra 1 se aplica el método de clasificación \(G_2(x)\). La Muestra 1 está potenciada, esto es, los individuos mal clasificados en \(G_1(x)\) tienen mayor probabilidad de estar en la Muestra 1.
Para la Muestra 2 se aplica el método de clasificación \(G_3(x)\). La Muestra 2 está potenciada, esto es, los individuos mal clasificados en \(G_2(x)\) tienen mayor probabilidad de estar en la Muestra 2.
Para la Muestra M se aplica el método de clasificación \(G_M(x)\). La Muestra M está potenciada, esto es, los individuos mal clasificados en \(G_{M-1}(x)\) tienen mayor probabilidad de estar en la Muestra M
Como el método predictivo \(G_{M}(x)\) puede clasificar mal un individuo anteriormente bien clasificado por \(G_{M-1}(x)\) se aplica un consenso que corresponde al clasificador final:
\[\begin{align} G(x) = sign \left[ \sum_{m=1}^M \alpha_m G_m(x) \right] \end{align}\]
El método de potenciación más usado corresponde al algoritmo adaBoost.M1, que se lleva a cabo de la siguiente forma:
Inicializar los pesos de las observaciones \(w_i = \frac{1}{N}\) con \(i=1,2,..,N\)
Para \(m=1~hasta~ M\)
Ajustar un clasificador \(G_m()x\) a los datos de entrenamiento usando \(w_i\)
Calcular la proporción de errores:
\[\begin{align} err_m = \frac{\sum_{i=1}^N w_iI(y_i \ne G_m(x_i))}{\sum_{i=1}^N w_i} \end{align}\]
- Calcular:
\[\begin{align} \alpha_m = log \left[ \frac{1-err_m}{err_m} \right] \end{align}\]
- Recalcular \(w_i\)
\[\begin{align} w_i \leftarrow w_ie^{\alpha_m I(y_i \ne Gm(x_i))} \end{align}\]
- Salida:
\[\begin{align} G(x) = sign \left[ \sum_{m=1}^M \alpha_m G_m(x) \right] \end{align}\]
Vemos que el algoritmo AdaBoost no combina árboles independientes (como sería el caso de los bosques aleatorios, por ejemplo), sino que estos se van generando en una secuencia en la que cada árbol depende del anterior. Se utiliza siempre el mismo conjunto de datos (de entrenamiento), pero a estos datos se les van poniendo unos pesos en cada iteración que dependen de lo que ha ocurrido en la iteración anterior: se les da más peso a las observaciones mal clasificadas para que en sucesivas iteraciones se clasifiquen bien.
Baoosting para árboles de deciciones de clasificación enR
usando la librería ada
Usaremos una base de datos que contiene la siguiente información fisico-química y de calidad:
fixed.acidity: acidez fija.
volatile.acidity:acidez volátil.
Citric.acid: ácido cítrico.
residual.sugar: azúcar residual.
chlorides: cloruros.
free.sulfur.dioxide : dióxido de azufre libre.
total.sulfur.dioxide: dióxido de azufre total.
density: densidad,
pH: PH.
sulphates: sulfatos
alcohol: alcohol)
taste: sabor, que indica la calidad del vino (se considera bueno si la mediana de las evaluaciones de la calidad del vino, realizadas por expertos, que los evaluaron entre 0 = muy malo y 10 = muy excelente, no es inferior a 6. Factor con niveles «bueno» y «malo» que indican la calidad del vino.
Librerías
library(ada) #Para boosting
library(rpart) #Para árboles de decisión
library(mpae) #Contiene la base de datos que se utilizará como ejemplo
library(caret) #Matriz de confusión
library(pROC) #Curva ROC y AUC
Creación del data.frame
a partir de la base de datos winetaste
de mpae
<- winetaste datos
Limpieza básica de datos N/A
<- na.omit(datos) datos
Definición de la base de datos en entrenamiento y prueba
set.seed(1) #Semilla para replicabilidad del ejemplo
<- nrow(datos)
numero_obs <- sample(numero_obs, 0.8*numero_obs, replace=FALSE)
base_entrenamiento<- datos[base_entrenamiento,]
datos_entrenamiento <- datos[-base_entrenamiento,] datos_prueba
Planteamiento del modelo
<- rpart.control(maxdepth = 2, cp=0, minsplit = 10, xval=0)
control #El árbol control tendrá una profundidad máxima de 2. No se aplica poda,número mínimo de observaciones en la clasificación de 10. Sin validación cruzada.
set.seed(1)
<- ada(taste~., data= datos_entrenamiento, type="real", control= control, iter=200, nu=0.05)
boosting boosting
Call: ada(taste ~ ., data = datos_entrenamiento, type = “real”, control = control, iter = 200, nu = 0.05)
Loss: exponential Method: real Iteration: 200
Final Confusion Matrix for Data: Final Prediction True value bad good bad 199 139 good 60 602
Train Error: 0.199
Out-Of-Bag Error: 0.215 iteration= 192
Additional Estimates of number of iterations:
train.err1 train.kap1 195 195
# Se estiman probabilidades continuas, para pesos suaves. Se ajustan 100 árboles. Peso del nuevo clasificador de 0.05.
Evaluación del modelo con matriz de confusión
<- predict(boosting, newdata=datos_prueba)
prediccion <- confusionMatrix(data = prediccion, reference = datos_prueba$taste)
matriz_confusion matriz_confusion
Confusion Matrix and Statistics
Reference
Prediction good bad good 150 46 bad 16 38
Accuracy : 0.752
95% CI : (0.6937, 0.8043)
No Information Rate : 0.664
P-Value [Acc > NIR] : 0.0016219
Kappa : 0.3904
Mcnemar’s Test P-Value : 0.0002305
Sensitivity : 0.9036
Specificity : 0.4524
Pos Pred Value : 0.7653
Neg Pred Value : 0.7037
Prevalence : 0.6640
Detection Rate : 0.6000
Detection Prevalence : 0.7840
Balanced Accuracy : 0.6780
'Positive' Class : good
Para recordar
\[\begin{align} Accuracy = \frac{TP+TN}{TP+TN+FP+FN} \end{align}\]
\[\begin{align} Sensitivity = \frac{TP}{TP+FN} \end{align}\]
\[\begin{align} Specificity = \frac{TN}{TN+FP} \end{align}\]
Evaluación del modelo con ROC
y AUC
#Predicción como probabilidades
<- predict(boosting,datos_prueba, type="prob")
prob_prediccion
#Probabilidad "Positiva" o "Buena"
<- prob_prediccion[, 2]
prob_positiva
# Variable binaria con la clase "verdadera"
<- datos_prueba$taste
clase_verdadera
#Curva ROC
<- roc(clase_verdadera, prob_positiva)
curva_ROC plot(curva_ROC, main = "Curva ROC para el modelo Bagging")
#AUC
<- auc(curva_ROC)
valor_AUC print(valor_AUC)
Area under the curve: 0.7878
Podemos analizar la convergencia
plot(boosting)