Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Testdaten ehrlich halten

Nach dieser Lektion: Ich kann einen Testsatz sauber halten und erkennen, wenn Information in ihn geflossen ist.

Lektion, 60 Min.5 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Ein zu guter Wert

Ein Team testet ein Modell mit zurückgehaltenen Zeilen. Es heißt, das Modell liegt neunmal von zehn richtig. Im Einsatz liegt es siebenmal von zehn richtig.

Am Modell war nichts falsch. Die Testzeilen waren nicht wirklich neu. Wenn ein Wert zu gut aussieht, fragen Sie zuerst: Was hat das Modell vielleicht schon gesehen?

Am Ende dieser Lektion

Notiz

Ich kann einen Testsatz sauber halten und erkennen, wenn Information in ihn geflossen ist.

Schlüsselwörter

BegriffWas er bedeutet
Testsatzzurückgehaltene Zeilen, die man nur einmal ansieht, ganz am Ende
ValidierungssatzZeilen, mit denen man zwischen Modellen und Einstellungen wählt
DatenleckInformation aus dem Test oder aus der Antwort erreicht das Modell vor dem Test
Duplikateine Zeile, die mehrfach vorkommt
Basislinieder Wert eines sehr einfachen Ratens, zum Vergleichen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Drei Sätze, drei Aufgaben

In der letzten Lektion haben Sie einen Validierungssatz zurückgehalten. Sie haben ihn oft angesehen, um zu entscheiden, wann man stoppt und welche Einstellungen man nimmt.

Dadurch ist er bei jedem Blick ein wenig weniger neu. Darum hält ein sorgfältiges Team einen dritten Satz zurück, den Testsatz. Er wird nur einmal benutzt, am Ende, für den Wert, den man meldet.

Beispiel: ein Jahr in drei Sätzen

SatzAnteilTageWofür
Trainingssatz60 Prozent219Die Gewichte einstellen
Validierungssatz20 Prozent73Ein Modell und seine Einstellungen wählen
Testsatz20 Prozent73Der eine ehrliche Wert am Ende

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die drei Größen ausrechnen

Befehl
docker exec jupyter python3 -c "print(int(365 * 0.6), int(365 * 0.2), 365 - int(365 * 0.6) - int(365 * 0.2))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Datenleck: der Test ist nicht wirklich neu

Ein Datenleck ist jeder Weg, auf dem das Modell Testinformation vor dem Test sieht. Das einfachste ist ein Duplikat: dieselbe Zeile im Trainingssatz und im Testsatz.

Ein Modell, das sich nur Zeilen merkt, sieht dann ausgezeichnet aus. Starten Sie den Code und sehen Sie es mit einem Modell, das nichts tut außer sich zu merken.

Ein Modell, das sich nur etwas merkt

Code: python
# Acht Tage: (Temperatur, Regen) und ob der Tag voll oder ruhig war.
tage = [
    ((3, 0), "ruhig"), ((8, 0), "voll"), ((12, 2), "ruhig"), ((15, 0), "voll"),
    ((18, 0), "voll"), ((9, 5), "ruhig"), ((21, 0), "voll"), ((6, 3), "ruhig"),
]
training = tage[:6]
neu = tage[6:]
kopien = tage[:2] + tage[6:]

def auswendiglerner(tag):
    # Merkt sich jeden Trainingstag genau. Ein unbekannter Tag bekommt "ruhig".
    for bekannt, etikett in training:
        if bekannt == tag:
            return etikett
    return "ruhig"

def punktzahl(zeilen):
    richtig = 0
    for tag, etikett in zeilen:
        if auswendiglerner(tag) == etikett:
            richtig = richtig + 1
    return richtig / len(zeilen)

print("auf den eigenen Trainingstagen:", punktzahl(training))
print("auf zwei neuen Tagen:", punktzahl(neu))
print("auf zwei Kopien und zwei neuen Tagen:", punktzahl(kopien))
# Welcher Punktzahl würden Sie glauben? Ändern Sie einen neuen Tag und starten Sie erneut.

