ML Atlas

Machine Learning von Grund auf · Lektion 2.1 · 8 von 33 fertigen Lektionen · 10 Min.

Klassifikation: eine Grenze ziehen

Kurz gesagt

Ein Klassifikator macht aus Messwerten eine Kategorie. Logistische Regression liefert eine Wahrscheinlichkeit und eine Grenze – hier an zwei Pinguinarten.

Aufwärmen Zwei Fragen aus früheren Lektionen. Eine Minute, und sie blockiert die Lektion nicht.
Aus Lektion 1.6: Gradientenabstieg: Lernen in kleinen Schritten Warum nutzt man für neuronale Netze den Gradientenabstieg statt einer exakten Formel?

Antwort anzeigen

Richtige Antwort: Meist gibt es keine Formel für die besten Parameter, den Gradienten kann man aber berechnen

Der Gradientenabstieg braucht nur die Steigung des Verlusts am aktuellen Punkt, und die ist selbst für Modelle mit Milliarden von Parametern verfügbar.

Aus Lektion 1.5: Lineare Regression: eine Gerade anpassen Warum quadriert die lineare Regression die Residuen, statt sie einfach zu addieren?

Antwort anzeigen

Richtige Antwort: Damit sich Abweichungen über und unter der Geraden nicht aufheben und große mehr zählen

Quadrate sind immer positiv und wachsen schnell, also spiegelt die Bewertung jeden Fehler wider und bestraft große besonders stark.

Eine Biologin in der Antarktis misst Schnabel und Flossen eines Pinguins. Welche Art ist es? Das ist eine andere Frage als „Wie stark schreitet die Krankheit fort?“. Die Antwort ist keine Zahl auf einer Skala, sondern eine Wahl zwischen Kategorien. Schaffen das die Geraden und Schritte bergab aus den vorigen Lektionen? Ja – mit einem cleveren Kniff. Probier es zuerst selbst aus, bevor du die Erklärung liest.

Erst vorhersagen, dann prüfen Das Modell unterscheidet Adelie- von Zügelpinguinen (Chinstrap), und die Standard-Entscheidungsschwelle liegt bei 0,5. Welche Schwelle am Regler ergibt die höchste Genauigkeit: 0,1; 0,3; 0,5 oder 0,9?
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: 0,3

Bei der Schwelle 0,3 beträgt die Genauigkeit 98,6 % (3 Fehler), bei 0,5 nur 96,8 % (7 Fehler), bei 0,9 92,2 % und bei 0,1 90,4 %. Die 0,5 ist nicht heilig: Die beste Schwelle hängt vom Klassenverhältnis ab und davon, welcher Fehler mehr kostet.

Probier es aus

  • Sieh dir zuerst die Grenze an. Such die Pinguine, die auf der falschen Seite liegen: Das sind die Fälle, bei denen sich das Modell selbst mit seiner besten Geraden irrt.
  • Schieb den Regler für den Wahrscheinlichkeits-Schwellenwert zu einem Ende und beobachte, wie die Grenze zu einer Art hin wandert. Achte darauf, dass sich die Gerade verschiebt, aber ihre Richtung behält.
  • Stell den Schwellenwert nahe an ein Extrem und zähle, wie sich die Fehler ändern: Eine Art wird jetzt fast nie verpasst, auf Kosten der anderen.
  • Such Pinguine nahe der Grenze und vergleiche sie mit weit entfernten. Welche würdest du von Hand nachprüfen?

Die Idee in einfachen Worten

Eine Kategorie vorherzusagen heißt Klassifikation. In dieser Lektion nutzen wir den Datensatz Palmer Penguins: 344 Pinguine dreier Arten von Inseln nahe der Palmer-Station in der Antarktis, jeweils mit Maßen für Schnabel, Flossen und Körper. Damit alles in eine Ebene passt, nehmen wir zwei Arten und zwei Messwerte, sodass jeder Pinguin ein Punkt in einer Ebene ist – ein Messwert nach rechts, der andere nach oben – mit bekannter Art.

Ein Klassifikator muss diese Ebene in zwei Bereiche teilen: „hier Art A, dort Art B“. Die Linie zwischen den Bereichen ist die Entscheidungsgrenze. Die logistische Regression ist trotz ihres Namens ein Klassifikationsmodell, und ihre Grenze ist eine Gerade.

