ML Atlas

Machine Learning von Grund auf · Lektion 0.1 · 1 von 33 fertigen Lektionen · 15 Min.

Der ganze Prozess in 15 Minuten, von Anfang bis Ende

Kurz gesagt

Der ganze Weg eines Machine-Learning-Projekts an einem Datensatz: Frage, Daten, Aufteilung, Raten, Modell und Bewertung. Ohne Vergleich sagt eine Zahl nichts.

Bevor du die Teile lernst, sieh dir das ganze Spiel an. So lernt man Fußball: erst ein Spiel, dann Passübungen. In dieser Lektion gehst du in einer Viertelstunde durch ein ganzes Machine-Learning-Projekt, an einem einzigen Datensatz: Pinguine dreier Arten, die Forschende auf Inseln vor der Küste der Antarktis vermessen haben. Jedes spätere Modul des Kurses öffnet einen der sechs Schritte, die du hier auf einmal siehst.

Erst vorhersagen, dann prüfen Ein Entscheidungsbaum (ein Modell, das nacheinander Ja/Nein-Fragen stellt) darf jedem Pinguin höchstens 2 solche Fragen zu seinen Körpermaßen stellen. Wie viele der 103 Pinguine, die er nie gesehen hat, erkennt er richtig?
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: Fast alle, mehr als 9 von 10

Zwei Fragen treffen 98 von 103 (95,1 %), eine Frage 81 (78,6 %). Einfaches Raten, „immer Adelie“, ganz ohne Modell, trifft 45-mal (43,7 %), und erst das sagt dir, ob 95,1 % viel ist. Eine dritte Frage hilft nicht: 96 von 103 (93,2 %).

Probier es aus

  • Stell 0 Fragen ein. Das ist Raten ohne Modell: Auf wie viele Pinguine passt „immer Adelie“?
  • Geh auf 1, dann auf 2 Fragen. Lies die Fragen des Baums unter dem Diagramm: Nach welchen Maßen fragt er?
  • Verschiebe bei 2 Fragen den Regler für die Aufteilung. Gibt es eine Aufteilung, bei der der Vorsprung vor dem Raten verschwindet?
  • Geh zurück zu Aufteilung 1 und stell 3 Fragen ein. Hilft eine zusätzliche Frage immer?

Wenn du es im Labor ausprobiert hast, geben wir den Schritten, die du gerade gegangen bist, Namen.

Die Idee in einfachen Worten

Jedes Machine-Learning-Projekt, von Pinguinen bis zur Betrugserkennung in einer Bank, geht durch dieselben sechs Schritte:

  1. Frage. Was genau sagst du vorher, und woraus? Hier: die Art eines Pinguins aus vier Körpermaßen. Eine gute Frage lässt sich prüfen, denn die wahre Art kennen wir.
  2. Daten. Die Datei enthält 344 Pinguine, aber 2 haben gar keine Maße, also bleiben 342. Das Geschlecht fehlt in 11 Zeilen. Würden wir jede Zeile mit irgendeiner Lücke streichen, blieben 333, aber das Geschlecht nutzen wir hier nicht, also verlieren wir nur diese 2.
  3. Aufteilung. 103 Pinguine, also 30 %, werden vor dem Modell versteckt. Das Modell lernt an den übrigen 239, und getestet wird es nur an den versteckten. Der Teil zum Lernen sind die Trainingsdaten, der versteckte Teil die Testdaten.
  4. Vergleichswert. Bevor du ein Modell baust, zähl, was eine Antwort ohne Nachdenken schafft. Unter den Lern-Pinguinen ist Adelie am häufigsten, also trifft „immer Adelie“ 45 der 103 Test-Pinguine: 43,7 %.
  5. Modell. Ein Entscheidungsbaum ist eine Folge von Ja/Nein-Fragen. Mit zwei Fragen fragt er zuerst nach der Flosse (bis 207 mm oder länger), dann nach der Länge oder der Höhe des Schnabels.
  6. Bewertung. Der Baum trifft 98 von 103, also 95,1 %: 51,5 Punkte mehr als Raten.

Die späteren Module des Kurses öffnen diese Schritte nacheinander: wie ein Modell aus Beispielen lernt und womit man es vergleicht (Modul 1), wie man ein Ergebnis misst (Modul 2), ob das Ergebnis neue Daten übersteht (Modul 3), was Daten kaputt macht (Modul 4), welche Modelle man wählt (Modul 5) und was mit einem Modell in der echten Welt passiert (Modul 6).

