Saltar al contenido

Cómo desarrollar conjuntos forestales aleatorios con XGBoost

27 de noviembre de 2020

El Biblioteca XGBoost proporciona una eficiente implementación de refuerzo de gradientes que puede ser configurado para entrenar conjuntos forestales aleatorios.

Bosque al azar es un algoritmo más simple que el aumento de gradiente. La biblioteca XGBoost permite entrenar los modelos de forma que se reproduzcan y aprovechen las eficiencias de cálculo implementadas en la biblioteca para entrenar modelos forestales aleatorios.

En este tutorial, descubrirás cómo utilizar la biblioteca XGBoost para desarrollar conjuntos forestales aleatorios.

Después de completar este tutorial, lo sabrás:

  • XGBoost proporciona una eficiente implementación de refuerzo de gradientes que puede ser configurado para entrenar conjuntos forestales aleatorios.
  • Cómo utilizar el API de XGBoost para entrenar y evaluar modelos de conjuntos forestales aleatorios para la clasificación y la regresión.
  • Cómo afinar los hiperparámetros del modelo de conjunto forestal aleatorio XGBoost.

Empecemos.

Cómo desarrollar conjuntos forestales aleatorios con XGBoost

Cómo desarrollar conjuntos forestales aleatorios con XGBoost
Foto de Jan Mosimann, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en cinco partes; son:

  1. Bosque aleatorio con XGBoost
  2. XGBoost API para Random Forest
  3. XGBoost Bosque aleatorio para la clasificación
  4. XGBoost Bosque aleatorio para la regresión
  5. XGBoost Hiperparámetros forestales aleatorios

Bosque aleatorio con XGBoost

XGBoost es una biblioteca de código abierto que proporciona una implementación eficiente del algoritmo de conjunto de aumento de gradiente, conocido como Extreme Gradient Boosting o XGBoost para abreviar.

Como tal, XGBoost se refiere al proyecto, la biblioteca y el propio algoritmo.

El aumento de gradiente es un algoritmo de primera elección para la clasificación y la regresión de los proyectos de modelado predictivo porque a menudo logra el mejor rendimiento. El problema con el aumento de gradiente es que a menudo es muy lento para entrenar un modelo, y el problema se exaspera por los grandes conjuntos de datos.

XGBoost aborda los problemas de velocidad del aumento de gradiente introduciendo una serie de técnicas que aceleran drásticamente el entrenamiento del modelo y a menudo dan como resultado un mejor rendimiento general del modelo.

Puedes aprender más sobre XGBoost en este tutorial:

Además de soportar el aumento de gradientes, el algoritmo central XGBoost también puede ser configurado para soportar otros tipos de algoritmos de conjunto de árboles, como el de bosque aleatorio.

El bosque aleatorio es un conjunto de algoritmos de árboles de decisión.

Cada árbol de decisión se ajusta a una muestra de la base de datos de entrenamiento. Se trata de una muestra del conjunto de datos de capacitación en la que se puede seleccionar más de una vez un determinado ejemplo (filas), lo que se denomina muestreo con sustitución.

Es importante considerar un subconjunto aleatorio de las variables de entrada (columnas) en cada punto de división del árbol. Esto asegura que cada árbol añadido al conjunto sea hábil, pero diferente de forma aleatoria. El número de características consideradas en cada punto de división es a menudo un pequeño subconjunto. Por ejemplo, en los problemas de clasificación, una heurística común consiste en seleccionar el número de rasgos igual a la raíz cuadrada del número total de rasgos, por ejemplo, 4 si un conjunto de datos tiene 20 variables de entrada.

Puedes aprender más sobre el algoritmo de conjunto de bosque aleatorio en el tutorial:

El principal beneficio de usar la biblioteca XGBoost para entrenar a conjuntos forestales aleatorios es la velocidad. Se espera que su uso sea significativamente más rápido que el de otras implementaciones, como la implementación nativa de aprendizaje científico.

Ahora que sabemos que XGBoost ofrece soporte para el conjunto de bosque aleatorio, veamos el API específico.

XGBoost API para Random Forest

El primer paso es instalar la biblioteca XGBoost.

Recomiendo usar el administrador de paquetes pip usando el siguiente comando desde la línea de comandos:

Una vez instalado, podemos cargar la biblioteca e imprimir la versión en un script Python para confirmar que se instaló correctamente.

Ejecutando el guión se cargará la biblioteca XGBoost e imprimirá el número de versión de la biblioteca.

Su número de versión debería ser el mismo o más alto.

La biblioteca XGBoost proporciona dos clases de envoltorio que permiten que la implementación de bosque aleatorio proporcionada por la biblioteca se utilice con la biblioteca de aprendizaje de la máquina de ciencias.

