ML Atlas

Machine Learning von Grund auf · Lektion 3.1 · 14 von 33 fertigen Lektionen · 10 Min.

Überanpassung: Wenn ein Modell auswendig lernt

Kurz gesagt

Ein flexibles Modell trifft seine Trainingsdaten perfekt und versagt bei neuen. Steigt der Grad eines Polynoms, gehen Trainings- und Testfehler auseinander.

Aufwärmen Zwei Fragen aus früheren Lektionen. Eine Minute, und sie blockiert die Lektion nicht.
Aus Lektion 2.6: Metrik und Schwelle nach den Kosten der Fehler Ein Spamfilter: Eine gute Mail im Spam kostet 5-mal so viel wie Spam im Posteingang. Wohin gehört die Schwelle für P(Spam)?

Antwort anzeigen

Richtige Antwort: Hoch, etwa 5 / (5 + 1) ≈ 0,83: In den Spam kommen nur sichere Fälle

Hier ist der Fehlalarm der teurere Fehler, also steigt die Schwelle: c_FP / (c_FP + c_FN) = 5/6 ≈ 0,83, wenn das Modell kalibriert ist. Im Lab schiebt ein teurerer Alarm die günstigste Schwelle ebenfalls über 0,5.

Aus Lektion 2.5: Unausgewogene Klassen Bei 8 bösartigen zum Lernen heben Klassengewichte die Sensitivität von 61,5 % auf 80,0 %. Was tun sie nicht?

Antwort anzeigen

Richtige Antwort: Sie fügen keine neuen Beispiele hinzu, also fehlt zu allen Daten noch etwas

Gewichte ändern nur, wie viel ein Fehler bei jeder Klasse kostet. Alle Daten mit Gewichten ergeben eine Sensitivität von 86,8 %, bei 8 bösartigen fehlen also 6,8 Prozentpunkte.

Zwei Schüler bereiten sich auf eine Matheklausur vor. Der eine arbeitet die Ideen hinter den Aufgaben durch. Der andere lernt die Lösungen aller alten Klausuren Wort für Wort auswendig. Bei den alten Klausuren ist der zweite fehlerlos. Dann kommt die echte Klausur mit neuen Zahlen. Auf wen setzt du? Modelle stehen genau vor dieser Wahl, und sich selbst überlassen wird ein flexibles Modell bereitwillig zum zweiten Schüler. Probier es zuerst selbst aus, bevor du die Erklärung liest.

Erst vorhersagen, dann prüfen Du passt Polynome vom Grad 0 bis 10 an 30 Patienten an. Welcher Grad liefert den kleinsten Fehler bei den Testpatienten?
Wie sicher bist du?

Interaktives Labor

Dieses interaktive Labor läuft im Browser mit aktiviertem JavaScript. Der Text drumherum beschreibt, was es zeigt.

Antwort anzeigen

Richtige Antwort: Grad 1 (eine einfache Gerade)

Am besten ist Grad 1: Testfehler 64,1. Grad 3 hat 65,2, Grad 6 hat 70,3 und Grad 10 sogar 132,6, obwohl der Trainingsfehler von 60,2 (Grad 1) auf 51,1 (Grad 10) sinkt. Mehr Flexibilität senkt den Trainingsfehler, nicht den Testfehler.

Probier es aus

  • Fang bei Grad 1 an und notiere beide Fehler. Erhöhe dann den Grad-Regler Schritt für Schritt und beobachte, wie der Trainingsfehler fällt.
  • Mach weiter und behalte den Testfehler im Blick. Finde den Grad, bei dem er am kleinsten ist – das ist der Sweet Spot für diese Stichprobe.
  • Schieb den Grad-Regler auf das Maximum. Sieh dir die Kurve zwischen den Punkten an: Beschreibt sie noch sinnvoll, wie der BMI mit dem Krankheitsverlauf zusammenhängt?
  • Vergleiche die Lücke zwischen Trainings- und Testfehler beim niedrigsten und beim höchsten Grad. Eine wachsende Lücke ist der Fingerabdruck der Überanpassung.

Die Idee in einfachen Worten

In Lektion 3 haben wir eine Gerade angepasst. Eine Gerade ist steif: Sie kann sich keiner Kurve anschmiegen, selbst wenn die Daten deutlich gekrümmt sind. Ein Polynom ist eine flexiblere Familie von Kurven:

ŷ = w₀ + w₁x + w₂x² + … + w_d·x^d

Der Grad d steuert die Flexibilität. Grad 1 ist die Gerade; Grad 2 kann eine Biegung machen; höhere Grade können sich immer stärker schlängeln. Mit genügend hohem Grad läuft ein Polynom durch jeden einzelnen Trainingspunkt.

