Die Klausur, die jeder kennt
Stellen Sie sich eine Person vor, die eine Prüfung ablegt. Sie bekommt vorher die Aufgaben samt Lösungen und lernt sie auswendig.
In der Prüfung stehen genau diese Aufgaben. Sie hat 100 Prozent. Weiß er jetzt etwas?
Mit Modellen ist es genauso. Wer ein Modell an seinen Lernbeispielen misst, erfährt nur, ob es auswendig gelernt hat.
Am Ende dieser Lektion
Notiz
Ich kann erklären, warum wir mit Daten testen, die das Modell nicht gesehen hat.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Trainingsdaten | die Beispiele, aus denen das Modell lernt | |
| Testdaten | Beispiele, die das Modell beim Lernen nie gesehen hat | 20 von 100 Bestellungen |
| Aufteilung | das Trennen aller Daten in Trainings- und Testdaten | |
| Datenleck | ein Beispiel steckt in den Trainings- und in den Testdaten | dieselbe Bestellung in beiden |
| Zufällig mischen | die Reihenfolge der Daten vor dem Teilen durcheinanderbringen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Zwei Mengen, die sich nie treffen
Bevor das Training beginnt, legen wir einen Teil der Daten zur Seite. Das sind die Testdaten. Das Modell sieht sie nie beim Lernen.
Der Rest sind die Trainingsdaten. Nur daraus lernt das Modell.
Zum Schluss prüfen wir das Modell an den Testdaten. Für das Modell sind es neue Fälle, wie später im Betrieb.
Rechenbeispiel: eine Aufteilung 80 zu 20
| Alle Daten | Trainingsdaten (80 von 100) | Testdaten (20 von 100) |
|---|---|---|
| 100 Bestellungen | 80 Bestellungen | 20 Bestellungen |
| 1000 Bestellungen | 800 Bestellungen | 200 Bestellungen |
| 50 Bestellungen | 40 Bestellungen | 10 Bestellungen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Daten aufteilen in Python
# Zehn Bestellungen. Zu jeder ist bekannt, ob sie zurückgeschickt wurde.
bestellungen = [101, 102, 103, 104, 105, 106, 107, 108, 109, 110]
# 80 Prozent zum Trainieren, der Rest zum Testen.
anzahl_training = len(bestellungen) * 80 // 100
training = bestellungen[:anzahl_training]
test = bestellungen[anzahl_training:]
print("Training:", training)
print("Test:", test)
print("Anzahl:", len(training), "und", len(test))
# Ein Modell, das nur auswendig lernt, was es im Training gesehen hat.
gelernt = {101: "ja", 102: "nein", 103: "nein", 104: "ja",
105: "nein", 106: "ja", 107: "nein", 108: "nein"}
def antwort(nummer):
if nummer in gelernt:
return gelernt[nummer]
return "unbekannt"
print("Bestellung 103 (im Training):", antwort(103))
print("Bestellung 109 (im Test):", antwort(109))
# Ändern Sie 80 in 50. Wie viele Bestellungen bleiben zum Testen?
Vor dem Teilen mischen
Oft sind Daten sortiert, zum Beispiel nach Datum. Dann liegen am Ende die neuesten Bestellungen. Teilen wir einfach nach Position, enthalten die Testdaten nur den Winter und die Trainingsdaten nur den Sommer.
Darum mischen wir die Daten zuerst zufällig. Dann stecken in beiden Mengen alle Jahreszeiten.
Achtung: das Datenleck
Warnung
Ein Datenleck liegt vor, wenn dieselbe Information in beiden Mengen steckt. Zum Beispiel ist eine Bestellung doppelt in der Datei, einmal im Training und einmal im Test. Dann ist der Test zu leicht, und das Modell sieht besser aus, als es ist.
Wie ein Leck das Ergebnis täuscht
| Modell | Trainingsdaten | Testdaten | Ergebnis im Test |
|---|---|---|---|
| Ohne Leck | Bestellungen 1 bis 80 | Bestellungen 81 bis 100 | 70 %, ehrlich |
| Mit Leck | Bestellungen 1 bis 80 | Bestellungen 61 bis 100 | 85 %, zu gut |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Manchmal gibt es eine dritte Menge
Teams probieren oft viele Einstellungen aus und messen jedes Mal. Dafür nehmen sie eine dritte Menge, die Validierungsdaten.
Die Testdaten bleiben unberührt bis zum letzten Schritt. So bleibt der letzte Test ehrlich.
Ein häufiger Irrtum
Warnung
Viele denken: „Mein Modell hat auf allen Daten 98 Prozent, also ist es gut.“ Dabei waren die Trainingsdaten dabei. Eine ehrliche Zahl kommt nur von Daten, die das Modell nie gesehen hat.