Derselbe Test an einer echten Tabelle

Jetzt dieselbe Idee mit den Fahrradausleihen des Labs. Ein Nächster-Nachbar-Modell antwortet mit dem Etikett des nächsten bekannten Tages, es ist also fast ein Auswendiglerner. Ein belebter Tag hat 300 Ausleihen oder mehr.

Schreiben Sie zuerst ein kleines Skript ins Lab. Es nimmt ein Wort: ehrlich, doppelt oder antwort.

Das Skript ins Lab schreiben

Befehl
docker exec jupyter sh -c "printf '%s\n' 'import sys' 'import pandas as pd' 'from sklearn.model_selection import train_test_split' 'from sklearn.neighbors import KNeighborsClassifier' '' 'hires = pd.read_csv(\"hires.csv\")' 'art = sys.argv[1]' 'if art == \"doppelt\":' '    hires = pd.concat([hires, hires], ignore_index=True)' 'spalten = [\"temp_c\", \"rain_mm\"]' 'if art == \"antwort\":' '    spalten = spalten + [\"hires\"]' 'etikett = hires[\"hires\"] >= 300' 'X_lern, X_test, y_lern, y_test = train_test_split(hires[spalten], etikett, test_size=0.25, random_state=1)' 'modell = KNeighborsClassifier(n_neighbors=1).fit(X_lern, y_lern)' 'print(art, \"gelernt:\", round(modell.score(X_lern, y_lern), 3), \"zurückgehalten:\", round(modell.score(X_test, y_test), 3))' > steps/leck.py"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Es ehrlich starten

Befehl
docker exec jupyter python3 steps/leck.py ehrlich

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Jeden Tag zweimal schreiben, dann trennen

Befehl
docker exec jupyter python3 steps/leck.py doppelt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Spalte, die die Antwort verrät

Das andere häufige Leck ist eine Spalte, die die Antwort enthält oder etwas, das man erst hinterher weiß. Eine Rückerstattungs-Markierung in einer Tabelle, die Rückerstattungen vorhersagt, ist so eine. Eine Summe, die nach dem Ereignis gebildet wird, auch.

Im Lab ist hires die Zahl, aus der das Etikett gemacht wird. Nehmen Sie sie unter die Eingaben und sehen Sie nach.

Dem Modell die Spalte hires geben

Befehl
docker exec jupyter python3 steps/leck.py antwort

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, ein hoher Wert beweise ein gutes Modell. Er kann nur beweisen, dass der Test leicht war. Ein perfekter Wert auf zurückgehaltenen Zeilen ist ein Grund, nach einem Leck zu suchen, nicht zu feiern.

Beispiel: drei Lecks und ihre Kontrollen

Was passiert istWarum es lecktWie man es prüft
Jeder Tag zweimal geschrieben, dann getrenntEine Testzeile hat einen Zwilling im TrainingDie Testzeilen zählen, die auch im Training stehen
Die Spalte hires sagt ein Etikett voraus, das aus hires gemacht istDie Eingabe enthält die AntwortVon jeder Spalte fragen: Ist sie vor der Antwort bekannt?
Zehn Modelle probiert, den besten Testwert gemeldetDer Testsatz hat zum Wählen gedientMit der Validierung wählen, einmal testen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Weiter: das Leck in Ihrem Notebook

Nehmen Sie die hires.csv des Labs und ein Modell Ihrer Wahl. Notieren Sie den Wert auf den gelernten und auf den zurückgehaltenen Tagen.

Fügen Sie dann eine Spalte hinzu, die Ihrer Meinung nach leckt, und starten Sie erneut. Wie weit bewegt sich der Wert? Schreiben Sie einen Satz: Warum gäbe es diese Spalte nicht an dem Tag, an dem Sie die Vorhersage wirklich brauchen?

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.