Das klingt nach Erfolg, aber echte Daten enthalten Rauschen – zufällige Schwankungen, die kein Merkmal erklärt. Zwei Patienten mit demselben BMI haben nicht denselben Krankheitsverlauf. Ein Modell, das flexibel genug ist, jeden Punkt zu treffen, lernt nicht nur den Trend, sondern auch das Rauschen, also die Zufälle genau dieser Stichprobe. Das ist Überanpassung (Overfitting): Das Modell passt immer besser zu den Trainingsdaten, während seine Vorhersagen für neue Daten schlechter werden. Das umgekehrte Versagen, ein Modell, das zu steif ist, um das echte Muster zu erfassen, heißt Unteranpassung (Underfitting).

Warum es funktioniert

Nehmen wir eine kleine Zufallsstichprobe der Diabetespatienten aus Lektion 3 und teilen sie in Trainings- und Testpunkte auf. Eine kleine Stichprobe macht den Effekt gut sichtbar, weil ein paar ungewöhnliche Punkte eine flexible Kurve weit vom Kurs abbringen können.

Verfolgen wir, was mit den beiden Fehlern passiert, wenn der Grad steigt. Der Trainingsfehler sinkt immer weiter: Eine flexiblere Kurve kann auf den Punkten, an die sie angepasst wird, immer mindestens so gut sein, weil sie jede einfachere Kurve nachahmen kann. Der Testfehler verhält sich anders. Zuerst fällt er ebenfalls, weil die zusätzliche Flexibilität echte Struktur einfängt. Ab einem bestimmten Grad steigt er dann wieder, weil sich die Kurve nun verbiegt, um einzelnen Trainingspunkten nachzujagen, und diese Biegungen für alle anderen falsch sind. Das Ergebnis ist die berühmte U-Form des Testfehlers.

Der Grund hat einen Namen: das Bias-Varianz-Dilemma. Ein steifes Modell hat einen hohen Bias – es liegt systematisch daneben, egal welche Stichprobe es sieht. Ein sehr flexibles Modell hat eine hohe Varianz – zieh eine leicht andere Stichprobe, und du bekommst eine völlig andere Kurve. Das beste Modell liegt dazwischen: flexibel genug, um dem Signal zu folgen, und steif genug, um das Rauschen zu ignorieren. Wo dieser Punkt liegt, hängt davon ab, wie viele Daten du hast: Mit mehr Daten mittelt sich das Rauschen heraus, und mehr Flexibilität wird ungefährlich.

Häufiger Fehler

Der grundlegende Fehler ist, die Komplexität eines Modells nach dem Trainingsfehler zu wählen. Der Trainingsfehler belohnt immer mehr Flexibilität, also stimmt er immer für das komplexeste Modell – den auswendig lernenden Schüler. Der zweite Fehler ist anzunehmen, Überanpassung sei selten oder exotisch. Sie ist das Standardverhalten jedes flexiblen Modells bei begrenzten Daten, und das betrifft Entscheidungsbäume, neuronale Netze und das meiste, was du bauen wirst. Die Abhilfe ist nicht, flexible Modelle zu meiden, sondern sie zu zügeln: einfachere Modelle, mehr Daten oder Regularisierung, die extreme Gewichte bestraft.

In dieser Überlegung steckt ein Haken: Wir haben den besten Grad gewählt, indem wir auf den Testfehler geschaut haben – genau davor hat Lektion 2 gewarnt. In der nächsten Lektion lernen wir, Einstellungen ehrlich zu wählen, mit Validierung und Kreuzvalidierung.

Finde den Fehler der KI

So hat ein Chatbot geantwortet. Ein Satz ist inhaltlich falsch. Welcher?

Frage: Ich habe Polynome vom Grad 1 bis 10 an 30 Patienten angepasst, BMI gegen Krankheitsverlauf. Welchen Grad soll ich wählen?

Antwort des Chatbots

Falschen Satz zeigen

Der falsche Satz: Der Grad mit dem kleinsten Trainingsfehler, hier Grad 10, ist daher auch der, der neue Patienten am besten vorhersagt.

Der Trainingsfehler belohnt immer Flexibilität, deshalb taugt er nicht zur Wahl des Grades. In der Lektion hat Grad 10 den kleinsten Trainingsfehler (51,1 gegenüber 60,2 bei Grad 1), doch sein Testfehler beträgt 132,6, mehr als doppelt so viel wie die 64,1 der Geraden.

Quiz

Drei Fragen zur Selbstkontrolle. Wähle eine Antwort oder klappe die Lösung unter der Frage auf. Mit der Tastatur: Pfeiltasten wählen, Enter oder Leertaste bestätigt.

1. Was passiert mit dem Trainingsfehler, wenn der Grad des Polynoms steigt?
Antwort anzeigen

Richtige Antwort: Er fällt weiter oder bleibt gleich, weil flexiblere Kurven einfachere nachbilden können

Ein Polynom höheren Grades enthält jedes Polynom niedrigeren Grades als Spezialfall, also kann es die Trainingspunkte nie schlechter treffen.

2. Der Trainingsfehler ist winzig, der Testfehler aber groß. Was ist die wahrscheinlichste Diagnose?
Antwort anzeigen

