Curvas de aprendizaje
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 33 de 58.
¿Mejoraría tu modelo con más datos? Una curva de aprendizaje lo muestra: la precisión de prueba a medida que crece el conjunto de entrenamiento. Aquí, un árbol profundo con datos de dos lunas:
El árbol memoriza cada conjunto de entrenamiento, pero cada fila adicional le enseña algo real. Los modelos flexibles son los que más se benefician de los datos.
Ajusta el modelo con las primeras n filas de entrenamiento y, después, evalúa siempre con las mismas filas de prueba:
sizes = [25, 50, 100, 200, 400, 800]
test_scores = []
for n in sizes:
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train[:n], y_train[:n])
test_scores.append(tree.score(X_test, y_test))
ax.plot(sizes, test_scores, marker="o")¿Sigues subiendo en el borde derecho? Más datos ayudarán.
Desafío
Intermedio¿Ayudarían más grabaciones a distinguir dos especies de búhos? El código inicial divide 600 llamadas y prepara ambos modelos y el gráfico.
- Para cada
nensizes, ajusta ambos modelos con las primerasnfilas de entrenamiento; guarda sus exactitudes de prueba. - Imprime la ganancia de cada modelo: la última puntuación menos la primera, con 3 decimales.
- Representa ambos frente a
sizes, conmarker="o", etiquetados comologisticytree, y con una leyenda.
Los búhos de otro bosque imprimen:
Logistic gains 0.053 from more data
Tree gains 0.160 from more datay dibujan este gráfico. Después, Coddy describe el tuyo.
Pruébalo tú mismo
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
# No cambies las líneas siguientes: 600 llamadas de búho, tono (Hz) y duración (s)
rng = np.random.default_rng(23)
pitch = np.round(rng.uniform(300, 900, 600))
length = np.round(rng.uniform(0.2, 2.0, 600), 2)
# La especie 1, el cárabo común, emite llamadas más largas para su tono; algunas notas de campo son incorrectas
longer = length > 0.5 + 6.4 * ((pitch - 600) / 600) ** 2
wrong_note = rng.random(600) < 0.05
species = np.where(longer != wrong_note, 1, 0)
X = np.column_stack([pitch, length])
X_train, X_test, y_train, y_test = train_test_split(X, species, test_size=0.25, random_state=0)
sizes = [25, 50, 100, 200, 400]
logistic = LogisticRegression(max_iter=1000)
tree = DecisionTreeClassifier(random_state=0)
fig, ax = plt.subplots()
ax.set_title("Owl Calls: Learning Curves")
ax.set_xlabel("Training rows")
ax.set_ylabel("Test accuracy")
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam7Sobreajuste
Subajuste y sobreajusteCurvas de aprendizajeRegularizaciónConjuntos de validaciónRepaso: Ajustar un árbol2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamosPractica por tu cuenta: Compilador de Python online