Métodos de Ensamble: Bagging y Boosting en Machine Learning
Resumen
¿Qué es el método de ensamble y por qué está de moda?
El método de ensamble se ha convertido en una tendencia en el ámbito de la inteligencia artificial y el machine learning, principalmente porque facilita obtener resultados de calidad al combinar múltiples modelos o algoritmos. Esta técnica busca un consenso entre varios estimadores para ofrecer una respuesta única y óptima, lo que la convierte en una herramienta poderosa y altamente efectiva. Además, su popularidad ha crecido tras su éxito en competencias de plataformas como Kaggle.
¿Cómo funciona el método de ensamble?
El principio detrás del método de ensamble es la diversidad. Al probar diferentes modelos con distintos parámetros, se explora un mayor espacio de soluciones, lo que generalmente resulta en respuestas más precisas. Existen dos estrategias principales dentro de este enfoque:
Bagging (Bootstrap Aggregating): Aquí, se crean particiones uniformes del conjunto de datos, permitiendo la repetición de muestras. Se entrena un modelo en cada partición por separado y al final se llega a una respuesta consensuada, por ejemplo, mediante votación mayoritaria. Este método es efectivo porque toma en cuenta la opinión de "varios expertos", aumentando la robustez del modelo.
# Ejemplo de implementación de Random Forest (un método de bagging)from sklearn.ensemble import RandomForestClassifier
# Crear el modelomodelo = RandomForestClassifier(n_estimators=100, random_state=42)# Entrenar el modelomodelo.fit(X_train, y_train)# Predecirpredicciones = modelo.predict(X_test)
Modelos reconocidos que utilizan bagging incluyen Random Forest, que combina varios árboles de decisión para mejorar sus predicciones.
Boosting: Se centra en mejorar el rendimiento mediante el aprendizaje secuencial donde cada modelo intenta corregir los errores del anterior. Esto se traduce en modelos más fuertes y precisos al pasar clasificadores menos complejos por esta secuencia, llegando a un resultado más poderoso.
Boosting mejora un modelo débil a través de repeticiones secuenciales, utilizando algoritmos como AdaBoost y Gradient Boosting. Estos modelos corrigen errores de iteraciones previas para ofrecer una predicción más precisa.
¿Cuáles son algunos ejemplos prácticos de métodos de ensamble?
Random Forest: Un clásico ejemplo de bagging que emplea múltiples árboles de decisión para aumentar la precisión y evitar el sobreajuste.
AdaBoost y Gradient Boosting: Ejemplos de boosting que optimizan la precisión del modelo al enfocarse en corregir errores de iteraciones previas.
XGBoost: Una implementación avanzada de boosting que ofrece grandes mejoras en eficiencia y desempeño, ampliamente utilizada en competiciones y aplicaciones industriales.
¿Cómo implementar estos métodos en tus proyectos?
Los métodos de ensamble son herramientas poderosas que deberías considerar al combatir problemas complejos con machine learning. Por ejemplo, la librería Scikit-learn proporciona implementaciones de diversos métodos de ensamble como Random Forest y AdaBoost. Para XGBoost, se puede integrar fácilmente mediante una librería externa:
# Instalación de la librería XGBoostpip install xgboost
Cada uno de estos métodos se puede personalizar mediante parámetros específicos dependiendo de los requerimientos del dataset y el problema en cuestión.
¿Tienes experiencia con métodos de ensamble?
Queremos conocer tus experiencias. ¿Has utilizado métodos de ensamble en tus proyectos? ¿Cómo lograste consenso entre múltiples estimadores? Comparte tus experiencias y aprendizaje, ya que aprender unos de otros es fundamental para el crecimiento continuo en el emocionante campo del machine learning.
Continúa explorando, aprendiendo y experimentando. A medida que perfecciones tus habilidades con los métodos de ensamble, te abrirás a nuevas oportunidades y soluciones más efectivas.
Una vez se me ocurrió tomar varios métodos de Machine Learning para regresión y al final utilizaba un regresión lineal con las salida de los métodos para mejorar una predicción y equilibrar el error entre métodos.
:rocket:
He utilizado métodos de ensamble, sobre todo el Gradient Boosting Tree, lo considero muy potente y en la mayoría de los casos con solo tutearlo un poco el modelo genera unas excelentes predicciones. Por otra parte he usado el XGBoost, y me parece también un super método para hacer aproximaciones.
:nerd_face:
También me he usado LightGBM cuando estoy empezando con modelos baseline, esto para el caso de hacer Feature Engineering.
:robot:
Va un comentario a modo de crítica para Platzi, y no para el curso. Siempre tienen a exagerar TODO.
↕️
Haces dos líneas de código y ya te dicen “Experto en programación”
↕️
En este caso, es un curso “profesional” de SKLearn y no te explican cómo funciona un algoritmo, ni cómo aprender a optimizarlos.
↕️
Hacer fit y predict no tiene nada de “profesional”.
Siendo que Platzi nació como una plataforma para aprender tecnología, es donde menos se destaca.
nunca serás experto ni profesional mirando tutoriales, ni en platzi ni en ninguna plataforma..
ese nivel se alcanza realizando proyectos por tu cuenta, que apliques estos métodos de machine learning en situaciones de la vida real.
estoy de acuerdo con exagerar por que te da la seguridad de intentarlo, y no quedarse en el limbo de los tutoriales
Pero aun así considero la crítica bien recibida y te pregunto, ¿tú ya eres un experto en programación? qué estás esperando para convertirte en uno? :muscle:
Recordar que el proceso previo a esto a que hacer un análisis exploratorio de datos para saber como cuales son nuestros datos, sin hay nulos, si están balanceados los datasets.
Además de que debemos usar métodos como cross-validation para sestear mucho más nuestro modelos y así como tratar de entender mucho mejor indicadores de performance para los modelos.
Muchas veces no es necesario los métodos de ensamble pero son una gran herramienta a tener en cuenta.
No conocía mucho de estas estrategias. Normalmente lo que hacia es dependiendo del problema, tomar varios métodos que fueran pertinentes y probarlos , para ver con cual se conseguía un buen accuracy.
Según he visto en este y otros cursos Random Forest y Gradient Tree Boosting son los mejores métodos para solucionar muchos tipos de problema de ML, pero cuáles son las desventajas de estos métodos además de probablemente tener un mayor costo de procesamiento.
Como dice el coste de procesamiento puede ser brutal, dependiendo de como usted haya definido el modelo y de la cantidad de datos que necesite entrenar, scikit learn no es una herramienta especializada para casos tan extremos pero es algo a tener en cuenta otro problema es precisamente definir el modelo existen tantas posibles combinaciones que no se pueden probar todas pero si varias por lo cual el tiempo y de nuevo el procesamiento se vuelven contraproducentes y por último relacionado a lo anterior es que si no tiene mucho cuidado con su modelo puede caer muy fácilmente en el overfitting ya que se adapta muy bien a la topología de los datos que le proporcionemos.
Los métodos de ensamble, también conocidos como técnicas de ensamble o ensemble groups en inglés, son un enfoque poderoso en el aprendizaje automático que combina múltiples modelos más simples para crear un modelo más fuerte y preciso. Estos métodos aprovechan las ventajas de diferentes algoritmos de aprendizaje para mejorar la precisión y el rendimiento general del modelo.
El concepto clave detrás de los métodos de ensamblaje es que la combinación de varios modelos puede reducir el sesgo y la varianza inherente a los modelos individuales. Esto generalmente lleva a una mayor capacidad de generalización y una mayor resistencia a los valores atípicos y al ruido en los datos.
AdaBoost (Adaptive Boosting):
AdaBoost es un algoritmo de conjunto basado en incremento. Funciona construyendo varios modelos débiles secuencialmente y dando más peso a los ejemplos mal clasificados en cada iteración.
Impulso del árbol de gradiente:
Impulso del árbol de gradiente es otra técnica de conjunto basada en incremento. Al igual que AdaBoost, construye varios modelos secuencialmente, pero en lugar de asignar pesos a los ejemplos, Gradient Tree Boosting ajusta cada nuevo modelo para minimizar el error residual de los modelos anteriores.
XGBoost (Extreme Gradient Boosting):
XGBoost es una implementación más avanzada y eficiente de Gradient Tree Boosting. Utiliza técnicas como la poda, la regularización y el muestreo estocástico para mejorar el rendimiento y la velocidad del algoritmo.
Incluiria otra estrategia, aunque no seria la mejor opcion, tomar varios modelos y quedarme con el que tiene mayor exactitud en prediccion, seria una alternativa simple cuando entre varios modelos la exactitud es muy alta y aceptable, y ya no evaluaria los ensambles, es decir, si estoy a gusto con exactitud arriba del 98% por ejemplo, pero dependeria de la relevancia, si estoy evauando la eficacia de un fertilizante o si es la seguridad que el auto evite los accidentes, en este ultimo no seria aceptable un 98% de exactitud.
De los métodos de ensamble solo he llegado a utilizar random forest, para clasificar neumáticos defectuosos y de buena calidad. Extraje features de un conjunto de imagenes de llantas defectuosas y buenas, esto usando la librería de python opencv y luego probe varios modelos de aprendizaje supervisado, pero este me arrojo los mejores resultados.
No hay un ganador absoluto; depende de los datos, la simulación y las circunstancias.
El “embolsado” Bootstrap agregattion(Bagging) y el “aumento” impulsar/propulsar (Boosting) reducen la varianza de su estimación única, ya que combinan varias estimaciones de diferentes modelos. Así que el resultado puede ser un modelo con mayor estabilidad.
Si el problema es que el modelo único obtiene un rendimiento muy bajo, Rara vez el embolsado obtendrá un mejor sesgo. Sin embargo, Boosting podría generar un modelo combinado con menos errores ya que optimiza las ventajas y reduce las dificultades del modelo único.
Por el contrario, si la dificultad del modelo único es el ajuste excesivo, entonces el Bagging es la mejor opción. El refuerzo por su parte no ayuda a evitar el sobreajuste; de hecho, esta técnica se enfrenta a este problema en sí. Por esta razón, el Embolsado es efectivo con más frecuencia que el Impulso.
Similitudes y Diferencias
Ambos son métodos conjuntos para obtener N alumnos de 1 alumno... pero, si bien se construyen de forma independiente para Bagging, Boosting intenta agregar nuevos modelos que funcionan bien donde fallan los modelos anteriores.
Ambos generan varios conjuntos de datos de entrenamiento por muestreo aleatorio... pero solo Boosting determina los pesos de los datos para inclinar la balanza a favor de los casos más difíciles.
Ambos toman la decisión final promediando los N alumnos (o tomando la mayoría de ellos) pero es un promedio igualmente ponderado para Bagging y un promedio ponderado para Boosting, más peso para aquellos con un mejor rendimiento en los datos de entrenamiento.
Ambos son buenos para reducir la varianza y proporcionan una mayor estabilidad... pero solo Boosting intenta reducir el sesgo. Por otro lado, el embolsado puede resolver el problema de sobreajuste.
Bagging: Qué tal si en lugar de depender de la opinión de un solo "experto" consultamos la opinión de varios expertos en paralelo e intentamos
lograr un consenso?
Modelos Ensamblados basados en Bagging:
• Random Forest.
• Voting Classifiers/Regressors.
• En general se puede aplicar sobre cualquier
familia de modelos de Machine Learning.
Boosting:
• Es un método secuencial.
• Busca fortalecer gradualmente un modelo de aprendizaje usando siempre el error residual
de las etapas anteriores.
• El resultado final también se consigue por consenso entre
todos los modelos.
Los métodos de ensamble son técnicas poderosas en machine learning que combinan múltiples modelos débiles para obtener un modelo más robusto y preciso. Los dos métodos más populares son Bagging y Boosting.
🎯 ¿Qué es un modelo de ensamble?
Es un enfoque donde se entrenan varios modelos independientes y luego se combinan sus predicciones. Esto ayuda a:
Reducir el overfitting.
Mejorar la precisión.
Aumentar la robustez del modelo.
🧰 1. Bagging (Bootstrap Aggregating)
🔍 ¿Cómo funciona?
Se crean múltiples subconjuntos del dataset original mediante muestreo aleatorio con reemplazo.
A cada subconjunto se le entrena un modelo independiente (por ejemplo, árbol de decisión).
Se combinan las predicciones (voto mayoritario o promedio).
📦 Ejemplo típico: RandomForestClassifier
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
✅ Ventajas:
Reduce la varianza del modelo.
Funciona bien con modelos inestables (como árboles).
⚠️ Desventaja:
No reduce el sesgo (si todos los modelos son débiles).
⚡ 2. Boosting
🔍 ¿Cómo funciona?
Se entrena un modelo, se evalúan los errores.
Se ajusta otro modelo que corrige los errores del anterior.
Este proceso continúa, dando más peso a los errores pasados.
from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
model.fit(X_train, y_train)
✅ Ventajas:
Reduce tanto el sesgo como la varianza.
Alta precisión en muchos conjuntos de datos reales.
⚠️ Desventajas:
Más sensible a outliers y ruido.
Computacionalmente más costoso.
🧪 Comparativa Rápida
CaracterísticaBagging (Random Forest)Boosting (XGBoost, etc.)EntrenamientoParalelo (modelos en paralelo)Secuencial (modelos en cadena)Error reducidoVarianzaSesgo + VarianzaRobusto a outliers✅ Alta⚠️ MedioOverfittingMenorRiesgo medio si mal ajustadoTiempo de cómputoRápidoLento
🧠 ¿Cuándo usar cuál?
Caso¿Qué elegir?Dataset ruidoso o pequeñoBagging (Random Forest)Precisión es críticaBoosting (XGBoost, LightGBM)Tiempo de entrenamiento limitadoBaggingProblema complejo y no linealBoosting
Con estas dos metáforas de Caperucita roja fue que entendí mejor los métodos de ensamble.
Metáfora de Caperucita Roja para Bagging:
Imagina que Caperucita Roja tiene que elegir el mejor camino para llegar a la casa de su abuelita, pero no confía en un solo mapa, ya que algunos pueden ser incorrectos o confusos. Entonces, ella toma varios mapas diferentes del bosque, cada uno hecho por un cartógrafo distinto (esto sería como tener varios modelos de aprendizaje). Caperucita sigue cada uno de los mapas por separado y, al final, toma una decisión basada en la mayoría de los caminos que le indican las mismas direcciones (esto es como promediar las predicciones en Bagging). Al combinar los consejos de muchos mapas, reduce la posibilidad de cometer un error grave y se asegura de que, aunque algunos mapas sean incorrectos o tengan información incompleta, la mayoría la guiará correctamente.
Metáfora de Caperucita Roja para Boosting:
En este caso, Caperucita Roja empieza su viaje con un mapa que, lamentablemente, tiene algunos errores. A medida que avanza, se da cuenta de los errores que está cometiendo y, en lugar de ignorarlos, ajusta su ruta corrigiendo esos errores. Entonces, actualiza el mapa para prestar más atención a las partes del bosque donde se perdió (esto es como dar más peso a los errores en cada iteración de Boosting). Luego, con la experiencia y los errores aprendidos del primer mapa, sigue otro mapa, pero este es mejor y más enfocado en las áreas problemáticas. Con cada nuevo mapa, aprende más y más hasta que tiene un plan perfecto que le permite llegar sin problemas a la casa de su abuelita. Así es como Boosting aprende de los errores anteriores y los corrige para mejorar el rendimiento del modelo.
En mi experiencia, he usado un análisis exploratorio con la función GridSearchCV | Sklearn. Con esto se evalúan distintos modelos y la combinación de sus hiperparámetros a través de una validación cruzada K-Fold. Esto se hace para distintos proporciones de datos para Train y Test, obteniendo un resultado como el siguiente
.
.
La información se guarda y se ordena en un DataFrame y se ordena por el puntaje de prueba final obtenido.
.
.
El ejemplo completo se puede ver en el clasificador para predecir la benignidad o malignidad de un tumor.
I was passing by and saw your article. I've decided to translated to those who may want to read it in Spanish as well, just adding few annotations or flags.