Saltar al contenido principal
InicioTutorialesAprendizaje automático

¿Qué es el Refuerzo?

El refuerzo mejora el rendimiento del aprendizaje automático corrigiendo secuencialmente los errores y combinando los aprendices débiles en predictores fuertes.
Actualizado 16 ago 2024  · 11 min leer

Los recientes avances en el aprendizaje automático han introducido nuevas formas de abordar problemas complejos. El refuerzo es una técnica que sigue siendo prometedora. Está cambiando la forma de enfocar el modelado de datos mediante el uso de múltiples algoritmos para mejorar el rendimiento. A medida que el concepto de boosting sigue evolucionando, han surgido nuevas variantes como el Gradient Boosting y el XGBoost, que amplían los límites de la velocidad y la precisión.

No te preocupes si te parece que hay mucho que aprender en el ámbito del modelado predictivo. Prueba nuestras trayectorias profesionales de Científico de Datos Asociado en Python o Científico de Datos en Python, así como nuestro tutorial Explora las Técnicas de Aprendizaje por Conjuntos para seguir aprendiendo. 

Potenciación en el aprendizaje automático

El refuerzo es un potente método de aprendizaje por conjuntos en el aprendizaje automático, diseñado específicamente para mejorar la precisión de los modelos predictivos mediante la combinación de varios aprendices débiles -modelos que rinden sólo ligeramente mejor que la adivinación aleatoria- en un único aprendiz fuerte. 

La esencia del boosting reside en el proceso iterativo en el que cada aprendiz débil se entrena para corregir los errores de su predecesor, mejorando gradualmente el rendimiento global del modelo. Al centrarse en los errores cometidos por modelos anteriores, el refuerzo convierte una colección de aprendices débiles en un modelo más preciso. 

Cómo funciona el refuerzo

El refuerzo transforma los aprendices débiles en un aprendiz unificado y fuerte mediante un proceso sistemático que se centra en reducir los errores en el entrenamiento secuencial del modelo. Los pasos implicados incluyen:

  1. Selecciona los pesos iniciales: Asigna pesos iniciales a todos los puntos de datos para indicar su importancia en el proceso de aprendizaje.
  2. Entrenar secuencialmente: Entrena al primer aprendiz débil con los datos. Tras evaluar su rendimiento, aumenta los pesos de las instancias mal clasificadas. Esto hace que el siguiente alumno débil se centre más en los casos más difíciles.
  3. Iterar el proceso: Repite el proceso de ajustar los pesos y entrenar a los siguientes alumnos. Cada nuevo modelo se centra en los puntos débiles del conjunto hasta ahora.
  4. Combina los resultados: Agrega las predicciones de todos los aprendices débiles para formar el resultado final. La agregación suele ser ponderada, en la que los alumnos más precisos tienen más influencia.

Este método minimiza eficazmente los errores al centrarse más intensamente en los casos difíciles de los datos de entrenamiento, lo que da lugar a un gran rendimiento predictivo.

Tipos de algoritmos de refuerzo

Veamos algunos de los algoritmos de potenciación más conocidos. 

AdaBoost (refuerzo adaptativo)

AdaBoost es uno de los primeros algoritmos de refuerzo. Se centra en reponderar los ejemplos de entrenamiento cada vez que se añade un aprendiz, poniendo más énfasis en los casos clasificados incorrectamente. AdaBoost es especialmente eficaz para los problemas de clasificación binaria. Lee nuestro tutorial sobre el Clasificador AdaBoost en Python para saber más.

Refuerzo de gradiente

El refuerzo de gradiente construye modelos secuencialmente y corrige los errores por el camino. Utiliza un algoritmo de descenso de gradiente para minimizar la pérdida al añadir nuevos modelos. Este método es flexible y puede utilizarse tanto para problemas de regresión como de clasificación. Nuestro tutorial, Guía del algoritmo de refuerzo de gradiente, describe este proceso en detalle. 

XGBoost (Refuerzo de gradiente extremo)

XGBoost es una biblioteca optimizada de refuerzo de gradiente distribuido y el método al que recurren muchos ganadores de concursos en Kaggle. Está diseñado para ser muy eficaz, flexible y portátil. Implementa algoritmos de aprendizaje automático en el marco del Gradient Boosting, ofreciendo una solución escalable y precisa a muchos problemas prácticos de datos. Para un estudio más detallado, considera revisar nuestro tutorial Uso de XGBoost en Python y seguir nuestro curso dedicado: Refuerzo de gradiente extremo con XGBoost.

