Clasificar con el árbol
Clasificá una fila y devolvé un int. Pista: int(modelo.predict([fila])[0]).
Entrá y llevá tu progreso —ejercicios, medallas y Pokémon— a cualquier dispositivo. 🔄
Si tu cuenta ya tiene progreso guardado, se carga ese al entrar.
Entraste como . Tu progreso se sincroniza solo. 🔄
Clasificá una fila y devolvé un int. Pista: int(modelo.predict([fila])[0]).
🎯 Meta: usar un modelo que se entiende: el árbol de decisión aprende reglas tipo “si… entonces…” y te dice qué dato fue más importante.
El KNN funciona pero es una “caja negra”. Un árbol de decisión es distinto: aprende una serie de preguntas (como un cuestionario) y podés leer cómo decide.
¿ataque > 60?
/ \
sí no
│ │
Fuego Agua
from sklearn.tree import DecisionTreeClassifier
# [ataque, defensa] -> 0 = Fuego, 1 = Agua
X = [[90, 40], [80, 50], [40, 90], [50, 80]]
y = [0, 0, 1, 1]
modelo = DecisionTreeClassifier(random_state=0)
modelo.fit(X, y)
print(modelo.predict([[85, 45]])) # [0] -> Fuego
print(modelo.predict([[45, 85]])) # [1] -> Agua
💡 random_state=0 fija el azar interno del árbol para que el resultado sea siempre el mismo.
Lo mejor del árbol: te dice cuánto pesó cada feature en sus decisiones. Útil para entender tus datos.
from sklearn.tree import DecisionTreeClassifier
# la decisión depende SOLO del ataque (la defensa es siempre 50)
X = [[10, 50], [20, 50], [80, 50], [90, 50]]
y = [0, 0, 1, 1]
modelo = DecisionTreeClassifier(random_state=0).fit(X, y)
print("importancia de cada feature:", modelo.feature_importances_)
# [1. 0.] -> el ataque importó todo, la defensa nada
💡 Las importancias suman 1. Si una feature da 0, no aportó nada para decidir; podrías hasta sacarla.
P: ¿Qué ventaja tiene un árbol de decisión sobre el KNN?
- Siempre tiene mayor accuracy
+ Es interpretable: podés leer las reglas que aprendió
- No necesita datos de entrenamiento
> El árbol aprende reglas tipo "si ataque > 60 → Fuego". Podés explicar cada decisión. El KNN es una "caja negra": solo sabe que algo es parecido a sus vecinos.
max_depth.from sklearn.tree import DecisionTreeClassifier
modelo = DecisionTreeClassifier(max_depth=2, random_state=0) # árbol cortito
print(modelo)
P: ¿Para qué sirve el parámetro `max_depth` en `DecisionTreeClassifier`?
- Para definir cuántos datos de entrenamiento usar
- Para establecer la cantidad de features del árbol
+ Para limitar cuántos niveles de preguntas puede tener el árbol y evitar overfitting
> Sin límite, el árbol puede crecer hasta memorizar cada dato. `max_depth=2` lo recorta: hace preguntas más generales y generaliza mejor.
| Cosa | Para qué |
|---|---|
DecisionTreeClassifier(random_state=0) | árbol de decisión |
.feature_importances_ | cuánto pesó cada feature |
max_depth | limitar el tamaño (evitar overfitting) |
| ventaja | es interpretable (se entiende) |
Practicá con los ejercicios de este tema. 💪
⚡ “El árbol no solo predice: te explica por qué. Eso vale oro.”