- Una estructura que divide repetidamente el espacio de características para clasificar datos, eligiendo en cada paso la partición con mayor ganancia de información
- Usa la entropía (Entropy) para medir la pureza (purity) de los datos y, con base en ello, calcula la ganancia de información (Information Gain)
- El algoritmo ID3 encuentra el punto de partición óptimo calculando la diferencia de entropía entre el nodo padre y los nodos hijos, y expande el árbol de forma recursiva
- También puede usarse la impureza de Gini (Gini impurity) en lugar de la entropía; ambos métodos suelen dar resultados similares, aunque difieren en eficiencia de cálculo
- Una partición excesiva provoca sobreajuste (overfitting) e inestabilidad, por lo que se mitiga con poda (pruning) o con Random Forest
Conceptos básicos de los árboles de decisión
- Los árboles de decisión dividen los datos de arriba hacia abajo y, en cada paso, aplican reglas condicionales para separar los datos en regiones bien diferenciadas
- Cada partición se determina según una característica (feature) específica y un valor umbral (cutoff value)
- El objetivo es crear nodos puros donde las clases queden bien separadas en una tarea de clasificación
Definición y propiedades de la entropía (Entropy)
- La entropía es una medida de la incertidumbre de la información y, para una probabilidad (p_i), se define como (H = -\sum p_i \log_2(p_i))
- Propiedades principales
- Cuando solo un evento tiene probabilidad 1 y el resto 0, (H=0), es decir, no hay incertidumbre
- Cuando todos los eventos tienen la misma probabilidad, la entropía alcanza su máximo y representa el estado más impuro
- Cuanto más uniformes son las probabilidades, mayor es la entropía
- Por lo tanto, un nodo puro tiene entropía 0, mientras que un nodo mezclado tiene un valor alto de entropía
Ganancia de información (Information Gain) y algoritmo ID3
- La ganancia de información se calcula como la diferencia de entropía antes y después de una partición, y representa la eficiencia de la división de los datos
- Fórmula: (\Delta IG = H_{\text{parent}} - \frac{1}{N}\sum N_{\text{child}} \cdot H_{\text{child}})
- Pasos del algoritmo ID3
- Calcular la entropía de cada característica
- Dividir el conjunto de datos con distintos criterios de partición y calcular la ganancia de información
- Elegir la partición con la mayor ganancia de información y crear un nodo de decisión
- Crear un nodo hoja cuando ya no sea posible seguir dividiendo
- Aplicar el proceso de forma recursiva a todos los subconjuntos, deteniéndose si todos los elementos pertenecen a la misma clase
- Por ejemplo, la condición Diameter ≤ 0.45 fue elegida como la primera partición porque tenía la mayor ganancia de información, 0.574
Impureza de Gini y medición alternativa
- La impureza de Gini (Gini impurity) es una alternativa a la entropía y otra forma de medir la impureza de la información
- Al no requerir cálculos logarítmicos, su cómputo es más rápido
- En conjuntos de datos desbalanceados, la entropía puede ser una opción más cuidadosa
- Ambos métodos suelen producir resultados similares en términos generales
Problemas de sobreajuste e inestabilidad
- El algoritmo ID3 sigue realizando particiones para minimizar la entropía, por lo que el árbol puede volverse excesivamente profundo
- Esto provoca sobreajuste (overfitting) y reduce la capacidad de generalización ante datos nuevos
- Además, existe el problema de inestabilidad (high variance), donde pequeños cambios en los datos pueden alterar en gran medida la estructura del árbol
- Ejemplo: incluso al agregar un pequeño ruido gaussiano al 5% de los datos de entrenamiento, puede generarse un árbol completamente distinto
- Como solución, la poda (pruning) permite limitar la profundidad del árbol, la cantidad de hojas, el número mínimo de muestras, etc.
Extensión hacia Random Forest
- Para mitigar la inestabilidad de un solo árbol de decisión, se utiliza un enfoque que entrena múltiples árboles con distintas muestras de datos y combina sus predicciones
- Este enfoque es Random Forest, que ofrece alta estabilidad y buen rendimiento de generalización
- Esto compensa las desventajas de los árboles de decisión y se considera uno de los algoritmos de machine learning más exitosos hasta la fecha
Conclusión y aprendizaje adicional
- Los árboles de decisión son modelos fáciles de interpretar, rápidos de entrenar y con preprocesamiento sencillo
- Sin embargo, para resolver los problemas de sobreajuste e inestabilidad, se necesita poda o técnicas de ensamble
- El artículo no aborda árboles para regresión, preferencia por cortes en los extremos (end-cut preference), hiperparámetros, etc., y recomienda profundizar con materiales relacionados
1 comentarios
Comentarios en Hacker News
Un arma secreta que me funcionó muy bien al aprender clasificadores fue entrenar primero un buen clasificador lineal
Luego entrenaba un árbol de decisión usando la salida no umbralizada de ese clasificador lineal como una dimensión adicional de características, y lo envolvía en un sistema de árboles con boosting
Así, el modelo lineal compensa las debilidades del árbol de decisión, y el árbol se encarga de las partes que al modelo lineal le cuestan
También se puede considerar la rotación de datos o la normalización de ejes, pero casi nunca fue necesario
Eso sí, cuando las características son muy dispersas, al árbol le cuesta encontrar puntos de partición
Se agrega cómputo extra al estado original para formar un estado observado y se entrena sobre eso
Por ejemplo, en el juego Snake, además de las coordenadas de la serpiente, se calculan y usan características derivadas como la cantidad de rutas de escape
Si no limpias los datos y diseñas bien las características, los resultados son mucho peores que con modelos de caja negra como las redes neuronales
Irónicamente, las redes neuronales encuentran por sí solas esas características latentes, aunque es difícil interpretar por qué funcionan así
Oblique Decision Tree, Model Tree (M5), Logistic Model Tree (LMT) y Hierarchical Mixture of Experts (HME) son algunos ejemplos
Cuando trabajaba en CERN hacia 2010, el Boosted Decision Tree era el clasificador más popular
Era por el equilibrio entre explicabilidad y capacidad de representación, y en ese momento culturalmente había resistencia a usar redes neuronales en análisis de física
Ahora los tiempos han cambiado mucho
En física, más que simplemente ajustar bien una curva, importa entender el mecanismo causal
Es como el sistema de epiciclos de Ptolomeo, que ajustaba mejor el movimiento celeste pero no explicaba la causa
Apenas aumenta un poco la profundidad, se vuelve una jungla casi imposible de interpretar
Con las redes neuronales pasa algo parecido: puedes seguir las operaciones internas, pero al final no sabes por qué tomaron esa decisión
En el mismo sitio también hay una explicación de Random Forest → mlu-explain/random-forest
Dato curioso: una red neuronal de 1 bit (single-bit neural network) es, en esencia, un árbol de decisión
En teoría, la mayoría de las redes neuronales se pueden “compilar” como una cadena de if-else, pero todavía no está claro cuándo eso funciona bien
Parece más una extensión del concepto que un mapeo directo
Así que me gustaría una explicación más clara de en qué sentido exacto se dice eso
La mayor ventaja de los árboles de decisión es la velocidad
En un entorno de baja latencia, intenté reemplazar un clasificador basado en árboles por una red neuronal pequeña, pero aunque la red tenía un poco más de precisión, la latencia de inferencia era más de 100 veces mayor
En cambio, los árboles con boosting o bagging son complejos, y otros algoritmos clásicos de ML también tienen peor portabilidad
En algún libro de ML (probablemente ESL) describían así a los árboles de decisión
“Son interpretables, rápidos, funcionan bien con distintos tipos de datos, son poco sensibles al escalado y tienen pocos parámetros de ajuste, pero... no funcionan bien”
Aun así, bagging o boosting pueden compensar esa desventaja, aunque en el proceso se pierden parte de las ventajas originales
Me gustan muchísimo los árboles de decisión. Son mi algoritmo clásico de ML favorito
Hice una implementación paralela puramente funcional en GNU Guile → enlace al código
Pero Guile no tiene algo como NumPy o DataFrame, así que la representación de datos es ineficiente
Guile es adecuado para manipular árboles, así que se siente natural para implementar árboles de decisión
Eso sí, sería más eficiente si se compilara a código máquina
Por cierto, también vale la pena mirar Lush(https://lush.sourceforge.net/) y aiscm(https://wedesoft.github.io/aiscm/)
La toma de decisiones ambigua de un experto a menudo también se puede modelar con un árbol de decisión simple o una cadena de decisión
El propio experto cree que su razonamiento es complejo, pero en realidad un árbol sencillo muchas veces lo explica mejor
Antes la regresión o el clustering basado en distancia parecían más sofisticados, pero los árboles son mucho más efectivos
Esto se explica en detalle en el capítulo 7 del Oxford Handbook of Expertise
Al final, un árbol de decisión divide el espacio de posibilidades como un kD-Tree y asigna una acción a cada región
La sutileza del juicio experto viene de lo finas que son las fronteras, pero el árbol también ofrece una aproximación bastante buena
El sitio era interesante y la presentación estaba buena
Pero algunos textos tenían poco contraste de color y eran difíciles de leer
La accesibilidad no es solo para personas con discapacidad, sino un elemento básico para mejorar la legibilidad
Hoy en día, en la era del deep learning, los árboles de decisión están siendo subestimados
Pero siguen siendo interpretables, rápidos y suficientemente prácticos
Yo armé un sistema de puntaje para análisis de sitios web basado en árboles,
evaluando condiciones como “¿tiene metadescripción?”, “¿carga en menos de 3 segundos?”, “¿es compatible con móviles?”
El usuario puede entender de inmediato por qué recibió ese puntaje
Explicar por qué una red neuronal dio 73 puntos es imposible, pero con un árbol eso es fácil
El árbol de diagnóstico de Esagil-kin-apli de alrededor del año 1000 a. C. fue uno de los primeros ejemplos