Métodos de conjunto

El refuerzo pertenece al grupo más amplio de los métodos de conjunto. Los métodos de conjunto son un enfoque del aprendizaje automático que combina varios modelos para producir predicciones más precisas que las que podría lograr cualquier modelo por sí solo. Estas técnicas funcionan utilizando la diversidad de los distintos modelos, cada uno con sus propios puntos fuertes y limitaciones, para crear un proceso colectivo de toma de decisiones.

Diferentes tipos de métodos de conjunto

El refuerzo es una destacada técnica de aprendizaje por conjuntos, pero es sólo una entre varias que mejoran la fuerza predictiva de los modelos. Echemos un vistazo a algunos otros.

  • Bagging (Agregación Bootstrap): Método que entrena múltiples modelos en subconjuntos aleatorios de los datos de entrenamiento y agrega sus predicciones. Reduce la varianza y ayuda a evitar el sobreajuste.
  • Apilamiento (Generalización apilada): Técnica que combina varios modelos entrenando un metamodelo para aprender a combinar mejor las predicciones de los modelos base. Puede captar pautas complejas que los modelos individuales podrían pasar por alto.
  • Mezcla: Similar al apilamiento, pero utiliza un conjunto de validación retenido para entrenar el metamodelo en lugar de la validación cruzada. Es más sencillo y rápido que el apilamiento, pero puede ser menos robusto.
  • Votar: Combina las predicciones de varios modelos mediante votación por mayoría (votación dura) o media ponderada de las probabilidades predichas (votación suave). Es sencillo de aplicar y puede ser eficaz con diversos modelos de base.

Refuerzo vs. embolsado

El refuerzo se compara a menudo con el embolsamiento en particular. Aunque se parecen en algunos aspectos, hay grandes diferencias. A continuación se muestra una tabla comparativa entre el refuerzo y el ensacado:

Función Aumentar Embolsado
Enfoque conceptual Mejora secuencialmente la precisión centrándose en los ejemplos clasificados erróneamente con anterioridad. Entrena varios modelos en subconjuntos aleatorios, promediando sus predicciones.
Modelo de formación El entrenamiento secuencial permite que cada modelo aprenda de los errores del modelo anterior. El entrenamiento paralelo de los modelos en muestras de datos variadas aumenta la diversidad.
Reducción de errores Reduce el sesgo principalmente y la varianza en menor medida. Reduce la varianza, sobre todo en modelos complejos que tienden a sobreajustarse.
Sensibilidad a los valores atípicos Más sensible debido a una mayor atención a los datos mal clasificados. Menos sensible, ya que el muestreo aleatorio diluye el impacto de los valores atípicos.
Ejemplos AdaBoost, Gradient Boosting, XGBoost. Bosques aleatorios, agregación Bootstrap.

Si te interesa saber más sobre el ensacado, lee nuestro tutorial ¿Qué es el ensacado en el aprendizaje automático?, que utiliza sklearn. 

Una implementación del refuerzo en Python

Una de las mejores formas de entender el refuerzo es intentar demostrarlo en la práctica. Para ello, utilizaremos este conjunto de datos Kaggle de Clasificación de Tipos de Almendras, que presenta tres tipos de almendras: MAMRA, SANORA, y REGULAR, y sus atributos físicos únicos, como el área, el perímetro y la redondez. 

Las características de cada muestra de almendra se extrajeron mediante sofisticadas técnicas de procesamiento de imágenes. Los valores nulos del conjunto de datos representan casos en los que la orientación de la almendra -en posición vertical, tumbada de lado o boca arriba- afectó a la precisión del proceso de extracción de rasgos. 

Utilicemos ahora este conjunto de datos para intentar una tarea de clasificación. Utilizaremos el algoritmo AdaBoost, que, como hemos dicho, mejora el rendimiento del modelo combinando aprendices débiles en uno fuerte.

1. Importar bibliotecas

Comenzamos importando las bibliotecas necesarias y cargando el conjunto de datos almendra. A continuación, dividimos las características y las variables objetivo.

import pandas as pd
almonds = pd.read_csv('Almond.csv', index_col=0)
X = almonds.drop('Type', axis=1)  
y = almonds['Type']

2. Tratamiento de los datos que faltan

A continuación, limpiamos el conjunto de datos rellenando los valores perdidos mediante la imputación KNN. Así nos aseguramos de tener un conjunto de datos completo para nuestro modelo.

