Poda del árbol de decisiones: resolución del sobreajuste del modelo [árbol de decisión, aprendizaje automático]

Cómo solucionar el problema del sobreajuste de los árboles de decisión mediante la poda

Los árboles de decisión son un poderoso algoritmo de aprendizaje automático que se utiliza para resolver 分类problemas 回归. El modelo de árbol de decisión hace predicciones a través de reglas de decisión estructuradas en árbol, pero al construir un árbol de decisión, a menudo ocurre el problema de sobreajuste, es decir, el modelo funciona bien con datos de entrenamiento, pero tiene un rendimiento deficiente con datos invisibles.

La amenaza del sobreajuste

En el aprendizaje automático, 过拟合es un problema común que se refiere a un modelo que funciona bien con datos de entrenamiento, pero tiene un rendimiento deficiente al generalizar a datos no vistos. Esto se debe a que los árboles de decisión tienden a esforzarse por ajustar cada muestra de entrenamiento con la mayor precisión posible, lo que da como resultado un árbol que es demasiado complejo y captura el ruido y la variación aleatoria en el conjunto de entrenamiento en lugar de solo los patrones de datos reales.

Poda del árbol de decisiones: rescatar el sobreajuste del modelo

La poda de árboles de decisión es una técnica que reduce la complejidad de los árboles de decisión y ayuda a evitar el sobreajuste de los datos de entrenamiento. El objetivo de la poda es eliminar algunas ramas del árbol de decisión (o reglas de decisión) para reducir la profundidad y complejidad del árbol, mejorando así la capacidad de generalización del modelo. En resumen, la poda logra una aplicabilidad más amplia del modelo al reducir el sobreajuste a situaciones específicas en los datos de entrenamiento.

1. Poda frontal

La poda preliminar toma medidas antes de dividir los nodos durante el proceso de construcción del árbol de decisión para evitar que el árbol se vuelva demasiado complejo. Los métodos de poda previa incluyen establecer la profundidad máxima, la cantidad mínima de nodos de hojas o la cantidad mínima de muestras necesarias para dividir un nodo. A través de estas restricciones condicionales, podemos evitar ramas innecesarias durante el crecimiento del árbol, reduciendo así el riesgo de sobreajuste.

Ejemplo: en un conjunto de datos para un sitio web de citas, utilizamos un árbol de decisión para predecir si un usuario iniciará una segunda cita. La poda directa puede limitar la profundidad del árbol de decisión y garantizar que no se generen demasiadas ramas para subconjuntos de datos demasiado pequeños, mejorando así la capacidad de generalización del modelo.

from sklearn.tree import DecisionTreeClassifier

# 创建一个决策树分类器,并设置最大深度为5
tree_classifier = DecisionTreeClassifier(max_depth=5)

# 训练模型
tree_classifier.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = tree_classifier.predict(X_test)

2. Postpoda

La pospoda sirve para reducir la complejidad del árbol eliminando ramas innecesarias después de construir el árbol de decisión completo. El método posterior a la poda primero construye un árbol de decisión completamente desarrollado y luego selecciona la rama apropiada para podar calculando la impureza de la rama (como la impureza de Gini o la entropía) y comparando el rendimiento de diferentes esquemas de poda. Aunque este método requiere más cálculos, a menudo logra resultados de poda más precisos.

Ejemplo: en el diagnóstico médico, utilizamos árboles de decisión para predecir si un paciente tiene una enfermedad específica. La pospoda puede ayudarnos a eliminar aquellas ramas que no aportan significativamente al diagnóstico final, haciendo que el modelo sea más fácil de entender e interpretar.

from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import _tree

def prune_index(inner_tree, index, threshold):
    if inner_tree.value[index].min() < threshold:
        # 将子树叶子节点设置为空
        inner_tree.children_left[index] = _tree.TREE_LEAF
        inner_tree.children_right[index] = _tree.TREE_LEAF

# 创建一个决策树分类器,并训练完整树
tree_classifier = DecisionTreeClassifier()
tree_classifier.fit(X_train, y_train)

# 设置剪枝的阈值
prune_threshold = 0.01

# 后剪枝
prune_index(tree_classifier.tree_, 0, prune_threshold)

# 在测试集上进行预测
y_pred = tree_classifier.predict(X_test)

Diferencias y resumen

Tanto la poda previa como la pospoda se pueden utilizar para resolver el problema de sobreajuste de los árboles de decisión, pero tienen algunas diferencias en la implementación:

  • La poda previa es una medida que se toma durante la construcción de un árbol de decisión, que puede evitar ramas innecesarias durante el crecimiento del árbol, limitando así la complejidad.

  • La pospoda se realiza después de construir el árbol de decisión completo para reducir la complejidad del árbol eliminando ramas innecesarias. Generalmente es necesario calcular las impurezas y comparar el rendimiento de diferentes esquemas de poda.

Supongo que te gusta

Origin blog.csdn.net/qq_22841387/article/details/133431866
Recomendado
Clasificación