Son las clases XGBRFClassifier y XGBRFRegressor para la clasificación y la regresión respectivamente.

El número de árboles utilizados en el conjunto se puede establecer a través de la «n_estimadores«y, típicamente, esto se incrementa hasta que el modelo no observa ninguna mejora en el rendimiento. A menudo se utilizan cientos o miles de árboles.

XGBoost no tiene soporte para dibujar una muestra de bootstrap para cada árbol de decisión. Esto es una limitación de la biblioteca.

En cambio, una submuestra del conjunto de datos de entrenamiento, sin reemplazo, puede ser especificada a través de la «submuestra» como un porcentaje entre 0.0 y 1.0 (100 por ciento de las filas en el conjunto de datos de entrenamiento). Se recomiendan valores de 0,8 ó 0,9 para asegurar que el conjunto de datos sea lo suficientemente grande para entrenar a un modelo hábil pero lo suficientemente diferente para introducir cierta diversidad en el conjunto.

El número de características utilizadas en cada punto de división cuando se entrena un modelo puede especificarse mediante el «colsample_bynode«y toma un porcentaje del número de columnas del conjunto de datos de 0,0 a 1,0 (100 por ciento de las filas de entrada en el conjunto de datos de entrenamiento).

Si tuviéramos 20 variables de entrada en nuestro conjunto de datos de entrenamiento y la heurística para los problemas de clasificación es la raíz cuadrada del número de características, entonces esto podría establecerse en sqrt(20) / 20, o alrededor de 4 / 20 o 0,2.

Puedes aprender más acerca de cómo configurar la biblioteca XGBoost para conjuntos forestales aleatorios aquí:

Ahora que estamos familiarizados con el uso del API de XGBoost para definir conjuntos forestales aleatorios, veamos algunos ejemplos trabajados.

XGBoost Bosque aleatorio para la clasificación

En esta sección, veremos el desarrollo de un conjunto de bosque aleatorio XGBoost para un problema de clasificación.

Recomendado:  ¿Qué es el machine learning? Ejemplos prácticos

Primero, podemos usar la función make_classification() para crear un problema de clasificación binaria sintética con 1.000 ejemplos y 20 características de entrada.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo se crea el conjunto de datos y se resume la forma de los componentes de entrada y salida.

A continuación, podemos evaluar un algoritmo de bosque aleatorio XGBoost en este conjunto de datos.

Evaluaremos el modelo utilizando la validación cruzada estratificada k-pliegue, con tres repeticiones y 10 pliegues. Informaremos la media y la desviación estándar de la precisión del modelo en todas las repeticiones y pliegues.

La ejecución del ejemplo informa de la precisión de la media y la desviación estándar del modelo.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que el conjunto de bosque aleatorio XGBoost logró una precisión de clasificación de alrededor del 89,1 por ciento.

También podemos usar el modelo de bosque aleatorio XGBoost como modelo final y hacer predicciones para la clasificación.

Primero, el conjunto de bosque aleatorio XGBoost se ajusta a todos los datos disponibles, luego el predecir() se puede llamar a la función para hacer predicciones sobre nuevos datos.

El siguiente ejemplo lo demuestra en nuestro conjunto de datos de clasificación binaria.

La ejecución del ejemplo se ajusta al modelo de conjunto de bosque aleatorio XGBoost en todo el conjunto de datos y luego se utiliza para hacer una predicción en una nueva fila de datos, como podríamos hacer al utilizar el modelo en una aplicación.

Ahora que estamos familiarizados con el uso del bosque aleatorio para la clasificación, veamos el API para la regresión.

XGBoost Bosque aleatorio para la regresión

En esta sección, veremos el desarrollo de un conjunto de bosque aleatorio XGBoost para un problema de regresión.

Primero, podemos usar la función make_regression() para crear un problema de regresión sintética con 1.000 ejemplos y 20 características de entrada.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo se crea el conjunto de datos y se resume la forma de los componentes de entrada y salida.

A continuación, podemos evaluar un conjunto de bosque aleatorio XGBoost en este conjunto de datos.

Como hicimos con la última sección, evaluaremos el modelo usando la validación cruzada repetida k-pliegue, con tres repeticiones y 10 pliegues.

Informaremos del error medio absoluto (MAE) del modelo en todas las repeticiones y pliegues. La biblioteca de aprendizaje de ciencias hace que el MAE sea negativo, de modo que se maximiza en lugar de minimizarse. Esto significa que los MAE negativos más grandes son mejores y un modelo perfecto tiene un MAE de 0.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo se informa de la media y la desviación estándar MAE del modelo.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que el conjunto de bosque aleatorio con hiperparámetros por defecto alcanza un MAE de alrededor de 108.

