Machine Learning von Grund auf · Lektion 1.3 · 4 von 33 fertigen Lektionen · 12 Min.
Der Vergleichswert: Womit vergleichst du dein Modell?
Kurz gesagt
Bevor du ein Modell lobst, rechne das Ergebnis ohne Lernen aus: häufigste Klasse oder Mittelwert. Sind Kranke selten, trifft „immer gesund“ und findet keinen.
Aufwärmen Zwei Fragen aus früheren Lektionen. Eine Minute, und sie blockiert die Lektion nicht.
In Lektion 0.1 erkannte der Baum 95,1 % der Pinguine, Raten nur 43,7 %. Diese zweite Zahl ist der Vergleichswert (englisch baseline): das Ergebnis einer Antwort, die nichts lernt. Ohne ihn weißt du nicht, ob ein Modell überhaupt etwas gelernt hat. Heute siehst du, wie man ihn in zwei Aufgaben berechnet und wann die Genauigkeit allein täuscht. Die Daten: 569 Biopsien von Brusttumoren und 442 Patienten mit Diabetes.
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: Etwa 99 %, mehr als die gelernte Regel, und es findet keine einzige
107 von 108 Biopsien sind 99,1 % Genauigkeit, und die bösartige rutscht durch. Die gelernte Regel mit einer Schwelle erreicht in diesem Test 90,7 %, also weniger, aber sie findet die bösartige Biopsie. Im vollen Test mit 64 bösartigen kommt „immer gutartig“ nur auf 62,6 %.
Probier es aus
- Beginne mit den Biopsien und allen 64 bösartigen. Um wie viel schlägt die gelernte Regel „immer gutartig“?
- Schieb den Regler nach rechts, bis nur noch 5 bösartige übrig sind, dann 1. Was passiert mit der Genauigkeit von „immer gutartig“ und mit der Zahl der gefundenen bösartigen?
- Wechsle zu Diabetes. Vergleiche den Fehler der Geraden mit BMI und des Modells mit 10 Messwerten mit dem Fehler des Mittelwerts allein.
Wenn du es im Labor geprüft hast, benennen wir, was du siehst.
Die Idee in einfachen Worten
Der Vergleichswert ist die einfachste Antwort, die man ohne Lernen geben kann. In der Klassifikation ist das die häufigste Klasse: Von den 398 Lernbiopsien sind 250 gutartig, also lautet die Antwort immer „gutartig“. In der Regression ist es der Mittelwert: Jeder Patient bekommt denselben vorhergesagten Krankheitsverlauf, den Durchschnitt der Lernpatienten.
Ein Modell ist erst sinnvoll, wenn es den Vergleichswert auf denselben Testdaten deutlich schlägt. Bei den Biopsien erreicht die Regel mit einem Messwert und einer Schwelle 91,2 % gegenüber 62,6 %. Bei Diabetes hat das Modell mit 10 Messwerten einen Fehler von 2827 gegenüber 5076 für den Mittelwert, also 44,3 % weniger. Eine Gerade nur mit BMI senkt den Fehler bloß um 19,3 %.
Es gibt auch einen schwächeren Vergleichswert: Raten im Verhältnis, also „gutartig“ mit einer Wahrscheinlichkeit gleich dem Anteil gutartiger Lernbiopsien. Im Mittel trifft das 53,2 %, weniger als „immer gutartig“. Deshalb nimmt man die häufigste Klasse als Vergleichswert: Zufallsraten ist leichter zu schlagen als echtes Verständnis.
Jak to policzono
- Biopsien: Breast Cancer Wisconsin (Diagnostic), UCI, Lizenz CC BY 4.0. 569 Biopsien (357 gutartig, 212 bösartig), 10 Messwerte der Zellkerne.
- Diabetes: der Datensatz Diabetes (Efron u. a., 2004), der mit scikit-learn ausgeliefert wird; die Autoren haben keine Lizenz angegeben. 442 Patienten, 10 Messwerte, Krankheitsverlauf ein Jahr später.
- Aufteilung 70/30, dieselbe wie
train_test_split(test_size=0.3, random_state=1)in scikit-learn; Biopsien geschichtet. Im Test sind 171 Biopsien und 133 Patienten. - Regel: ein Entscheidungsbaum mit einer Frage (CART). Regressionsmodell: kleinste Quadrate.
Warum es funktioniert
Die Genauigkeit von „immer die häufigste Klasse“ ist einfach der Anteil dieser Klasse im Test. Im vollen Test sind 107 von 171 Biopsien gutartig, daher 62,6 %. Lässt du 1 bösartige übrig, sind 107 von 108 gutartig, daher 99,1 %. Die Genauigkeit des Vergleichswerts sagt nichts über die Biopsien. Sie sagt nur, wie selten die andere Klasse ist.
Deshalb trennt die Genauigkeit bei einer seltenen Klasse kein gutes Modell mehr von einem nutzlosen. Mit 5 bösartigen im Test erreicht „immer gutartig“ 95,5 % und die Regel 91,1 %, obwohl nur die Regel alle 5 findet. Das ist keine glückliche Aufteilung: Bei 100 verschiedenen Aufteilungen schlägt „immer gutartig“ die Regel bei der Genauigkeit in 82. Was hilft, ist eine zweite Zahl neben der Genauigkeit: wie viele Fälle der seltenen Klasse das Modell wirklich gefunden hat.
In der Regression ist der Mittelwert die beste konstante Antwort: Keine andere einzelne Zahl hat auf den Lerndaten eine kleinere mittlere quadratische Abweichung. Jedes Modell mit Messwerten sollte ihn schlagen, und hier tut es das immer. Bei 100 Aufteilungen haben die Gerade mit BMI und das Modell mit 10 Messwerten jedes Mal einen kleineren Fehler als der Mittelwert, im Mittel 33,7 % und 48,5 % weniger.
Häufiger Fehler
Richtig oder falsch: „90 % Genauigkeit sind viel“. Falsch, genauer: Die Zahl allein sagt das nicht. Wenn 1 von 100 Menschen krank ist, hat der Test „immer gesund“ 99 % Genauigkeit und findet niemanden. Ein Modell mit 90 % wäre dann bei der Genauigkeit schlechter als nichts und könnte trotzdem sehr wertvoll sein, wenn es die Kranken findet. Gib immer den Vergleichswert neben dem Ergebnis an und prüfe, wie viele Fälle der seltenen Klasse das Modell gefunden hat.
Wo der Vergleich hinkt: Der Vergleichswert ist eine Untergrenze, kein Ziel. Ihn um Haaresbreite zu schlagen, bedeutet meist nichts, weil eine andere Aufteilung der Daten das Ergebnis umdrehen kann.
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
- Der Vergleichswert ist das Ergebnis ohne Lernen: die häufigste Klasse in der Klassifikation, der Mittelwert in der Regression.
- Ein Modell vergleichst du mit dem Vergleichswert auf denselben Testdaten, nicht mit null.
- Ist eine Klasse selten, trifft „immer die häufige Klasse“ oft und findet niemanden; gib auch an, wie viele seltene Fälle das Modell gefunden hat.
- Prüf den Vorsprung an vielen Aufteilungen, denn eine einzelne kann zufällig gut ausfallen.
Tiefer: Formel, Code, Praxis
Die Mathematik
Die Genauigkeit der Antwort „immer Klasse k“ ist der Anteil dieser Klasse im Test: Genauigkeit = n_k / n. Im vollen Test 107 / 171 ≈ 0,626, mit einer bösartigen Biopsie 107 / 108 ≈ 0,991.
Raten von „gutartig“ mit Wahrscheinlichkeit p (der Anteil gutartiger Lernbiopsien, 250 / 398 ≈ 0,628) trifft im Mittel p · q + (1 − p) · (1 − q), wobei q der Anteil gutartiger Biopsien im Test ist. Im vollen Test sind das etwa 0,532.
In der Regression hat eine konstante Antwort c den Fehler MSE(c) = (1/n) · Σ (yᵢ − c)². Die Ableitung −(2/n) · Σ (yᵢ − c) wird bei c = ȳ null, also liefert der Mittelwert den kleinsten Fehler aller Konstanten. Die relative Verbesserung ist 1 − MSE(Modell) / MSE(Mittelwert): für 10 Messwerte 1 − 2827 / 5076 ≈ 0,443.
Im Code (Python)
Derselbe Versuch in scikit-learn: der Vergleichswert und die Regel mit einer Schwelle auf den Biopsien bei 64, 5 und 1 bösartigen im Test, der Vergleich an 100 Aufteilungen und danach Mittelwert, Gerade mit BMI und das Modell mit 10 Messwerten bei Diabetes.
import numpy as np
from sklearn.datasets import load_breast_cancer, load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LinearRegression
X, y = load_breast_cancer(return_X_y=True)
X = X[:, :10] # die 10 „mean“-Messwerte wie im Labor; y: 0 = bösartig, 1 = gutartig
def biopsies(seed, keep_malignant):
tr, te = train_test_split(np.arange(len(y)), test_size=0.3, stratify=y, random_state=seed)
te = np.sort(te) # Testzeilen in Dateireihenfolge, wie im Labor
major = np.bincount(y[tr]).argmax() # Vergleichswert: die häufigste Klasse unter den Lernbiopsien
rule = DecisionTreeClassifier(max_depth=1, random_state=0).fit(X[tr], y[tr]) # ein Messwert, eine Schwelle
rows = np.r_[te[y[te] == 1], te[y[te] == 0][:keep_malignant]] # alle gutartigen + die ersten m bösartigen
pred = rule.predict(X[rows])
return (y[rows] == major).mean(), ((major == 0) & (y[rows] == 0)).sum(), (pred == y[rows]).mean(), ((pred == 0) & (y[rows] == 0)).sum()
for m in (64, 5, 1):
base, base_found, acc, found = biopsies(1, m)
print(f"malignant {m}: always benign {base:.3f} (finds {base_found}), rule {acc:.3f} (finds {found})")
wins = sum(biopsies(s, 5)[0] > biopsies(s, 5)[2] for s in range(100))
print(f"100 splits, 5 malignant: always benign beats the rule in {wins}")
Xd, yd = load_diabetes(return_X_y=True)
def diabetes(seed):
a, b, c, e = train_test_split(Xd, yd, test_size=0.3, random_state=seed)
mse = lambda p: ((e - p) ** 2).mean()
return mse(c.mean()), mse(LinearRegression().fit(a[:, [2]], c).predict(b[:, [2]])), mse(LinearRegression().fit(a, c).predict(b))
mean, bmi, full = diabetes(1)
print(f"diabetes: mean {mean:.0f}, BMI {bmi:.0f} ({1 - bmi / mean:.1%} lower), all 10 {full:.0f} ({1 - full / mean:.1%} lower)")
r = np.array([diabetes(s) for s in range(100)])
print(f"100 splits: BMI beats the mean in {(r[:, 1] < r[:, 0]).sum()}, all 10 in {(r[:, 2] < r[:, 0]).sum()}; error lower by {1 - r[:, 1].mean() / r[:, 0].mean():.1%} and {1 - r[:, 2].mean() / r[:, 0].mean():.1%} on average")
Ausgabe
malignant 64: always benign 0.626 (finds 0), rule 0.912 (finds 59)
malignant 5: always benign 0.955 (finds 0), rule 0.911 (finds 5)
malignant 1: always benign 0.991 (finds 0), rule 0.907 (finds 1)
100 splits, 5 malignant: always benign beats the rule in 82
diabetes: mean 5076, BMI 4096 (19.3% lower), all 10 2827 (44.3% lower)
100 splits: BMI beats the mean in 100, all 10 in 100; error lower by 33.7% and 48.5% on average
Bei Aufteilung 1 sind die Zahlen dieselben wie im Labor. Das Modell mit 10 Messwerten im Labor rechnet mit Daten, die auf zwei Nachkommastellen gerundet sind, daher kann sein Fehler um einen Bruchteil von diesem Code abweichen, gerundet sind es aber ebenfalls 2827.
Notebook herunterladen (.ipynb). Öffne es in Jupyter oder lade es in Google Colab hoch; fehlende Daten lädt es selbst.
Für die Praxis
- In scikit-learn liefern
DummyClassifier(strategy="most_frequent")undDummyRegressor(strategy="mean")den Vergleichswert. Berechne ihn auf derselben Aufteilung wie das Modell. - Bei unausgewogenen Klassen gib neben der Genauigkeit die Sensitivität der seltenen Klasse oder die balancierte Genauigkeit an; „immer die häufige Klasse“ hat eine balancierte Genauigkeit von 50 %.
- Ein stärkerer Vergleichswert ist oft eine einfache Regel mit einem Messwert oder das Modell, das die Firma schon nutzt. Ein neues Modell muss das beste davon schlagen.
- Ist der Vorsprung vor dem Vergleichswert klein, prüf ihn an vielen Aufteilungen oder mit Kreuzvalidierung, bevor du ihn verkündest.
War das hilfreich?
Danke! Das hilft uns, besser zu werden.
Mehr im Atlas
Einträge der Enzyklopädie zu den Ideen dieser Lektion: