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()
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()
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()
Este resultado puede ser mejorado haciendo uso de los parámetros ofrecidos por la clase DecisionTreeClassifier, por ejemplo, max_samples y max_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