También podemos usar el conjunto de bosque aleatorio XGBoost como modelo final y hacer predicciones para la regresión.

Primero, el conjunto de bosque aleatorio se ajusta a todos los datos disponibles, luego se puede llamar a la función predict() para hacer predicciones sobre nuevos datos.

El siguiente ejemplo lo demuestra en nuestro conjunto de datos de regresión.

La ejecución del ejemplo se ajusta al modelo de conjunto de bosque aleatorio XGBoost en todo el conjunto de datos y luego se utiliza para hacer una predicción en una nueva fila de datos, como podríamos hacer al utilizar el modelo en una aplicación.

Ahora que estamos familiarizados con el desarrollo y evaluación de los conjuntos forestales aleatorios XGBoost, veamos cómo configurar el modelo.

XGBoost Hiperparámetros forestales aleatorios

En esta sección, examinaremos más de cerca algunos de los hiperparámetros que debería considerar para la sintonía del conjunto de bosque aleatorio y su efecto en el rendimiento del modelo.

Explorar el número de árboles

El número de árboles es otro hiperparámetro clave a configurar para el bosque aleatorio XGBoost.

Típicamente, el número de árboles se incrementa hasta que el rendimiento del modelo se estabiliza. La intuición podría sugerir que un mayor número de árboles llevaría a una sobrecarga, aunque no es así. Tanto el algoritmo de embolsado como el de bosque aleatorio parecen ser algo inmunes a la sobrecarga del conjunto de datos de entrenamiento dada la naturaleza estocástica del algoritmo de aprendizaje.

El número de árboles se puede establecer a través de la «n_estimadores«y por defecto a 100.

El siguiente ejemplo explora el efecto del número de árboles con valores entre 10 y 1.000.

Recomendado:  Aprendizaje de máquinas multinúcleo en Python con Scikit-Learn

Ejecutando el ejemplo primero se informa de la precisión media para cada número configurado de árboles.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que el rendimiento aumenta y se mantiene plano después de unos 500 árboles. Las puntuaciones medias de precisión fluctúan entre 500, 1.000 y 5.000 árboles y esto puede ser un ruido estadístico.

Se crea un gráfico de caja y bigote para la distribución de las puntuaciones de precisión para cada número configurado de árboles.

Recuadros del tamaño del conjunto de bosque aleatorio XGBoost vs. Precisión de la clasificación

Recuadros del tamaño del conjunto de bosque aleatorio XGBoost vs. Precisión de la clasificación

Explorar el número de características

El número de características que se muestrean al azar para cada punto de división es quizás la característica más importante a configurar para el bosque aleatorio.

Se establece a través de la «colsample_bynode«que toma un porcentaje del número de características de entrada de 0 a 1.

En el ejemplo que figura a continuación se explora el efecto del número de características seleccionadas al azar en cada punto de separación sobre la precisión del modelo. Probaremos valores de 0,0 a 1,0 con un incremento de 0,1, aunque esperaríamos que valores por debajo de 0,2 o 0,3 resultaran en un buen o mejor rendimiento dado que esto se traduce en aproximadamente la raíz cuadrada del número de características de entrada, que es una heurística común.

Ejecutando el ejemplo primero reporta la precisión media para cada tamaño de conjunto de características.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver una tendencia general de disminución del rendimiento medio de los modelos a medida que los miembros del conjunto utilizan más características de entrada.

Los resultados sugieren que el valor recomendado de 0,2 sería una buena elección en este caso.

Se crea un gráfico de caja y bigote para la distribución de las puntuaciones de precisión para cada tamaño de conjunto de características.

Podemos ver una tendencia en el rendimiento que disminuye con el número de características consideradas por los árboles de decisión.

Recuadro de XGBoost Random Forest Feature Size vs. Classification Accuracy

Recuadro de XGBoost Random Forest Feature Size vs. Classification Accuracy

Más lecturas

Esta sección proporciona más recursos sobre el tema si desea profundizar en él.

Tutoriales

APIs

Resumen

En este tutorial, descubriste cómo usar la biblioteca XGBoost para desarrollar conjuntos forestales aleatorios.

Específicamente, aprendiste:

  • XGBoost proporciona una eficiente implementación de refuerzo de gradientes que puede ser configurado para entrenar conjuntos forestales aleatorios.
  • Cómo utilizar el API de XGBoost para entrenar y evaluar modelos de conjuntos forestales aleatorios para la clasificación y la regresión.
  • Cómo afinar los hiperparámetros del modelo de conjunto forestal aleatorio XGBoost.

¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.