4Geeks logo
4Geeks logo
About us

Learning library

For all the self-taught geeks out there, here our content library with most of the learning materials we have produces throughout the years.

It makes sense to start learning by reading and watching videos about fundamentals and how things work.

Full-Stack Software Developer

Data Science and Machine Learning - 16 wks

Search from all Lessons

Social & live learning

The most efficient way to learn: Join a cohort with classmates just like you, live streams, impromptu coding sessions, live tutorials with real experts, and stay motivated.

← Back to Lessons

Continue learning for free about:

Edit on Github

Boosting Algorithms

Boosting de Algoritmos

Boosting de Algoritmos

Ya mencionamos el significado del aprendizaje conjunto, que en general es un modelo que hace predicciones basadas en varios modelos diferentes. En la última lección hablamos sobre el embolsado, una técnica que entrena un grupo de modelos individuales de manera paralela con subconjuntos aleatorios de datos. En esta lección aprenderemos la técnica de Boosting.

¿Qué significa Boosting?

Entrenamiento de un grupo de modelos individuales de forma secuencial. Cada modelo individual aprende de los errores cometidos por el modelo anterior.

Boosting de Gradiente

Gradient Boosting (Boosting de Gradiente) aprende del error o error residual directamente, en lugar de actualizar los pesos de los puntos de datos.

Pasos de un algoritmo de boosting de gradiente:

  • Paso 1: entrenar un árbol de decisión.

  • Paso 2: Aplicar el árbol de decisión recién entrenado para predecir.

  • Paso 3: Calcular el residuo de este árbol de decisión, guarde los errores residuales como la nueva y.

  • Paso 4: Repitir el paso 1 (hasta alcanzar la cantidad de árboles que configuramos para entrenar).

  • Paso 5: Haz la predicción final.

¿En qué se diferencian las máquinas de boosting de gradiente de los algoritmos de árboles de decisión tradicionales?

El boosting de gradiente implica el uso de múltiples predictores débiles (árboles de decisión) para crear un predictor fuerte. Específicamente, incluye una función de pérdida que calcula el gradiente del error con respecto a cada característica y luego crea iterativamente nuevos árboles de decisión que minimizan el error actual. Se agregan más y más árboles al modelo actual para continuar corrigiendo errores hasta que las mejoras caen por debajo de un umbral mínimo o se ha creado un número predeterminado de árboles.

¿Qué hiperparámetros se pueden ajustar en el boosting de gradiente además de los hiperparámetros de cada árbol individual?

Los principales hiperparámetros que se pueden ajustar con los modelos GBM son:

  • Función de pérdida: función de pérdida para calcular el gradiente de error

  • Tasa de aprendizaje: la tasa a la que los árboles nuevos corrigen/modifican el predictor existente

  • Estimadores numéricos - el número total de árboles a producir para el predictor final

Hiperparámetros adicionales específicos de la función de pérdida

Algunas implementaciones específicas, por ejemplo, el boosting de gradiente estocástico, pueden tener hiperparámetros adicionales, como el tamaño de la submuestra (el tamaño de la submuestra afecta la aleatorización en las variaciones estocásticas).

Documentación de Scikit learn sobre Boosting de Gradiente para clasificación: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html

Documentación de Scikit learn sobre Boosting de Gradiente para regresión: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingRegressor.html

¿Cómo podemos reducir el sobreajuste al aumentar el gradiente?

Reducir la tasa de aprendizaje o reducir el número máximo de estimadores son las dos formas más fáciles de lidiar con modelos de boosting de gradiente que sobreajustan los datos.

Con el boosting de gradiente estocástico, la reducción del tamaño de la submuestra es una forma adicional de combatir el sobreajuste.

Los algoritmos de boosting tienden a ser vulnerables al sobreajuste, por lo que es importante saber cómo reducir el sobreajuste.

Implementación en Scikit Learn

Imaginemos que ya tenemos nuestros datos divididos en conjuntos de datos de entrenamiento y prueba:

1 2# Cargar bibliotecas 3 4from sklearn.metrics import accuracy_score 5from sklearn.model_selection import train_test_split 6from sklearn.tree import DecisionTreeClassifier 7from sklearn.ensemble import RandomForestClassifier,GradientBoostingClassifier 8 9# Ajustar un modelo de árbol de decisión como comparación 10 11clf = DecisionTreeClassifier() 12clf.fit(X_train, y_train) 13y_pred = clf.predict(X_test) 14accuracy_score(y_test, y_pred) 15 16OUTPUT: 0.756 17 18# Ajustar un modelo de Random Forest 19 20clf = RandomForestClassifier(n_estimators=100, max_features="auto",random_state=0) 21clf.fit(X_train, y_train) 22y_pred = clf.predict(X_test) 23accuracy_score(y_test, y_pred) 24 25OUTPUT: 0.797 26 27# Paso 6: ajustar un modelo de boosting de gradiente 28 29clf = GradientBoostingClassifier(n_estimators=100) 30clf.fit(X_train, y_train) 31y_pred = clf.predict(X_test) 32accuracy_score(y_test, y_pred) 33 34OUTPUT:0.834