Richtige Antwort: Überanpassung, weil das Modell das Training auswendig gelernt hat

Eine große Lücke zwischen Trainings- und Testfehler bedeutet, dass das Modell Details der Trainingsstichprobe gelernt hat, die sich nicht verallgemeinern lassen.

3. Warum machen mehr Trainingsdaten ein flexibles Modell meist ungefährlicher?
Antwort anzeigen

Richtige Antwort: Mit mehr Punkten mittelt sich das Rauschen heraus, und die Kurve jagt keinen Einzelpunkten nach

Das Rauschen in einzelnen Punkten bleibt, aber bei vielen Punkten hebt es sich auf, sodass die Anpassung dem echten Trend folgt.

Das Wichtigste

  • Überanpassung heißt, das Rauschen in den Trainingsdaten mitzulernen, sodass die Testleistung schlechter wird.
  • Der Trainingsfehler belohnt immer Flexibilität; nur Daten, aus denen das Modell nicht gelernt hat, decken Überanpassung auf.
  • Der Testfehler bildet mit wachsender Komplexität typischerweise ein U: Unteranpassung auf der einen Seite, Überanpassung auf der anderen.
  • Mehr Daten, einfachere Modelle und Regularisierung verringern die Überanpassung.

Tiefer: Formel, Code, Praxis

Die Mathematik

Ein Polynom vom Grad d hat d + 1 Gewichte: ŷ = w₀ + w₁x + … + w_d·x^d. Die Anpassung nach kleinsten Quadraten minimiert den Trainingsfehler. Jedes Polynom vom Grad d − 1 ist auch ein Polynom vom Grad d (mit w_d = 0), deshalb kann der beste Trainingsfehler mit wachsendem d nur gleich bleiben oder fallen. Bei n Punkten mit lauter verschiedenen x geht der Grad n − 1 durch jeden Punkt, und der Trainingsfehler ist 0.

Der Testfehler zerfällt in drei Teile: E[(y − ŷ)²] = bias² + variance + σ². Der Bias ist die systematische Abweichung eines zu starren Modells. Die Varianz gibt an, wie stark sich die angepasste Kurve zwischen Stichproben ändert. σ² ist das Rauschen, das niemand entfernen kann. Ein höherer Grad senkt den Bias und erhöht die Varianz, woraus die U-Form entsteht.

Das Lab gibt den RMSE, √MSE, in den Einheiten der Zielgröße an.

Im Code (Python)

Dreißig zufällige Diabetes-Patienten als Trainingsset, die übrigen Patienten (innerhalb des BMI-Bereichs des Trainings) als Testset. Das ist derselbe Versuchstyp wie im Lab, aber eine andere Zufallsstichprobe, deshalb weichen die Zahlen von denen des Labs ab:

import numpy as np
from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True, scaled=False)
x, y = X["bmi"].to_numpy(), y.to_numpy()
perm = np.random.default_rng(0).permutation(len(x))
tr, te = perm[:30], perm[30:]
te = te[(x[te] >= x[tr].min()) & (x[te] <= x[tr].max())]  # innerhalb des Trainingsbereichs bleiben
rmse = lambda i, p: np.sqrt(np.mean((y[i] - p(x[i])) ** 2))
for deg in (1, 3, 10):
    p = np.polynomial.Polynomial.fit(x[tr], y[tr], deg)  # passt auf ein umskaliertes x an, deshalb ist Grad 10 stabil
    print(f"degree {deg:2d}: train RMSE {rmse(tr, p):6.1f}, test RMSE {rmse(te, p):6.1f}")

Ausgabe

degree  1: train RMSE   61.6, test RMSE   63.5
degree  3: train RMSE   60.9, test RMSE   63.8
degree 10: train RMSE   54.7, test RMSE  199.5

Der Trainingsfehler sinkt mit dem Grad immer weiter. Der Testfehler bei Grad 10 ist mehr als dreimal so groß wie bei Grad 1.

Für die Praxis
  • Wähle den Grad oder eine andere Flexibilitätseinstellung nie nach dem Trainingsfehler. Er stimmt immer für das flexibelste Modell.
  • Schau dir die Lücke zwischen Trainings- und Testfehler an. Ein kleiner Trainingsfehler bei einem großen Testfehler bedeutet Überanpassung. Sind beide Fehler hoch, ist es Unteranpassung.
  • Polynome höheren Grades laufen außerhalb des Bereichs der Trainingsdaten aus dem Ruder. Nutze sie nicht zur Extrapolation.
  • Bei einer einzigen kleinen Stichprobe ist das Bild verrauscht. Wiederhole die Aufteilung mit mehreren Seeds, bevor du einem „besten Grad“ traust.
  • Um ein flexibles Modell im Zaum zu halten, probiere mehr Daten, ein einfacheres Modell oder Regularisierung (Ridge, Lasso), bevor du die Flexibilität ganz aufgibst.

Mehr im Atlas

Einträge der Enzyklopädie zu den Ideen dieser Lektion: