HerrKI mit seinem RoboterHerrKI KI verstehen · nachbauen · anwenden ⭐ 0 XP

Trainieren, prüfen, bestehen

Warum man ein Modell nie mit seinen Übungsaufgaben prüft: Teile die Daten selbst auf, trainiere live — und erlebe, was der „Schummeln“-Knopf wirklich kostet.

👋 HerrKI hier — heute geht es um die wichtigste Berufsregel im Machine Learning

Stell dir eine Klausur vor, in der exakt die Übungsaufgaben von gestern drankommen. Jeder besteht — und keiner hat etwas bewiesen. Genau diesen Fehler machen Anfänger mit ihren Modellen ständig: Sie prüfen mit den Daten, mit denen sie trainiert haben. Bevor wir uns Overfitting ansehen, brauchst du deshalb dieses Handwerkszeug: Daten richtig aufteilen.

Drei Töpfe, drei Aufgaben

1Training (~70 %) — die Übungsaufgaben. NUR hiermit lernt das Modell.

2Validierung (~15 %) — die Probeklausur. Hiermit vergleichst du Varianten und entscheidest, wann Schluss ist.

3Test (~15 %) — die echte Prüfung. Wird genau EINMAL angefasst, ganz am Ende. Wer mehrfach auf den Test schaut und danach am Modell dreht, hat ihn zur zweiten Validierung gemacht — und keine ehrliche Zahl mehr.

🃏 Teile die 46 Kundendaten auf und trainiere

Jede Karte ist ein Kunde (zwei Merkmale, Klasse „kauft“ 🟢 / „kauft nicht“ 🔴 — wie in Kapitel 220). Schiebe die Grenzen, dann trainiere.

70 % 15 % Test: 15 %

Data Leakage — Schummeln aus Versehen

Niemand schummelt absichtlich. In der Praxis passiert es versehentlich, zum Beispiel so:

⚠️ Skalieren über ALLE Daten: Du berechnest min/max über den kompletten Datensatz und teilst erst danach — schon sind Informationen aus dem Test ins Training gesickert (die Regel aus Kapitel 135!).

⚠️ Doppelte Datensätze: Derselbe Kunde landet in Training UND Test.

⚠️ Zeitreisen: Du sagst den Aktienkurs von Montag vorher — mit Daten, die es erst am Dienstag gab.

🔬 Runter zum Tensor

Das Aufteilen selbst ist unspektakulär — Tensor-Zerschneiden (Kapitel 060), nach dem Mischen. Deine 46 Kunden von oben liegen als Merkmals-Tensor [46, 2] mit den Klassen [46, 1] daneben — eine Zeile pro Kunde (Beispielzeilen):

// zwei Merkmale, auf 0–1 skaliert (wie in Kapitel 220), plus die Klasse Merkmal 1 Merkmal 2 kauft? Zeile 0 0.62 0.58 1 🟢 Zeile 1 0.31 0.44 0 🔴 Zeile 2 0.68 0.71 1 🟢 ⋮ Zeile 45 0.39 0.35 0 🔴

Der Schnitt bei 70/15/15 ist dann schlichtes Kopfrechnen auf der Zeilenzahl:

46 × 70 % = 32.2 → 32 Zeilen Training (Zeile 0 – 31) 46 × 15 % = 6.9 → 7 Zeilen Validierung (Zeile 32 – 38) Rest → 7 Zeilen Test (Zeile 39 – 45)

Und genau diese drei Zahlenpaare stehen im Code — slice nimmt Startzeile und Anzahl:

// 46 Kunden, gemischt. 70/15/15 aufteilen = einfach den Tensor zerschneiden: const training = daten.slice(0, 32); // Zeile 0-31 const validierung = daten.slice(32, 7); // Zeile 32-38 const test = daten.slice(39, 7); // Zeile 39-45 — anfassen: EINMAL

Mehr ist es nicht: Ein Schnitt an Zeile 32, einer an Zeile 39 — und aus „Übungsaufgaben“ werden „Probeklausur“ und „Prüfung“.

Zurück zur Anwendung

Ab jetzt liest du jede Modell-Meldung anders: „99 % Genauigkeit“ ist so lange Werbung, bis dabei steht, auf welchem Topf sie gemessen wurde. Und im nächsten Kapitel wirst du sehen, wie die Trainings- und die Validierungs-Kurve auseinanderlaufen — jetzt weißt du, wer diese beiden Linien sind.

🧠 Kurzer Check — hast du es?

1. Warum darf man ein Modell nicht mit den Trainingsdaten bewerten?
2. Wofür ist der Validierungs-Topf da — im Unterschied zum Test-Topf?
3. Du skalierst mit min/max über ALLE Daten und teilst erst danach auf. Was ist passiert?