A diferencia de los bosques aleatorios, los árboles con boosting del gradiente pueden sobreajustarse. Por lo tanto, al igual que con las redes neuronales, puedes aplicar la regularización y la detención anticipada con un conjunto de datos de validación.
Por ejemplo, en las siguientes figuras, se muestran las curvas de pérdida y precisión de los conjuntos de entrenamiento y validación cuando se entrena un modelo de GBT. Observa lo divergentes que son las curvas, lo que sugiere un alto grado de sobreajuste.
Figura 29. Pérdida en comparación con la cantidad de árboles de decisión.
Figura 30. Exactitud en comparación con la cantidad de árboles de decisión.
Entre los parámetros de regularización comunes para los árboles potenciados por gradientes, se incluyen los siguientes:
- Es la profundidad máxima del árbol.
- Es la tasa de contracción.
- Es la proporción de atributos probados en cada nodo.
- Coeficientes L1 y L2 en la pérdida.
Ten en cuenta que los árboles de decisión suelen crecer mucho menos que los modelos de bosque aleatorio. De forma predeterminada, los árboles mejorados con gradientes en TF-DF crecen hasta la profundidad 6. Debido a que los árboles son poco profundos, la cantidad mínima de ejemplos por hoja tiene un impacto mínimo y, por lo general, no se ajusta.
La necesidad de un conjunto de datos de validación es un problema cuando la cantidad de ejemplos de entrenamiento es pequeña. Por lo tanto, es común entrenar árboles con aumento de gradiente dentro de un bucle de validación cruzada o inhabilitar la detención anticipada cuando se sabe que el modelo no se sobreajusta.
Ejemplo de uso
En el capítulo anterior, entrenamos un bosque aleatorio en un conjunto de datos pequeño. En este ejemplo, simplemente reemplazaremos el modelo de bosque aleatorio por un modelo de árboles con boosting del gradiente:
model = tfdf.keras.GradientBoostedTreesModel()
# Part of the training dataset will be used as validation (and removed
# from training).
model.fit(tf_train_dataset)
# The user provides the validation dataset.
model.fit(tf_train_dataset, validation_data=tf_valid_dataset)
# Disable early stopping and the validation dataset. All the examples are
# used for training.
model.fit(
tf_train_dataset,
validation_ratio=0.0,
early_stopping="NONE")
# Note: When "validation_ratio=0", early stopping is automatically disabled,
# so early_stopping="NONE" is redundant here.
Uso y limitaciones
Los árboles con aumento de gradiente tienen algunas ventajas y desventajas.
Ventajas
- Al igual que los árboles de decisión, admiten de forma nativa las funciones numéricas y categóricas, y, a menudo, no necesitan el procesamiento previo de las funciones.
- Los árboles con gradiente mejorado tienen hiperparámetros predeterminados que a menudo proporcionan excelentes resultados. Sin embargo, ajustar esos hiperparámetros puede mejorar significativamente el modelo.
- Los modelos de árbol con aumento de gradiente suelen ser pequeños (en cantidad de nodos y en memoria) y rápidos de ejecutar (a menudo, solo uno o unos pocos µs por ejemplo).
Desventajas
- Los árboles de decisión deben entrenarse de forma secuencial, lo que puede ralentizar el entrenamiento de manera considerable. Sin embargo, la ralentización del entrenamiento se compensa un poco porque los árboles de decisión son más pequeños.
- Al igual que los bosques aleatorios, los árboles con aumento de gradiente no pueden aprender ni reutilizar representaciones internas. Cada árbol de decisión (y cada rama de cada árbol de decisión) debe volver a aprender el patrón del conjunto de datos. En algunos conjuntos de datos, en particular, los conjuntos de datos con datos no estructurados (por ejemplo, imágenes o texto), esto hace que los árboles con aumento de gradiente muestren resultados más pobres que otros métodos.