Der Kniff: Die logistische Regression antwortet nicht nur „A“ oder „B“. Sie antwortet mit einer Wahrscheinlichkeit: „Dieser Pinguin gehört mit Wahrscheinlichkeit 0,9 zu Art B.“ Denk an den Wetterbericht. Die Meteorologin sagt „80 % Regenwahrscheinlichkeit“, und du entscheidest, ob dir das reicht, um einen Schirm mitzunehmen. Das Modell spielt die Meteorologin; der Schwellenwert ist deine Schirmregel.

Warum es funktioniert

Zuerst berechnet das Modell eine Punktzahl, genau wie die lineare Regression: eine gewichtete Summe der Merkmale plus Achsenabschnitt, z = w₁x₁ + w₂x₂ + b. Diese Punktzahl kann jede beliebige Zahl sein, deshalb wird sie von der Sigmoidfunktion in den Bereich zwischen 0 und 1 gepresst:

p = 1 / (1 + e^(−z))

Eine große positive Punktzahl ergibt eine Wahrscheinlichkeit nahe 1, eine große negative eine Wahrscheinlichkeit nahe 0, und eine Punktzahl von genau null ergibt 0,5. Pinguine weit weg von der Grenze bekommen sichere Wahrscheinlichkeiten; Pinguine nahe der Grenze bekommen Wahrscheinlichkeiten um die Hälfte – das Modell ist unsicher und sagt das auch.

Die Gewichte werden wie in Lektion 4 per Gradientenabstieg gelernt, aber mit einem anderen Verlust. Statt der quadratischen Abweichung nutzt das Modell den Log-Loss (auch Kreuzentropie genannt). Er bestraft eine sichere richtige Antwort kaum und eine sichere falsche Antwort sehr hart. Das drängt das Modell dazu, nur dann sicher zu sein, wenn die Daten es rechtfertigen.

Zum Schluss macht der Schwellenwert aus der Wahrscheinlichkeit eine Entscheidung: Wahrscheinlichkeit über dem Schwellenwert → Art B, darunter → Art A. Üblich ist 0,5, aber nichts zwingt dazu. Verschiebt man den Schwellenwert, verschiebt sich die Grenze. Weil die Wahrscheinlichkeit von der gewichteten Summe abhängt, gehört zu jedem Schwellenwert eine Gerade mit derselben Richtung, nur verschoben: Die Meinung des Modells darüber, in welcher Richtung sich die Arten unterscheiden, bleibt gleich; es ändert sich nur, wie viel Sicherheit du verlangst.

Häufiger Fehler

Zwei Fehler sind verbreitet. Der erste ist, 0,5 für ein Gesetz zu halten. Der Schwellenwert ist eine Entscheidung über Kosten, kein Teil des Modells; in der Medizin nimmt man vielleicht viele Fehlalarme in Kauf, um weniger Krebsfälle zu übersehen. Der zweite ist, die Wahrscheinlichkeit als Gewissheit zu lesen. Eine Wahrscheinlichkeit von 0,97 bedeutet, dass das Modell in etwa drei von hundert solchen Fällen einen Irrtum erwartet – und das nur, wenn die neuen Daten den Trainingsdaten ähneln. Ein Pinguin aus einer Population, die das Modell nie gesehen hat, kann eine sichere und falsche Antwort bekommen.

Eine Grenze, die die meisten Pinguine richtig einordnet, klingt gut, aber „die meisten“ verbirgt viel: welche Fehler, wie viele und wie schlimm? In der nächsten Lektion öffnen wir die Kiste der Fehler und lernen, sie richtig zu zählen.

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 gibt die logistische Regression aus, bevor ein Schwellenwert angewendet wird?
Antwort anzeigen

Richtige Antwort: Eine Wahrscheinlichkeit zwischen 0 und 1 für eine der Klassen

Die Sigmoidfunktion macht aus der gewichteten Summe eine Wahrscheinlichkeit, und der Schwellenwert macht aus der Wahrscheinlichkeit eine Entscheidung.

2. Du erhöhst den Schwellenwert von 0,5 auf 0,8. Was passiert mit der Grenze?
Antwort anzeigen

Richtige Antwort: Sie verschiebt sich parallel, und weniger Pinguine werden als Art B eingestuft

Zu jedem Schwellenwert gehört eine Gerade mit derselben Richtung; ein strengerer Schwellenwert verschiebt sie so, dass nur sichere Fälle durchkommen.

3. Warum nutzt die logistische Regression den Log-Loss statt der quadratischen Abweichung?
Antwort anzeigen

Richtige Antwort: Der Log-Loss bestraft sichere falsche Antworten sehr stark, was zu Wahrscheinlichkeiten passt

