Curso
En los últimos años, los algoritmos de boosting se han vuelto muy populares en ciencia de datos y competiciones de machine learning. La mayoría de los ganadores de estas competiciones usan boosting para lograr gran precisión. Estas competiciones de ciencia de datos ofrecen una plataforma global para aprender, explorar y aportar soluciones a problemas empresariales y de administraciones públicas. Los algoritmos de boosting combinan varios modelos de baja precisión (o débiles) para crear modelos de alta precisión (o fuertes). Se pueden aplicar en ámbitos como crédito, seguros, marketing y ventas. Algoritmos como AdaBoost, Gradient Boosting y XGBoost se usan ampliamente para ganar competiciones de ciencia de datos. En este tutorial vas a aprender el algoritmo de ensemble AdaBoost, y cubriremos:
- Enfoque de aprendizaje automático con ensembles
- Bagging
- Boosting
- Stacking
- Clasificador AdaBoost
- ¿Cómo funciona el algoritmo AdaBoost?
- Construir el modelo en Python
- Pros y contras
- Conclusión
Enfoque de aprendizaje automático con ensembles
Un ensemble es un modelo compuesto que combina una serie de clasificadores de bajo rendimiento con el objetivo de crear un clasificador mejorado. Aquí, cada clasificador individual vota y la predicción final se obtiene por mayoría. Los ensembles suelen ser más precisos que un clasificador individual o base. Además, pueden paralelizarse asignando cada aprendiz base a máquinas distintas. En definitiva, los métodos de ensemble son meta-algoritmos que combinan varios métodos de machine learning en un único modelo predictivo para aumentar el rendimiento. Pueden reducir la varianza con bagging, reducir el sesgo con boosting o mejorar las predicciones con stacking.

-
Bagging significa bootstrap aggregation. Combina múltiples aprendices para reducir la varianza de las estimaciones. Por ejemplo, Random Forest entrena M árboles de decisión: puedes entrenar M árboles distintos sobre subconjuntos aleatorios de los datos y votar para la predicción final. Métodos de bagging: Random Forest y Extra Trees.
-
Los algoritmos de boosting parten de clasificadores de baja precisión para crear un clasificador de alta precisión. Un clasificador de baja precisión (o débil) ofrece una exactitud ligeramente mejor que lanzar una moneda. Un clasificador de alta precisión (o fuerte) presenta una tasa de error cercana a 0. El boosting puede centrarse en los casos que el modelo anterior predijo mal. Los algoritmos de boosting son menos propensos al sobreajuste. Los tres algoritmos siguientes gozan de gran popularidad en competiciones:
- AdaBoost (Adaptive Boosting)
- Gradient Tree Boosting
- XGBoost
-
Stacking (o stacked generalization) es una técnica de ensemble que combina las predicciones de múltiples modelos base en un nuevo conjunto de datos. Este nuevo conjunto se usa como entrada para otro clasificador final. A menudo también se denomina blending.

Según la disposición de los aprendices base, los métodos de ensemble pueden dividirse en dos grupos: en los ensembles en paralelo, los aprendices base se generan en paralelo (por ejemplo, Random Forest). En los ensembles secuenciales, los aprendices base se generan de forma secuencial (por ejemplo, AdaBoost).
Según el tipo de aprendices base, los ensembles pueden dividirse en dos grupos: el ensemble homogéneo usa el mismo tipo de aprendiz base en cada iteración. El ensemble heterogéneo usa distintos tipos de aprendices base en cada iteración.
Clasificador AdaBoost
AdaBoost, o Adaptive Boosting, es uno de los clasificadores de boosting propuesto por Yoav Freund y Robert Schapire en 1996. Combina múltiples clasificadores para aumentar la precisión. AdaBoost es un método iterativo: construye un clasificador fuerte combinando varios clasificadores con bajo rendimiento para lograr alta exactitud. La idea básica es ajustar los pesos de los clasificadores y de las muestras de entrenamiento en cada iteración para asegurar predicciones más precisas en observaciones inusuales. Cualquier algoritmo de machine learning puede usarse como clasificador base si acepta pesos en el conjunto de entrenamiento. AdaBoost debe cumplir dos condiciones:
- El clasificador debe entrenarse interactivamente sobre ejemplos ponderados.
- En cada iteración, intenta ajustar bien estos ejemplos minimizando el error de entrenamiento.
¿Cómo funciona el algoritmo AdaBoost?
Funciona en los siguientes pasos:
- Inicialmente, AdaBoost selecciona aleatoriamente un subconjunto de entrenamiento.
- Entrena el modelo de AdaBoost de forma iterativa eligiendo el conjunto de entrenamiento según las predicciones correctas de la iteración anterior.
- Asigna mayor peso a las observaciones mal clasificadas para que en la siguiente iteración tengan más probabilidad de ser clasificadas correctamente.
- También asigna un peso al clasificador entrenado en cada iteración según su precisión. Cuanto más preciso, mayor peso.
- Este proceso se repite hasta que los datos de entrenamiento se ajustan sin error o hasta alcanzar el número máximo de estimadores especificado.
- Para clasificar, realiza una "votación" entre todos los algoritmos de aprendizaje que has construido.

Construir el modelo en Python
Importar las librerías necesarias
Primero, carguemos las librerías necesarias.
# Load libraries
from sklearn.ensemble import AdaBoostClassifier
from sklearn import datasets
# Import train_test_split function
from sklearn.model_selection import train_test_split
#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics
Cargar el dataset
Para la parte de construcción del modelo, puedes usar el conjunto IRIS, un problema de clasificación multiclase muy conocido. Este dataset incluye 4 características (longitud y anchura del sépalo, longitud y anchura del pétalo) y una variable objetivo (el tipo de flor). Hay tres clases: Setosa, Versicolour y Virginica. El dataset está disponible en la librería scikit-learn, o puedes descargarlo del repositorio UCI Machine Learning.
# Load data
iris = datasets.load_iris()
X = iris.data
y = iris.target
Dividir el dataset
Para entender el rendimiento del modelo, es buena práctica dividir el dataset en conjunto de entrenamiento y de prueba.
Vamos a dividirlo usando la función train_test_split(). Debes pasar 3 parámetros: características, objetivo y tamaño del conjunto de prueba.
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # 70% training and 30% test
Construir el modelo AdaBoost
Creemos el modelo AdaBoost con Scikit-learn. AdaBoost utiliza por defecto DecisionTreeClassifier como clasificador base.
# Create adaboost classifer object
abc = AdaBoostClassifier(n_estimators=50,
learning_rate=1)
# Train Adaboost Classifer
model = abc.fit(X_train, y_train)
#Predict the response for test dataset
y_pred = model.predict(X_test)
"Los parámetros más importantes son base_estimator, n_estimators y learning_rate." (Adaboost Classifier, Chris Albon)
- base_estimator: Es el aprendiz débil usado para entrenar el modelo. Usa DecisionTreeClassifier como aprendiz débil por defecto. También puedes especificar otros algoritmos.
- n_estimators: Número de aprendices débiles que se entrenan de forma iterativa.
- learning_rate: Contribuye a los pesos de los aprendices débiles. Por defecto es 1.
Evaluar el modelo
Calculemos qué tan bien el clasificador o modelo puede predecir el tipo de flor.
La exactitud se calcula comparando los valores reales del conjunto de prueba con los valores predichos.
# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
Accuracy: 0.8888888888888888
Has obtenido una precisión del 88,88%, una cifra muy razonable.
Para seguir evaluando, también puedes crear un modelo usando distintos estimadores base.
Usar distintos aprendices base
He usado SVC como estimador base. Puedes usar cualquier aprendiz de ML como estimador base si acepta pesos de muestra, como Decision Tree o Support Vector Classifier.
# Load libraries
from sklearn.ensemble import AdaBoostClassifier
# Import Support Vector Classifier
from sklearn.svm import SVC
#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics
svc=SVC(probability=True, kernel='linear')
# Create adaboost classifer object
abc =AdaBoostClassifier(n_estimators=50, base_estimator=svc,learning_rate=1)
# Train Adaboost Classifer
model = abc.fit(X_train, y_train)
#Predict the response for test dataset
y_pred = model.predict(X_test)
# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
Accuracy: 0.9555555555555556
En este caso, la tasa de acierto es del 95,56%, una precisión muy buena.
Aquí, el estimador base SVC logra mejor precisión que el estimador base Decision Tree.
Pros
AdaBoost es fácil de implementar. Corrige iterativamente los errores del clasificador débil y mejora la precisión combinando aprendices débiles. Puedes usar muchos clasificadores base con AdaBoost. No suele ser propenso al sobreajuste. Esto se observa empíricamente, aunque no hay una razón teórica definitiva.
Contras
AdaBoost es sensible al ruido en los datos. Se ve muy afectado por los valores atípicos porque intenta ajustar cada punto a la perfección. Además, es más lento que XGBoost.
Conclusión
¡Enhorabuena, has llegado al final de este tutorial!
En este tutorial has aprendido los enfoques de aprendizaje con ensembles, el algoritmo AdaBoost, cómo funciona, cómo construir y evaluar el modelo con Python y la librería scikit-learn. También hemos comentado sus pros y contras.
Estaré encantado de leer tus comentarios o dudas. Puedes dejar una pregunta en los comentarios e intentaré responder lo antes posible.
Si quieres seguir aprendiendo sobre machine learning en Python, echa un vistazo a los cursos de DataCamp Extreme Gradient Boosting with XGBoost y Python Machine Learning: Scikit-Learn Tutorial.