n_estimators representa cuántos árboles queremos que crezcan.

¿Qué es XGBoost?

XGBoost es un algoritmo de Machine Learning basado en un árbol de decisión que utiliza un marco de refuerzo de gradiente.

Piensa en XGBoost como un boosting de gradiente con "esteroides", también se le llama "boosting de gradiente extremo". Una combinación perfecta de técnicas de optimización de software y hardware para obtener resultados superiores utilizando menos recursos informáticos en el menor tiempo posible.

¿Por qué funciona tan bien?

Miremos la siguiente imagen para entender las razones por las que funciona tan bien.

xgboost

(Imagen de haciadatascience.com)

Ahora, veamos la siguiente comparación. El modelo XGBoost tiene la mejor combinación de rendimiento de predicción y tiempo de procesamiento en comparación con otros algoritmos.

xgboost_performance

(Imagen de haciadatascience.com)

Establecer los hiperparámetros óptimos de cualquier modelo de Machine Learning puede ser un desafío. Entonces, ¿por qué no dejar que Scikit Learn lo haga por ti?

Para que XGBoost pueda manejar nuestros datos, necesitaremos transformarlos a un formato específico llamado DMatrix. Veamos un ejemplo de cómo definir un modelo XGBoost:

1from sklearn.model_selection import train_test_split 2 3X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2) 4 5D_train = xgb.DMatrix(X_train, label=Y_train) 6D_test = xgb.DMatrix(X_test, label=Y_test) 7 8param = { 9 'eta': 0.3, 10 'max_depth': 3, 11 'objective': 'multi:softprob', 12 'num_class': 3} 13 14steps = 20 # El número de iteraciones de entrenamiento. 15 16model = xgb.train(param, D_train, steps) 17

¿Cómo combinaríamos la búsqueda en cuadrícula de Scikit Learn con un clasificador XGBoost?

Solo haz eso en un gran conjunto de datos si tienes tiempo para matar: ¡hacer una búsqueda en cuadrícula es esencialmente entrenar un conjunto de árboles de decisión muchas veces!

1 2from sklearn.model_selection import GridSearchCV 3 4clf = xgb.XGBClassifier() 5parameters = { 6 "eta" : [0.05, 0.10, 0.15, 0.20, 0.25, 0.30 ] , 7 "max_depth" : [ 3, 4, 5, 6, 8, 10, 12, 15], 8 "min_child_weight" : [ 1, 3, 5, 7 ], 9 "gamma" : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ], 10 "colsample_bytree" : [ 0.3, 0.4, 0.5 , 0.7 ] 11 } 12 13grid = GridSearchCV(clf, 14 parameters, n_jobs=4, 15 scoring="neg_log_loss", 16 cv=3) 17 18grid.fit(X_train, Y_train) 19

La lista completa de posibles parámetros está disponible en el sitio web oficial de XGBoost: https://xgboost.readthedocs.io/en/latest/parameter.html

El aprendizaje de conjunto es muy poderoso y puede usarse no solo para la clasificación sino también para la regresión. Aunque generalmente funcionan principalmente en métodos de árbol, también se pueden aplicar en modelos lineales y svm dentro de los conjuntos de embolsado o refuerzo, para lograr un mejor rendimiento. Pero recuerda, elegir el algoritmo correcto no es suficiente. También debemos elegir la configuración correcta del algoritmo para un conjunto de datos ajustando los hiperparámetros.

Fuente:

https://towardsdatascience.com/basic-ensemble-learning-random-forest-adaboost-gradient-boosting-step-by-step-explained-95d49d1e2725

https://medium.com/@aravanshad/gradient-boosting-versus-random-forest-cfa3fa8f0d80

https://towardsdatascience.com/https-medium-com-vishalmorde-xgboost-algorithm-long-she-may-rein-edd9f99be63d

https://xgboost.readthedocs.io/en/latest/parameter.html

https://towardsdatascience.com/a-beginners-guide-to-xgboost-87f5d4c30ed7

https://towardsdatascience.com/fine-tuning-xgboost-in-python-like-a-boss-b4543ed8b1e