Jak to policzono
  • Daten: Palmer Penguins (Gorman, Williams und Fraser, 2014; Paket palmerpenguins: Horst, Hill und Gorman, 2020), Lizenz CC0. 344 Pinguine in der Datei, 342 mit allen vier Maßen.
  • Aufteilung: 70/30 mit derselben Artenmischung in beiden Teilen; Aufteilung 1 ist dieselbe wie train_test_split(test_size=0.3, stratify=y, random_state=1) in scikit-learn.
  • Modell: Entscheidungsbaum (CART, Gini-Index), höchstens 1, 2 oder 3 Fragen auf jedem Pfad.
  • Vergleichswert: die häufigste Art unter den Lern-Pinguinen.

Warum es funktioniert

Das Ergebnis an den versteckten Pinguinen bedeutet etwas, weil das Modell sie nicht gesehen hat. An den Lern-Pinguinen getestet, könnte es sich einfach die Antworten merken. Deshalb erreicht der Baum mit drei Fragen 97,5 % an den Lern-Pinguinen, aber nur 93,2 % an den versteckten, weniger als der Baum mit zwei Fragen. Die dritte Frage hat angefangen, einzelne Pinguine zu lernen statt einer Regel. Das ist Überanpassung, das Thema von Modul 3.

Der Baum schneidet so gut ab, weil die Arten wirklich verschieden gebaut sind. Gentoo haben lange Flossen, also trennt sie schon die erste Frage fast ab: Unter den Lern-Pinguinen mit einer Flosse über 207 mm sind 85 von 91 Gentoo. Bei den kürzeren Flossen verrät ein langer Schnabel einen Chinstrap und ein kurzer einen Adelie: In der Gruppe mit Flosse bis 207 mm und Schnabel bis 43,4 mm sind 101 von 103 Lern-Pinguinen Adelie.

Ein Vergleichswert ist nötig, weil die Genauigkeit von der Aufgabe abhängt. Bei drei Arten träfe ein Würfelwurf jedes dritte Mal, und „immer die häufigste Art“ trifft 43,7 %. Ein Modell ergibt erst Sinn, wenn es diese einfache Antwort deutlich schlägt.

Eine Aufteilung ist eine Ziehung. Über 20 Aufteilungen im Labor treffen zwei Fragen zwischen 94 und 100 der 103 Pinguine (von 91,3 % bis 97,1 %), und Raten erreicht jedes Mal 43,7 %. Der Vorsprung bleibt, auch wenn sich die genaue Zahl ändert.

Häufiger Fehler

Wahr oder falsch: „95 % Genauigkeit sind ein großartiges Ergebnis“. Falsch, oder genauer: Die Zahl allein sagt es nicht. Die Genauigkeit hängt von den Anteilen der Klassen ab und davon, wie leicht die Aufgabe ist. Hier ergibt Raten 43,7 %, also ist 95,1 % eine riesige Verbesserung. Sind aber 95 von 100 E-Mails normale Nachrichten, hat ein Filter, der nichts tut und jede E-Mail durchlässt, ebenfalls 95 % Genauigkeit und fängt keinen einzigen Spam. Erst der Vergleichswert, dann die Begeisterung.

Wo der Vergleich hinkt: Ein Fußballspiel hat ein Ende, und ein Projekt verläuft selten geradlinig. Nach der Bewertung gehst du oft zurück zur Frage oder zu den Daten, weil das Ergebnis gezeigt hat, was fehlt.

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. Warum verstecken wir einen Teil der Daten vor dem Modell?
Antwort anzeigen

Richtige Antwort: Um es an Beispielen zu prüfen, die es nie gesehen hat

Das Ergebnis an versteckten Beispielen sagt, wie das Modell mit neuen zurechtkommt. An den Lernbeispielen könnte es sich einfach die Antworten merken.

2. Ein Modell erkennt die Art von 75 von 100 Pinguinen. Was brauchst du, um zu beurteilen, ob das gut ist?
Antwort anzeigen

Richtige Antwort: Das Ergebnis von einfachem Raten an denselben Testdaten

Eine Zahl ohne Vergleichswert sagt nichts. Ergibt Raten 43,7 %, sind 75 % ein Fortschritt; ergäbe es 80 %, wäre das Modell schlechter als Raten.

3. Welche Reihenfolge der Projektschritte ist richtig?
Antwort anzeigen

Richtige Antwort: Daten → Aufteilung → Vergleichswert → Modell → Bewertung

Zuerst versteckst du einen Teil der Daten, dann berechnest du einen einfachen Vergleichswert, und erst am Ende baust du das Modell und bewertest es am versteckten Teil.

