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:
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.
Sfida
MedioPiù registrazioni aiuterebbero a distinguere due specie di gufi? Il codice iniziale suddivide 600 richiami e prepara entrambi i modelli e il grafico.
- Per ogni
ninsizes, addestra entrambi i modelli sulle primenrighe di addestramento; conserva le loro accuratezze di test. - Stampa il guadagno di ciascun modello, punteggio finale meno punteggio iniziale, con 3 decimali.
- Traccia entrambi in funzione di
sizes, conmarker="o", etichettatilogisticetree, e aggiungi una legenda.
I gufi di un altro bosco stampano:
Logistic gains 0.053 from more data
Tree gains 0.160 from more datae disegnano questo grafico. Coddy poi descrive il tuo.
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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento supervisionato
1Il tuo primo modello
Imparare dagli esempiInsiemi di addestramento e testAdattare e prevedereValutare un modelloRiepilogo: Ordinatore di semi4Regressione logistica
Previsioni sì o noLa soglia decisionaleI pesi come evidenzePiù classiRiepilogo: filtro antispam7Sovraadattamento
Sottoadattamento e sovraadattamentoCurve di apprendimentoRegolarizzazioneSet di validazioneRiepilogo: ottimizzare un albero2Vicini più prossimi
Come decide k-NNScegliere kConfini decisionaliNormalizzare le scale per i viciniRiepilogo: vicini del vino5Misurare i classificatori
La matrice di confusionePrecisione e richiamoIl punteggio F1Classi sbilanciateCurve ROCRiepilogo: test di screening8Convalida incrociata
Validazione K-foldConfronto equo tra modelliRicerca a grigliaRiepilogo: riparazioni di skateboard11Progetto: specie di pinguini
Incontra i pinguiniPrepara i datiScegli un modelloOttimizza il miglioreDistribuisci il modello3Regressione lineare
Prevedere numeriPiù caratteristicheMisurare gli erroriGrafici dei residuiRiepilogo: noleggio di biciclette6Alberi decisionali
Gli alberi fanno domandeLeggere un alberoProfondità dell’alberoImportanza delle caratteristicheRiepilogo: decisioni sui prestitiEsercitati da solo: Compilatore Python online