from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
X_imputed = imputer.fit_transform(X)

3. Dividir los datos para entrenamiento y prueba

Dividimos los datos en conjuntos de entrenamiento y de prueba para poder evaluar lo bien que nuestro modelo manejaría los nuevos datos.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_imputed, y, test_size=0.2, random_state=42)

4. Entrenar un clasificador de árbol de decisión

Aquí entrenamos un modelo simple de árbol de decisión, que nos da una precisión de referencia antes de pasar a aumentar su rendimiento.

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
tree = DecisionTreeClassifier(max_depth=1, random_state=42)
tree.fit(X_train, y_train)
tree_accuracy = accuracy_score(y_test, tree.predict(X_test))

5. Mejorar el rendimiento con AdaBoost

A continuación, utilizamos AdaBoost para mejorar el rendimiento de nuestro árbol de decisión centrándonos en sus errores y aumentando la precisión.

from sklearn.ensemble import AdaBoostClassifier
ada = AdaBoostClassifier(base_estimator=tree, n_estimators=100, learning_rate=1.0, random_state=42)
ada.fit(X_train, y_train)
ada_accuracy = accuracy_score(y_test, ada.predict(X_test))

# Print the accuracies
print(f'Accuracy of the weak learner (Decision Tree): {tree_accuracy * 100:.2f}%')
print(f'Accuracy of AdaBoost model: {ada_accuracy * 100:.2f}%')

6. Resultado final

Por último, comparamos los resultados y vemos cómo AdaBoost mejora significativamente la precisión.

Accuracy of the weak learner (Decision Tree): 43.14%
Accuracy of AdaBoost model: 61.50%

¿Cuál es la conclusión? Los resultados ilustran la potencia del aprendizaje conjunto mediante AdaBoost. Aquí, el aprendiz débil fue un árbol de decisión con una profundidad máxima de sólo uno, que tuvo una modesta precisión de alrededor del 43%. Dado que sólo había tres tipos de almendras, una precisión del 43% no es mucho mayor que la media de adivinación. Sin embargo, cuando este aprendiz débil se utilizó como estimador base en un modelo AdaBoost con 100 iteraciones, la precisión mejoró hasta el 62%.

Para dar un paso atrás, como nota de precaución, aunque AdaBoost registró una mayor precisión en nuestro conjunto de datos Almonds, puede que no siempre sea el más adecuado para cada situación. Existe el riesgo de sobreajuste, especialmente con conjuntos de datos pequeños como éste, en los que el modelo puede volverse excesivamente complejo. En realidad, técnicas de clasificación más sencillas podrían funcionar igual de bien o incluso mejor para determinadas tareas. Así que, aunque aquí hemos utilizado AdaBoost para ilustrar el concepto, es importante dar un paso atrás y considerar si realmente queremos un alto nivel de complejidad.

Conclusión

El refuerzo representa un avance significativo en el campo del aprendizaje automático, ya que demuestra el poder de los métodos de conjunto para mejorar la precisión predictiva. Como hemos explorado, los algoritmos de refuerzo como AdaBoost, Gradient Boosting y XGBoost funcionan según un principio fundamental: combinar múltiples modelos débiles para crear un único predictor más eficaz. 

Sin embargo, es importante recordar que el refuerzo es sólo una herramienta del conjunto de herramientas del aprendizaje automático. Su eficacia puede variar en función del problema concreto. Como ocurre con cualquier técnica de aprendizaje automático, comprender cuándo y cómo aplicar el boosting es clave para aprovechar todo su potencial.

Para profundizar en tu comprensión del boosting y otros conceptos del aprendizaje automático, considera la posibilidad de explorar el completo itinerario profesional Aprendizaje automático para todos de DataCamp. Para quienes deseen especializarse más, la carrera de Científico de Aprendizaje Automático con Python ofrece formación en profundidad sobre técnicas avanzadas y aplicaciones prácticas.

Preguntas frecuentes

¿Qué es el refuerzo en el aprendizaje automático?

El refuerzo es una técnica de aprendizaje por conjuntos que se utiliza para mejorar la precisión de los modelos predictivos. Combina varios aprendices débiles -modelos que rinden sólo ligeramente mejor que la adivinación aleatoria- en un único aprendiz fuerte, lo que mejora significativamente el rendimiento general del modelo.

¿En qué se diferencia el refuerzo del embolsamiento?

