Machine Learning
Ensemble Learning
Jenny Fajardo Calderín ([Link]@[Link])
Iker Pastor López ([Link]@[Link])
Índice
1. Motivación e ideas básicas
2. Modelos de ensemble
○ Bagging
○ Boosting
○ Stacking
3. Random Forest
Motivación
● Imaginemos que quiero un sistema de predicción de peso
● ¿Cuánto pesan estas naranjas?
○ Podemos indagar en la clase y que hable la democracia…
■ ¿Quién suele cocinar? ¿Quién come fruta? ¿Quién hace las compras normalmente? ¿Quién compra fruta
al peso? ¿A quién le gustan las naranjas? ¿Alguien ha trabajado en una frutería?..
■ De esta forma podemos escoger a la persona (sistema) que mejor prediga
○ También podemos preguntar a todos y tomar el promedio
● ¿Ventajas e inconvenientes de cada enfoque?
Motivación
● Buscar un “experta/o”
○ Se necesita bastante tiempo para elegirlo
○ Su precisión puede que no sea buena (no tiene el día inspirado)
● Preguntar al grupo
○ Es relativamente rápido
○ Es relativamente sencillo
Motivación
● Haciendo números
○ Imaginemos que tenemos 25 modelos de clasificación (binaria)
■ Cada uno tiene una tasa de acierto del 65% (son un bastante malos)
■ Son independientes entre sí
■ Todos votan sobre el resultado a dar
■ La probabilidad de que la mayoría (13 o más) se equivoque en su predicción es del 6%
● Entre todos, tienen una tasa de acierto del 94%!
○ Es más sencillo encontrar 25 modelos con un 65% de acierto que un único
modelo con un 94%
Idea básica
● Idea básica
○ Construir un conjunto de sistemas diferentes
○ Preguntarle a todos y tomar una decisión
■ Por lo general, mejora la capacidad de predicción
■ (Muy) Fácilmente paralelizable
○ Principal inconveniente
■ El resultado puede ser difícilmente analizable
Idea básica
Dataset original de entrenamiento
Paso1: Crear
múltiples
datasets D1 D2 Dt-1 Dt
Paso2:
Entrenamos
diferentes C2 C2 Ct-1 Ct
modelos
Paso3:
Combinamos
los C
clasificadores
3 Enfoques diferentes
● Bagging (Bootstrap Aggregating)
○ Dividimos el conjunto de datos en porciones
○ Utilizamos cada porción para entrenar un sistema (normalmente del mismo tipo)
● Boosting
○ Construimos diferentes modelos (del mismo tipo)
○ Cada uno intenta “enmendar” los errores de los previos
● Stacking
○ Construimos diferentes modelos (de diferentes tipos)
○ Se construye un “supervisor” que elija la salida a dar a partir de los votos
Bagging
● Mejora los resultados si el método es “inestable”
○ Un pequeño cambio en los datos puede variar mucho la salida del modelo
(árboles, redes neuronales,...)
● Extensión:
○ Se puede aleatorizar el método, en lugar de los datos
○ Pesos iniciales en redes neuronales
○ Dar a cada modelo ciertas “columnas” de los datos
Bagging Random Forest
● Es una variante de algoritmo Bagging basado en árboles
○ Se basa en la combinación de árboles de decisión
○ Cada árbol depende de los valores de datos elegidos aleatoriamente
○ Cada árbol se construye con una porción de todos los atributos disponibles
○ Observar que:
■ Los datos que entrena cada árbol pueden variar
■ Las variables que utiliza cada árbol pueden variar
○ Se evita el overfitting
Bagging Random Forest
import [Link] as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from [Link] import plot_decision_regions
from [Link] import accuracy_score
from [Link] import RandomForestClassifier
# Cargamos el dataset IRIS
iris = datasets.load_iris()
X = [Link][:, 2:]
y = [Link]
Bagging Random Forest
#
# Creamos los conjuntos de train/test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)
# Creamos una instancia del clasificador RandomForest, en este caso para clasificar
forest = RandomForestClassifier(criterion='gini',
n_estimators=5,
random_state=1,
n_jobs=2)
# Fit the model
Bagging Random Forest
#
# Entrenamos el modelo
[Link](X_train, y_train)
# Realizamos la predicción del test, y obtenemos los resultados
y_pred = [Link](X_test)
print('Accuracy: %.3f' % accuracy_score(y_test, y_pred))
Boosting
● Analogía: votación donde cada votante sabe el voto de los votantes anteriores
● Funcionamiento
○ Asignamos pesos a los ejemplos
○ Se entrenan k clasificadores
○ Los pesos de los datos donde un clasificador acierta, disminuyen, los datos
donde falla, aumentan
○ La salida final es el voto ponderado (en función del acierto)
Boosting
● Ejemplo
○ Tenemos 5 ejemplos {1,2,3,4,5}
○ Inicialmente cada uno tiene un peso de 0.2
■ (probabilidad de ser elegidos)
○ Elegimos datos aleatoriamente {2, 4, 4, 3, 2}
○ Entrenamos un clasificador, lo probamos con los datos
■ Acierta en datos 2, 3 y 5 → reducimos sus pesos
■ Falla en 1 y 4 → aumentamos sus pesos
○ En la siguiente ronda, se vuelven a elegir 5 ejemplos, pero ahora, 1 y 4 se
escogerán con más probabilidad
■ El siguiente clasificador se “fijará” más en ellos
Boosting Adaboost
from [Link] import AdaBoostClassifier
from [Link] import make_classification
X, y = make_classification(n_samples=1000, n_features=4,
n_informative=2, n_redundant=0,
random_state=0, shuffle=False)
clf = AdaBoostClassifier(n_estimators=100, random_state=0)
[Link](X, y)
AdaBoostClassifier(n_estimators=100, random_state=0)
[Link]([[0, 0, 0, 0]])
[Link](X, y)
Resumen
● También utiliza un esquema de votos
● Pondera a los modelos según su calidad
● Iterativo: nuevos modelos se influencian de la calidad de los anteriores
○ Guían al nuevo modelo a ser “experto” en los datos para los que otros
fallan
○ Justificación intuitiva: los modelos deben de complementarse los unos a
los otros
○ Variantes:
■ Boosting por datos: los pesos influyen en los ejemplos para entrenar
■ Boosting por peso: los pesos son usados por el método de aprendizaje
Bibliografía
Machine Learning
Ensemble Learning
Jenny Fajardo Calderín ([Link]@[Link])
Iker Pastor López ([Link]@[Link])