🌳 Árbol de Decisión

Clasificación de Medicamentos - Resultados de tu ejecución

98.33%
Accuracy
59/60
Aciertos
4
max_depth

Predicciones vs Valores Reales (primeros 5 pacientes)

Paciente 1
drugY
drugY
✅ Acierto
Paciente 2
drugX
drugX
✅ Acierto
Paciente 3
drugX
drugX
✅ Acierto
Paciente 4
drugX
drugX
✅ Acierto
Paciente 5
drugX
drugX
✅ Acierto
Los primeros 5 pacientes TODOS fueron correctos

Resultado Global

98.33%

59 predicciones correctas de 60 pacientes

Solo 1 error en 60 pacientes

Parámetros del Modelo

criterion: "entropy"
max_depth: 4
Entrenamiento: 140 pacientes (70%)
Prueba: 60 pacientes (30%)

Árbol de Decisión (max_depth=4)

❓ ¿Na_to_K ≤ 15.4?
✅ Sí (Na_to_K ≤ 15.4)
❓ ¿Colesterol = HIGH?
❌ No (Na_to_K > 15.4)
💊 drugY
✅ Sí (Colesterol HIGH)
💊 drugB
❌ No (Colesterol NORMAL)
❓ ¿Edad ≤ 50?
✅ Sí (Edad ≤ 50)
💊 drugA
❌ No (Edad > 50)
💊 drugX
El árbol aprendió estas reglas de los 140 pacientes de entrenamiento

Código Python Ejecutado

# ============================================
# EJERCICIO 1.1: CLASIFICACIÓN CON ÁRBOL DE DECISIÓN
# RESULTADO: 98.33% Accuracy (59/60 aciertos)
# ============================================

import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn import metrics

# Cargar datos
my_data = pd.read_csv("drug200.csv", delimiter=",")

# Crear matriz X (características)
X = my_data[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values

# Codificar variables categóricas
le_sex = preprocessing.LabelEncoder()
le_sex.fit(['F', 'M'])
X[:, 1] = le_sex.transform(X[:, 1])

le_BP = preprocessing.LabelEncoder()
le_BP.fit(['LOW', 'NORMAL', 'HIGH'])
X[:, 2] = le_BP.transform(X[:, 2])

le_Chol = preprocessing.LabelEncoder()
le_Chol.fit(['NORMAL', 'HIGH'])
X[:, 3] = le_Chol.transform(X[:, 3])

# Vector objetivo
y = my_data["Drug"]

# División 70% entrenamiento / 30% prueba
X_trainset, X_testset, y_trainset, y_testset = train_test_split(
    X, y, test_size=0.3, random_state=3
)

# Crear y entrenar árbol
drugTree = DecisionTreeClassifier(criterion="entropy", max_depth=4)
drugTree.fit(X_trainset, y_trainset)

# Predicciones
predTree = drugTree.predict(X_testset)

# Resultados
print(f"Predicciones: {predTree[0:5]}")
print(f"Valores reales: {y_testset[0:5].tolist()}")
print(f"Accuracy: {metrics.accuracy_score(y_testset, predTree)*100:.2f}%")
# Output: Accuracy: 98.33%

📊 Entropía

$$H(S) = -\sum_{i=1}^{n} p_i \cdot \log_2(p_i)$$

Mide el desorden en un conjunto. Valor 0 = pureza total.

📈 Ganancia de Información

$$IG(D, P) = H(D) - \sum_{v}\frac{|D_v|}{|D|} \cdot H(D_v)$$

El árbol elige la pregunta con MAYOR ganancia de información.

Árbol de Decisión - Accuracy Real: 98.33% (59/60) HarvardX / IBM Cognitive Class