Der Log-Loss wächst steil, wenn die Wahrscheinlichkeit für die wahre Klasse gegen null geht, und hält so von unbegründeter Sicherheit ab.

Das Wichtigste

  • Klassifikation sagt eine Kategorie vorher; die Entscheidungsgrenze trennt die Bereiche der Klassen.
  • Die logistische Regression schickt eine gewichtete Summe durch die Sigmoidfunktion und erhält so eine Wahrscheinlichkeit.
  • Der Schwellenwert macht aus einer Wahrscheinlichkeit eine Entscheidung und ist eine Wahl über Kosten, keine feste 0,5.
  • Ein anderer Schwellenwert verschiebt die Grenze der logistischen Regression, ohne sie zu drehen.

Tiefer: Formel, Code, Praxis

Die Mathematik

Das Modell berechnet einen Score z = w·x + b und macht daraus mit der Sigmoidfunktion eine Wahrscheinlichkeit, p = 1 / (1 + e^(−z)). Trainiert wird es durch Minimieren des Log-Loss L = −mean( y·ln p + (1 − y)·ln(1 − p) ), dessen Gradient für jedes Gewicht einfach mean((p − y)·x) ist.

  • Die Vorhersage ist Klasse 1, wenn p ≥ t. Weil die Sigmoidfunktion steigt, ist das dasselbe wie z ≥ ln(t / (1 − t)).
  • Für t = 0.5 ist die rechte Seite 0, die Grenze ist also die Gerade w·x + b = 0. Für t = 0.3 ist sie −0.85: dieselbe Richtung, verschoben in Richtung Klasse 0.
  • w legt die Richtung der Grenze fest. t verschiebt sie nur.
  • Eine selbstsichere falsche Antwort kostet beim Log-Loss viel, denn −ln p wächst ohne Grenze, wenn p gegen 0 geht.
Im Code (Python)

Das Modell des Labs: Adelie gegen Zügelpinguin anhand von Schnabellänge und Schnabeltiefe, standardisiert, bewertet auf denselben Pinguinen bei vier Schwellen:

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

df = pd.read_csv("data/raw/penguins.csv")
df = df[df["species"].isin(["Adelie", "Chinstrap"])].dropna(subset=["bill_length_mm", "bill_depth_mm"])
X, y = df[["bill_length_mm", "bill_depth_mm"]], df["species"] == "Chinstrap"
model = make_pipeline(StandardScaler(), LogisticRegression()).fit(X, y)
p = model.predict_proba(X)[:, 1]  # Wahrscheinlichkeit für Zügelpinguin
for t in [0.1, 0.3, 0.5, 0.9]:
    wrong = int(((p >= t) != y).sum())  # Zügelpinguin, wenn p >= t
    print(f"threshold {t}: {wrong} mistakes, accuracy {1 - wrong / len(y):.1%}")

Ausgabe

threshold 0.1: 21 mistakes, accuracy 90.4%
threshold 0.3: 3 mistakes, accuracy 98.6%
threshold 0.5: 7 mistakes, accuracy 96.8%
threshold 0.9: 17 mistakes, accuracy 92.2%

Das Notebook, das unter der Ausgabe verlinkt ist, lädt die Daten selbst. Die beste Schwelle ist hier 0,3, nicht die Standardschwelle 0,5.

Für die Praxis
  • predict() nutzt immer 0,5. Für eine andere Schwelle nimm predict_proba und vergleiche selbst, wie oben, oder verpacke das Modell in FixedThresholdClassifier (feste Schwelle) oder TunedThresholdClassifierCV (Schwelle per Kreuzvalidierung gewählt), beide in scikit-learn 1.5 oder neuer.
  • Wähle die Schwelle auf Validierungsdaten, nicht auf den Zeilen, über die du berichtest. Die 98,6 % hier sind auf denselben Pinguinen gemessen, auf denen das Modell angepasst wurde, sie sind also optimistisch.
  • Standardisiere die Merkmale. LogisticRegression wendet standardmäßig L2-Regularisierung an (C=1.0), und diese Strafe hängt von der Skala jedes Merkmals ab.
  • Vergleiche die Genauigkeit mit der Baseline der Mehrheitsklasse, und schau dir bei unausgewogenen Klassen oder unterschiedlichen Kosten die beiden Fehlerarten getrennt an.
  • Eine Wahrscheinlichkeit ist nur so gut wie die Daten, auf denen sie angepasst wurde. Bei einem Tier aus einer anderen Population kann auch eine selbstsichere Antwort falsch sein.

Mehr im Atlas

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