Tanto el boosting como el bagging son técnicas de conjunto que combinan varios modelos para mejorar las predicciones, pero funcionan de forma diferente. El refuerzo entrena modelos secuencialmente, cada nuevo modelo se centra en los errores de los anteriores para reducir el sesgo y mejorar la precisión. En cambio, el ensacado entrena modelos en paralelo en diferentes subconjuntos de datos, promediando sus resultados para reducir la varianza y mejorar la estabilidad. Mientras que el boosting es sensible a los valores atípicos y al ruido, el bagging es más robusto frente a ellos gracias a su método de promediación.

¿Puede utilizarse el boosting tanto para problemas de clasificación como de regresión?

Sí, las técnicas de refuerzo pueden adaptarse tanto para la clasificación como para la regresión. Aunque AdaBoost se utiliza más comúnmente para problemas de clasificación, otras variantes como el Gradient Boosting también pueden utilizarse eficazmente para la regresión.

¿Cómo eliges el número de iteraciones de refuerzo?

El número de iteraciones, o el número de aprendices débiles, en un algoritmo de refuerzo suele depender del conjunto de datos específico y de la complejidad del problema. Puede determinarse utilizando la validación cruzada o técnicas similares para equilibrar entre el infraajuste y el sobreajuste.

¿En qué se diferencia AdaBoost de otras técnicas de boosting, como el Gradient Boosting?

AdaBoost mejora los pesos de las instancias mal clasificadas para centrar los modelos posteriores en estos casos difíciles. En cambio, Gradient Boost ajusta los nuevos aprendices a los errores residuales de los modelos anteriores.

¿Cuáles son las principales ventajas de utilizar AdaBoost?

Las principales ventajas de AdaBoost son su sencillez, su eficacia y el hecho de que no requiere conocimientos previos sobre el aprendiz débil. También es muy flexible, ya que se puede combinar con cualquier algoritmo de aprendizaje, y suele tener mucho éxito en clasificaciones en las que otros métodos podrían tener dificultades.

¿Cuáles son algunas alternativas notables a AdaBoost para aumentar el rendimiento en los modelos de aprendizaje automático?

Algunas alternativas notables a AdaBoost son Gradient Boosting, XGBoost, CatBoost, LightGBM e HistGradientBoost.

¿Cuáles son algunos tipos de métodos de aprendizaje conjunto distintos del boosting?

Las formas habituales de aprendizaje conjunto, aparte del boosting, incluyen el bagging y el stacking, cada uno de los cuales emplea diferentes estrategias para integrar modelos con el fin de maximizar el poder predictivo.

Temas

Aprende Aprendizaje Automático con DataCamp

Course

Understanding Machine Learning

2 hr
203.3K
An introduction to machine learning with no coding involved.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

tutorial

Introducción al Q-Learning: Tutorial para principiantes

Conozca el algoritmo de aprendizaje por refuerzo sin modelos más popular con un tutorial de Python.
Abid Ali Awan's photo

Abid Ali Awan

16 min

tutorial

Aprendizaje automático de datos categóricos con el tutorial de Python

Aprenda los trucos más comunes para manejar datos categóricos y preprocesarlos para construir modelos de aprendizaje automático.
Moez Ali's photo

Moez Ali

28 min

tutorial

Introducción al aprendizaje automático estadístico

Descubra la potente fusión de estadística y aprendizaje automático. Explore cómo las técnicas estadísticas sustentan los modelos de aprendizaje automático, permitiendo la toma de decisiones basada en datos.
Joanne Xiong's photo

Joanne Xiong

11 min

tutorial

Guía completa para el aumento de datos

Aprende sobre técnicas, aplicaciones y herramientas de aumento de datos con un tutorial de TensorFlow y Keras.
Abid Ali Awan's photo

Abid Ali Awan

15 min

tutorial

Tutorial de ecuación normal para regresión lineal

Aprende qué es la ecuación normal y cómo puedes utilizarla para construir modelos de machine learning.
Kurtis Pykes 's photo

Kurtis Pykes

8 min

tutorial

Tutorial de DeepChecks: Automatizar las pruebas de aprendizaje automático

Aprende a realizar la validación de datos y modelos para garantizar un sólido rendimiento del aprendizaje automático utilizando nuestra guía paso a paso para automatizar las pruebas con DeepChecks.
Abid Ali Awan's photo

Abid Ali Awan

12 min

See MoreSee More