Evaluar con split
Partí (X, y) mitad y mitad (test_size=0.5, random_state=seed), entrená un KNN de 1 vecino con el train, y devolvé el accuracy_score sobre el test.
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. 🔄
Partí (X, y) mitad y mitad (test_size=0.5, random_state=seed), entrená un KNN de 1 vecino con el train, y devolvé el accuracy_score sobre el test.
🎯 Meta: medir si tu modelo es bueno. Vas a calcular su exactitud sobre datos que nunca vio. Un modelo sin evaluar es una promesa sin pruebas.
Entrenar un modelo es fácil. Lo difícil es saber si anda bien. Para eso se mide la exactitud (accuracy): el porcentaje de aciertos sobre datos de prueba.
from sklearn.metrics import accuracy_score
y_real = [0, 1, 1, 0, 1]
y_predicho = [0, 1, 0, 0, 1] # se equivocó en el 3ro
print(accuracy_score(y_real, y_predicho)) # 0.8 -> 4 de 5
La regla de oro: entrenás con una parte y evaluás con otra (que el modelo no vio). Así sabés cómo se va a portar con datos nuevos de verdad.
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# dos grupos bien separados
X = np.array([[90, 40], [88, 42], [86, 44], [40, 90], [42, 88], [44, 86]])
y = np.array([0, 0, 0, 1, 1, 1])
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.5, random_state=0)
modelo = KNeighborsClassifier(n_neighbors=1).fit(X_tr, y_tr)
predicciones = modelo.predict(X_te)
print("exactitud:", accuracy_score(y_te, predicciones))
P: ¿Qué significa una accuracy de `0.8`?
- El modelo acertó el 8% de las predicciones
- El modelo tiene un error del 80%
+ El modelo acertó el 80% de las predicciones
> Accuracy es la proporción de aciertos: `0.8` = 4 de cada 5 predicciones correctas. Un valor de `1.0` sería perfecto (100% de aciertos).
Casi todos los modelos tienen .score(X_test, y_test), que entrena… no: calcula la exactitud directamente.
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
X = np.array([[90, 40], [40, 90]])
y = np.array([0, 1])
modelo = KNeighborsClassifier(n_neighbors=1).fit(X, y)
print(modelo.score(X, y)) # 1.0
⚠️ Si tu modelo da 100% en entrenamiento pero mal en prueba, está sobreajustado (overfitting): se memorizó los datos en vez de aprender el patrón. Por eso SIEMPRE se evalúa con datos separados.
P: ¿Qué es el overfitting?
- Cuando el modelo tiene muy pocos datos para entrenar
+ Cuando el modelo memorizó los datos de entrenamiento pero no generaliza bien a datos nuevos
- Cuando la accuracy en test supera el 95%
> El overfitting ocurre cuando el modelo "se aprende de memoria" los datos de entrenamiento. Parece perfecto en train pero falla con datos nuevos. Por eso siempre se evalúa en un test set separado.
| Cosa | Para qué |
|---|---|
accuracy_score(real, pred) | proporción de aciertos |
| entrenar con train, evaluar con test | medición honesta |
modelo.score(X_test, y_test) | exactitud en un paso |
| overfitting | memorizar en vez de aprender |
Practicá con los ejercicios de este tema. 💪
⚡ “Un modelo sin evaluar es como un Pokémon sin combatir: no sabés si sirve.”