Lernkurven
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 33 von 58.
Würde mehr Daten dein Modell verbessern? Eine Lernkurve zeigt es: die Testgenauigkeit, während der Trainingsdatensatz wächst. Hier ein tiefer Baum auf Daten mit zwei Monden:
Der Baum merkt sich jeden Trainingsdatensatz, doch jede zusätzliche Zeile bringt ihm etwas Reales bei. Flexible Modelle profitieren am meisten von Daten.
Trainiere auf den ersten n Trainingszeilen und werte anschließend jedes Mal dieselben Testzeilen aus:
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")Steigt es am rechten Rand immer noch an? Mehr Daten helfen.
Aufgabe
MittelWürden mehr Aufnahmen helfen, zwei Eulenarten auseinanderzuhalten? Das Starter-Setup teilt 600 Rufe auf und bereitet beide Modelle sowie das Diagramm vor.
- Trainiere für jedes
ninsizesbeide Modelle mit den erstennTrainingszeilen; speichere ihre Testgenauigkeiten. - Gib den Zugewinn jedes Modells aus: letzter Wert minus erster Wert, mit 3 Dezimalstellen.
- Zeichne beide gegen
sizes, mitmarker="o", beschriftet mitlogisticundtree, und füge eine Legende hinzu.
Eulen aus einem anderen Wald geben Folgendes aus:
Logistic gains 0.053 from more data
Tree gains 0.160 from more dataund zeichnen dieses Diagramm. Coddy beschreibt dann deines.
Probier es selbst
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
# Ändere die folgenden Zeilen nicht: 600 Eulenrufe, Tonhöhe (Hz) und Dauer (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)
# Art 1, der Waldkauz, ruft für seine Tonhöhe länger; einige Feldnotizen sind falsch
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")
# Schreibe deinen Code unten
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter7Überanpassung
Unter- und ÜberanpassungLernkurvenRegularisierungValidierungssetsRückblick: Einen Baum optimieren2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler