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.
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.
Wähle eine Antwort und wie sicher du bist.
Antworte, um das Labor freizuschalten.
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.
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 wiez ≥ ln(t / (1 − t)). - Für
t = 0.5ist die rechte Seite 0, die Grenze ist also die Geradew·x + b = 0. Fürt = 0.3ist sie−0.85: dieselbe Richtung, verschoben in Richtung Klasse 0. wlegt die Richtung der Grenze fest.tverschiebt sie nur.- Eine selbstsichere falsche Antwort kostet beim Log-Loss viel, denn
−ln pwächst ohne Grenze, wennpgegen 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.
Notebook herunterladen (.ipynb). Öffne es in Jupyter oder lade es in Google Colab hoch; fehlende Daten lädt es selbst.
Für die Praxis
predict()nutzt immer 0,5. Für eine andere Schwelle nimmpredict_probaund vergleiche selbst, wie oben, oder verpacke das Modell inFixedThresholdClassifier(feste Schwelle) oderTunedThresholdClassifierCV(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.
LogisticRegressionwendet 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.
War das hilfreich?
Danke! Das hilft uns, besser zu werden.
Mehr im Atlas
Einträge der Enzyklopädie zu den Ideen dieser Lektion: