Criterios de impureza
Introducción
En la clasificación basada en árboles, los criterios de impureza son fundamentales para decidir cómo dividir los datos. Estos criterios nos permiten medir cuán homogéneos o "impuros" son los subconjuntos de datos después de una división. Un subconjunto es considerado puro si contiene solo ejemplos pertenecientes a la misma clase. Los criterios de impureza nos ayudan a determinar en qué punto debemos detener el proceso de partición y construir nuestros árboles de decisión.
Explicación principal con ejemplos
Criterios de impureza comunes
Los principales criterios de impureza utilizados en los árboles de decisión son:
- Criterio de Gini (Gini Impurity): Este criterio mide la probabilidad del error en una clasificación aleatoria. Si un dato es seleccionado al azar, cuántas veces se espera que tenga el valor más común.
\[ G = 1 - \sum_{i=1}^{n} p_i^2 \]
Donde \( p_i \) es la probabilidad de que el elemento pertenezca a clase i. Un subconjunto con un nivel de impureza bajo (cercano a 0) significa que es pura.
- Entropía (Shannon Entropy): Esta medida se basa en la teoría de la información y mide la incertidumbre o dispersión en los datos.
\[ H = -\sum_{i=1}^{n} p_i \log_2(p_i) \]
Donde \( p_i \) es la probabilidad de que el elemento pertenezca a clase i. Un subconjunto con un nivel de entropía bajo (cercano a 0) también significa que es pura.
- Criterio de Varianza: Este criterio se utiliza principalmente para problemas de regresión y mide la varianza en los valores numéricos del atributo.
\[ V = \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2 \]
Donde \( x_i \) son los valores de datos y \( \bar{x} \) es la media. Un subconjunto con varianza baja indica que los valores están agrupados cerca de su media.
Ejemplo práctico
Supongamos que estamos trabajando en un problema de clasificación binaria con dos clases: A (positivo) y B (negativo).
# Ejemplo de datos
from sklearn.datasets import make_classification
import pandas as pd
X, y = make_classification(n_samples=100, n_features=20, n_classes=2)
df = pd.DataFrame(X, columns=[f'feat_{i}' for i in range(20)])
df['target'] = y
# Calcular la entropía para el conjunto de datos
def calculate_entropy(data):
class_counts = data['target'].value_counts()
entropy = -sum((count / len(data)) * np.log2(count / len(data) + 1e-10) for count in class_counts)
return entropy
print(f"Entropía total: {calculate_entropy(df)}")
Errores típicos / trampas
1. Confundir impureza con pureza
Un subconjunto puro no significa necesariamente que es óptimo para la división. Un subconjunto demasiado pequeño o poco variado puede resultar en una división inútil.
2. Ignorar el balanceo de clases
La entropía y Gini impurity pueden ser afectadas por desequilibrios de clases. Las decisiones basadas en estas métricas pueden favorecer la clase mayoritaria.
# Ejemplo de desbalance de clases
df_uneven = df.copy()
df_uneven['target'] = (df_uneven['target'] + np.random.randint(0, 2, size=len(df))).mod(2)
print(f"Entropía con desbalance: {calculate_entropy(df_uneven)}")
3. No considerar la varianza en datos numéricos
Si el atributo numérico tiene una alta varianza, un criterio de impureza basado en varianza puede ser insensible a cambios significativos.
Checklist accionable
- Revisar el balanceo de clases: Verifica si tu conjunto de datos está desequilibrado y considera técnicas como reponderación o oversampling.
- Seleccionar adecuadamente los criterios de impureza: Analiza la naturaleza del problema y el tipo de dato para elegir el criterio más apropiado.
- Considerar la pureza relativa: No solo busques subconjuntos puros, sino también aquellos que representan una mejora significativa en la homogeneidad.
- Evaluación cruzada: Utiliza técnicas de validación cruzada para evaluar el rendimiento del modelo en diferentes particiones del conjunto de datos.
- Monitorear la varianza: Si estás trabajando con variables numéricas, asegúrate de considerar su varianza al seleccionar los criterios de impureza.
Siguientes pasos
- Practica en problemas reales: Aplica los conceptos aprendidos a proyectos con datos reales.
- Leer documentación oficial: Consulta la documentación de bibliotecas como Scikit-learn para entender cómo implementan estos criterios.
- Participar en competencias: Utiliza plataformas como Kaggle para aplicar tus conocimientos en problemas de clasificación.
Siguiendo estas pautas, podrás mejorar significativamente la calidad y el rendimiento de los árboles de decisión que construyas en tu camino hacia la excelencia en el machine learning.