Menu
CoddyTech

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:

Genauigkeit im Vergleich zur Anzahl der Trainingszeilen von 25 bis 800. Die Trainingskurve bleibt durchgehend bei 1.0; die Testkurve steigt von 0.80 auf 0.94

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.

challenge icon

Aufgabe

Mittel

Würden mehr Aufnahmen helfen, zwei Eulenarten auseinanderzuhalten? Das Starter-Setup teilt 600 Rufe auf und bereitet beide Modelle sowie das Diagramm vor.

  1. Trainiere für jedes n in sizes beide Modelle mit den ersten n Trainingszeilen; speichere ihre Testgenauigkeiten.
  2. Gib den Zugewinn jedes Modells aus: letzter Wert minus erster Wert, mit 3 Dezimalstellen.
  3. Zeichne beide gegen sizes, mit marker="o", beschriftet mit logistic und tree, 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 data

und zeichnen dieses Diagramm. Coddy beschreibt dann deines.

Eulenrufe: Lernkurven. Die logistische Linie steigt von 0.64 auf etwa 0.69 und bleibt flach; die Bauml धinie steigt stetig von 0.67 auf 0.83

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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler