Ejemplo de bagging

Vamos a probar la clase BaggingClassifier con el dataset "wine" ofrecido por Scikit-learn:

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_wine

wine_dataset = load_wine()
X = pd.DataFrame(wine_dataset.data, columns = wine_dataset.feature_names)
y = wine_dataset.target
X.head()

Datos a analizar

Para comparar el clasificador a crear con el modelo en el que se basa, creamos un clasificador basado en árbol de decisión y estimamos su exactitud:

tree = DecisionTreeClassifier(max_depth = 3, random_state = 0)
cross_val_score(tree, X, y, cv = 10).mean()

0.88359133126935

A continuación, creamos el clasificador bagging indicando el algoritmo en el que se basa y el número de éstos a considerar, y estimamos la exactitud del mismo:

model = BaggingClassifier(
    DecisionTreeClassifier(max_depth = 3),
    n_estimators = 100,
    random_state = 0
)
cross_val_score(model, X, y, cv = 10).mean()

0.9669590643274854

Este resultado puede ser mejorado haciendo uso de los parámetros ofrecidos por la clase DecisionTreeClassifier, por ejemplo, max_samplesmax_features, que controlan el porcentaje de muestras y de características a considerar en cada uno de los aprendices a entrenar, respectivamente:

model = BaggingClassifier(
    DecisionTreeClassifier(max_depth = 3),
    n_estimators = 100,
    random_state = 0,
    max_samples = 0.7,
    max_features = 0.3
)
cross_val_score(model, X, y, cv = 10).mean()

0.9830065359477125