Das Wichtigste

  • Jedes Machine-Learning-Projekt geht durch dieselben Schritte: Frage, Daten, Aufteilung, Vergleichswert, Modell und Bewertung.
  • Ein Modell wird an Daten bewertet, die es nicht gesehen hat; das Ergebnis an den Lerndaten ist geschönt.
  • Eine Zahl ohne Vergleichswert sagt nichts: 95,1 % ist viel, weil einfaches Raten 43,7 % ergibt.
  • Eine Aufteilung ist eine Ziehung, also prüf das Ergebnis an mehreren.

Tiefer: Formel, Code, Praxis

Die Mathematik

Die Genauigkeit ist der Anteil richtiger Antworten: Genauigkeit = richtig / alle. Raten mit „immer Adelie“ ergibt 45 / 103 ≈ 0,437, der Baum mit zwei Fragen 98 / 103 ≈ 0,951. Die Differenz ist 98 / 103 − 45 / 103 = 53 / 103 ≈ 0,515, also 51,5 Punkte.

Die Antwort „immer die häufigste Klasse“ hat eine Genauigkeit gleich dem Anteil dieser Klasse an der Testmenge. Adelie sind 151 von 342 Pinguinen (44,2 %); die Aufteilung erhält die Artenmischung, also sind im Test 45 von 103. Eine zufällige Wahl einer der drei Arten träfe im Schnitt 1 / 3 ≈ 33,3 % der Fälle.

Ein Baum der Tiefe d teilt die Daten in höchstens 2^d Gruppen: Bei 2 Fragen sind es 4 Gruppen, und jede sagt die Art vorher, die in ihr unter den Lern-Pinguinen überwiegt.

Im Code (Python)

Derselbe Versuch in scikit-learn: Aufteilung 1 aus dem Labor, der Vergleichswert, Bäume der Tiefe 1–3 und der Baum mit zwei Fragen an 100 verschiedenen Aufteilungen. Das Notebook, das unter der Ausgabe verlinkt ist, lädt die Daten selbst.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

df = pd.read_csv("data/raw/penguins.csv")
cols = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
d = df.dropna(subset=cols)  # nur Pinguine mit allen Maßen
print(f"penguins {len(df)}, with measurements {len(d)}, without any gap {len(df.dropna())}")
X, y = d[cols], d["species"]
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, stratify=y, random_state=1)
guess = ytr.value_counts().idxmax()  # Vergleichswert: die häufigste Art unter den Lern-Pinguinen
print(f"train {len(Xtr)}, test {len(Xte)}; always {guess}: {(yte == guess).sum()} of {len(yte)} = {(yte == guess).mean():.3f}")
for depth in (1, 2, 3):
    tree = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(Xtr, ytr)
    print(f"depth {depth}: {(tree.predict(Xte) == yte).sum()} of {len(yte)} = {tree.score(Xte, yte):.3f} (train {tree.score(Xtr, ytr):.3f})")
scores = []
for seed in range(100):  # 100 verschiedene zufällige Aufteilungen
    a, b, c, e = train_test_split(X, y, test_size=0.3, stratify=y, random_state=seed)
    scores.append(DecisionTreeClassifier(max_depth=2, random_state=0).fit(a, c).score(b, e))
print(f"depth 2 on 100 splits: mean {sum(scores) / 100:.3f}, min {min(scores):.3f}, max {max(scores):.3f}")

Ausgabe

penguins 344, with measurements 342, without any gap 333
train 239, test 103; always Adelie: 45 of 103 = 0.437
depth 1: 81 of 103 = 0.786 (train 0.791)
depth 2: 98 of 103 = 0.951 (train 0.967)
depth 3: 96 of 103 = 0.932 (train 0.975)
depth 2 on 100 splits: mean 0.949, min 0.883, max 0.990

Bei Aufteilung 1 sind die Ergebnisse dieselben wie im Labor. Über 100 andere Aufteilungen trifft der Baum mit zwei Fragen im Schnitt 94,9 %, im schlechtesten Fall 88,3 %, im besten 99,0 %, und Raten erreicht jedes Mal 43,7 %.

Für die Praxis
  • Fang immer mit einem Vergleichswert an. In scikit-learn erledigt das DummyClassifier(strategy="most_frequent"), bei Regression der Mittelwert.
  • Versteck die Testmenge gleich am Anfang und schau sie nicht an, während du ein Modell wählst. Zum Wählen ist die Validierung da (Modul 3).
  • Wenn die Klassen verschieden groß sind, teile mit Stratifizierung (stratify=y), damit beide Teile dieselben Anteile behalten.
  • Gib das Ergebnis aus mehreren Aufteilungen oder aus einer Kreuzvalidierung an, nicht eine Zahl aus einer einzigen Ziehung.
  • Notiere den Zufallsstartwert (random_state), damit andere das Ergebnis nachrechnen können, und prüf die Lizenz der Daten, bevor du sie nutzt.

Mehr im Atlas

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