Menu
CoddyTech

Curve di apprendimento

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 33 di 58.

Più dati migliorerebbero il tuo modello? Una curva di apprendimento lo mostra: l’accuratezza sul test mentre il set di addestramento cresce. Qui, un albero profondo su dati a due lune:

Accuratezza rispetto alle righe di addestramento da 25 a 800. La linea di addestramento rimane a 1.0 per tutto il tempo; la linea di test sale da 0.80 a 0.94

L’albero memorizza ogni set di addestramento, eppure ogni riga aggiuntiva gli insegna qualcosa di reale. I modelli flessibili traggono maggior vantaggio dai dati.

Addestra sulle prime n righe di addestramento, poi valuta sempre sulle stesse righe di test:

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")

Continui a salire sul bordo destro? Più dati saranno d'aiuto.

challenge icon

Sfida

Medio

Più registrazioni aiuterebbero a distinguere due specie di gufi? Il codice iniziale suddivide 600 richiami e prepara entrambi i modelli e il grafico.

  1. Per ogni n in sizes, addestra entrambi i modelli sulle prime n righe di addestramento; conserva le loro accuratezze di test.
  2. Stampa il guadagno di ciascun modello, punteggio finale meno punteggio iniziale, con 3 decimali.
  3. Traccia entrambi in funzione di sizes, con marker="o", etichettati logistic e tree, e aggiungi una legenda.

I gufi di un altro bosco stampano:

Logistic gains 0.053 from more data
Tree gains 0.160 from more data

e disegnano questo grafico. Coddy poi descrive il tuo.

Richiami dei gufi: curve di apprendimento. La linea logistica sale da 0.64 a circa 0.69 e rimane piatta; la linea dell'albero sale costantemente da 0.67 a 0.83

Provalo tu

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

# Non modificare le righe sottostanti: 600 richiami di gufo, pitch (Hz) e length (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 specie 1, l'allocco, emette richiami più lunghi in relazione al proprio pitch; alcune note sul campo sono errate
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")

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online