ML Atlas

Machine Learning von Grund auf · Lektion 5.6 · 31 von 33 fertigen Lektionen · 12 Min.

Welches Modell wann?

Kurz gesagt

Fünf Modelle, fünf Datensätze, 20 Aufteilungen. Kein Modell liegt überall vorn, und 0,3 Punkte können ein Remis sein: 10 gegen 7.

Aufwärmen Zwei Fragen aus früheren Lektionen. Eine Minute, und sie blockiert die Lektion nicht.
Aus Lektion 5.5: Support-Vector-Maschinen und Kerne Richtig oder falsch: „Nimm immer den RBF-Kern, er ist der flexibelste.“

Antwort anzeigen

Richtige Antwort: Falsch: Auf den Kronblättern trifft linear gleich gut, RBF braucht mehr Tuning

Auf 20 Aufteilungen treffen beide im Mittel 28,5 von 30. Ein großes γ führt zu Überanpassung: Bei den Weinen mit γ = 1000 Training 89,6 %, Validierung 69,6 %.

Aus Lektion 5.4: Naive Bayes: falsche Annahme, gute Entscheidungen Was multipliziert Naive Bayes, um zu beurteilen, ob eine Blüte Versicolor ist?

Antwort anzeigen

Richtige Antwort: Den Prior von Versicolor und die Dichte jeder Messung bei Versicolor

Prior × Dichte der Länge × Dichte der Breite, jede nur aus Mittelwert und Varianz dieser Messung bei Versicolor berechnet. Die Art mit dem größten Produkt gewinnt.

Du kennst jetzt fünf Modellfamilien: logistische Regression, k nächste Nachbarn (kNN), den Random Forest, Gradient Boosting und die SVM mit RBF-Kern. Welches nimmst du? Die ehrliche Antwort: das, das in der Validierung auf deinen Daten am besten abschneidet. Diese Lektion prüft, wie stark das Ergebnis von den Daten abhängt und wie man einen echten Unterschied von Rauschen unterscheidet. Wir bauen einen Modell-Zoo: jedes der fünf Modelle mit seinen Standardeinstellungen, ohne Tuning, auf fünf Datensätzen, und auf jedem Datensatz mit denselben 20 Aufteilungen. Jedes Mal gehen 75 % der Zeilen ins Lernen und 25 % in die Validierung.

Erst vorhersagen, dann prüfen Wir vergleichen fünf Modelle mit Standardeinstellungen auf fünf Datensätzen: Iris, Weine, Brusttumoren, Pinguine und Ziffern. Jedes Modell bekommt dieselben 20 Aufteilungen. Liegt ein einziges Modell auf allen fünf Datensätzen vorn?
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: Nein: Die SVM schlägt die Regression bei den Ziffern, verliert bei den Pinguinen

Nein. Bei den Ziffern ist die SVM auf 17 von 20 Aufteilungen öfter richtig als die logistische Regression, die Regression öfter als die SVM auf 3. Bei den Pinguinen ist die Regression auf 9 Aufteilungen öfter richtig, die SVM auf keiner, und 11 sind gleichauf. Den besten Mittelwert haben auf verschiedenen Datensätzen auch verschiedene Modelle, aber auf vier Datensätzen ist der Spitzenreiter höchstens auf 10 von 20 Aufteilungen öfter richtig als der Zweite. Wer dort vorn liegt, hängt weitgehend von den Aufteilungen ab.

Probier es aus

  • Zum Start: Ziffern, kNN gegen die SVM. Der Abstand der Mittelwerte ist kleiner als die Streuung von kNN zwischen den Aufteilungen. Auf wie vielen der 20 Aufteilungen ist die SVM öfter richtig?
  • Geh zu den Brusttumoren und vergleiche die SVM mit Gradient Boosting. Wie groß ist der Abstand der Mittelwerte, und wie teilen sich die Aufteilungen auf?
  • Finde ein Modellpaar, bei dem eines bei den Ziffern vorn liegt und das andere bei den Pinguinen.
  • Prüfe auf jedem Datensatz, wie weit die schlechteste und die beste Aufteilung eines Modells auseinanderliegen.

Wenn du es im Lab geprüft hast, geben wir dem, was du siehst, einen Namen.

Die Idee in einfachen Worten

Dasselbe Modell bekommt auf demselben Datensatz bei verschiedenen Aufteilungen verschiedene Ergebnisse, weil in die Validierung mal leichtere, mal schwerere Beispiele geraten. Bei den Brusttumoren erreicht die logistische Regression auf einzelnen Aufteilungen 89,4 % bis 96,5 %. Unterschiede zwischen Modellen sind oft viel kleiner. Eine Aufteilung reicht also nicht, um sie zu ordnen.

Besser vergleicht man Modelle paarweise: Auf derselben Aufteilung haben es beide gleich leicht oder gleich schwer. Wir zählen, auf wie vielen Aufteilungen jedes öfter richtig ist. Bei den Tumoren erreicht die SVM im Mittel 94,2 % und Gradient Boosting 93,9 %. Die SVM ist auf 10 Aufteilungen öfter richtig, Boosting auf 7, und 3 sind gleichauf. So ein Abstand von 0,3 Punkten ist ein Remis, kein Sieg. Es geht auch umgekehrt. Bei den Ziffern liegt die SVM nur 0,7 Punkte vor kNN, während das Ergebnis von kNN zwischen den Aufteilungen von 96,0 % bis 99,1 % springt. Trotzdem ist die SVM auf 16 von 20 Aufteilungen öfter richtig, kNN auf 2. Es zählt, ob sich der Vorsprung wiederholt, nicht, wie groß der Mittelwert ist.

Wann wiederholt sich ein Vorsprung? Wären beide Modelle gleich gut, wäre jede Aufteilung ohne Gleichstand wie ein Münzwurf. Eine Münze liefert 16 zu 2 seltener als in einer von 100 Serien, 10 zu 7 dagegen oft. Das Lab nennt einen Vorsprung wiederholt, wenn so ein Ergebnis seltener als in einer von 100 Serien vorkäme. Das ist der Vorzeichentest. Gleichstände belasten ihn nicht: Sie werden einfach nicht gezählt.

Am wichtigsten: Die Reihenfolge hängt von den Daten ab. Bei den Ziffern ist die SVM auf 17 von 20 Aufteilungen öfter richtig als die logistische Regression, die Regression öfter als die SVM auf 3. Bei den Pinguinen ist es umgekehrt: Die Regression ist auf 9 Aufteilungen öfter richtig, die SVM auf keiner, und 11 sind gleichauf. Beide Vorsprünge bestehen den Vorzeichentest. Bei den Ziffern ist die SVM auf mindestens 16 Aufteilungen öfter richtig als jedes der anderen Modelle.

All das gilt mit Standardeinstellungen, ohne Tuning, auf kleinen Datensätzen (150 bis 1797 Zeilen) mit nur numerischen Merkmalen. Es ist kein Urteil über die Modelle im Allgemeinen. Auf größeren Tabellen, mit Merkmalen verschiedener Art und nach dem Tuning, kann die Reihenfolge anders aussehen (Boosting behandelt Lektion 5.3). Der Schluss ist ein anderer: Eine Rangliste übernimmt man nicht aus fremden Tabellen, man prüft sie auf den eigenen Daten.

Auch den Spitzenreiter überschätzt man leicht. Nimm das Modell mit dem besten Mittelwert auf den Aufteilungen 1–10 und prüfe, wer auf den Aufteilungen 11–20 vorn liegt. Bei den Iris, den Weinen und den Pinguinen ist es dort schon ein anderes Modell. Liegen mehrere Modelle nah beieinander, entscheidet zu einem großen Teil das Rauschen, welches vorn landet, wie bei der Wahl der Einstellungen in Lektion 3.5.

Jak to policzono
  • Daten: Iris (Fisher, 1936), Wine (Aeberhard und Forina, 1992), Breast Cancer Wisconsin (Wolberg et al., 1993; 10 „mean“-Messungen) und Digits (Alpaydin und Kaynak, 1998), alle von UCI unter der Lizenz CC BY 4.0; Palmer Penguins (Gorman et al., 2014; Horst et al., 2020; Lizenz CC0 1.0), 342 Pinguine mit 4 Körpermaßen.
  • Modelle: Standardeinstellungen von scikit-learn ohne Tuning. Logistische Regression (C = 1), kNN (k = 5), Random Forest (100 Bäume), Gradient Boosting (100 Bäume, Lernrate 0,1, Tiefe 3), SVM mit RBF-Kern (C = 1). Regression, kNN und SVM bekommen Merkmale, die auf jeder Aufteilung nur mit dem Lernteil skaliert werden.
  • Übereinstimmung mit scikit-learn auf denselben 20 Aufteilungen: Die SVM trifft auf jeder Aufteilung dieselben Zeilen, Regression und kNN weichen höchstens um 3 Zeilen pro Aufteilung ab. Die Bäume im Lab zerlegen jedes Merkmal in höchstens 32 Intervalle, scikit-learn baut exakte Bäume, daher sind die Unterschiede hier größer: Bei den Tumoren hat der Forest auf 3 von 20 Aufteilungen dasselbe Ergebnis, Boosting auf 4. Mit exakten Bäumen hat bei den Tumoren Boosting den besten Mittelwert, nicht die SVM. Die Schlüsse über Paare in dieser Lektion fallen in beiden Versionen gleich aus.
  • Aufteilungen: 20 geschichtete Aufteilungen, 75 % zum Lernen und 25 % zur Validierung, für jedes Modell dieselben. Einen Test gibt es hier nicht. Alle 500 Ergebnisse hat der Code des Labs berechnet, und der Test rechnet sie neu nach. Der Vorzeichentest ist zweiseitig, auf den Aufteilungen ohne Gleichstand, mit einer Schwelle von 1 %.

Warum es funktioniert

Das „No-Free-Lunch“-Theorem (Wolpert, 1996) besagt, dass gemittelt über alle möglichen Aufgaben kein Lernalgorithmus besser ist als ein anderer. Ein Modell gewinnt nur, wenn seine Annahmen zu den konkreten Daten passen: gerade Grenzen zur logistischen Regression, ähnliche Nachbarn zu kNN, Schwellen auf einzelnen Merkmalen zu Bäumen. Deshalb ist die Wahl eines Modells eine Messung, kein Tabellenwissen.

Der paarweise Vergleich funktioniert, weil die Schwierigkeit einer Aufteilung beide Modelle zugleich trifft und sich in der Differenz aufhebt. Ein Vorbehalt: 20 Aufteilungen desselben Datensatzes teilen sich Zeilen, also sind es keine 20 unabhängigen Münzwürfe. Übliche statistische Tests auf solchen Ergebnissen sind oft zu selbstsicher (Dietterich, 1998). Darum ist die Schwelle streng, und ein wiederholter Vorsprung ist ein guter Hinweis, kein Beweis.

Ein Modell kann auch eigenen Zufall haben. Der Forest lost für jeden Baum Zeilen und Merkmale aus. Bei den Ziffern ist der Forest auf denselben 20 Aufteilungen mit dem Zufallsstartwert 1 auf 15 Aufteilungen öfter richtig als die Regression und auf 5 seltener, mit dem Startwert 4 auf 11 öfter und auf 9 seltener. Bei keinem Startwert von 1 bis 5 besteht dieser Vorsprung den Vorzeichentest. Darum stützen sich die Beispiele dieser Lektion auf Modelle ohne Zufall: Regression, kNN und SVM.

Der Code unten tut dasselbe in scikit-learn, auf anderen Aufteilungen und mit exakten Bäumen. Die Spitze ändert sich: Dort hat die SVM auf vier Datensätzen den besten Mittelwert und die logistische Regression bei den Pinguinen. Die Richtung der Paare dieser Lektion bleibt, aber nicht jeder Vorsprung besteht dort den Vorzeichentest. Ein weiterer Grund, Unterschiede im Rauschen nicht Sieg zu nennen.

Ein häufiger Fehler

Richtig oder falsch: „Ein Modell mit einem um 0,3 Punkte höheren Mittelwert ist besser.“ Falsch. Bei den Tumoren erreicht die SVM 94,2 % und Gradient Boosting 93,9 %, aber die SVM ist nur auf 10 von 20 Aufteilungen öfter richtig, Boosting auf 7. Im Code unten teilt sich dasselbe Paar die Aufteilungen 10 zu 7, und der Abstand der Mittelwerte ist 0,002.

Ein zweiter häufiger Fehler: „Nimm immer Boosting, zum Beispiel XGBoost.“ In diesem Zoo ist mit Standardeinstellungen bei den Weinen die logistische Regression auf 15 von 20 Aufteilungen öfter richtig als Gradient Boosting, Boosting öfter als sie auf 2. Das ist kein Urteil gegen Boosting, nur gegen eine Wahl ohne Validierung.

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 reicht das Ergebnis einer Aufteilung nicht, um ein Modell zu wählen?
Antwort anzeigen

Richtige Antwort: Weil die Aufteilung allein das Ergebnis um ein paar Punkte verschiebt

Bei den Tumoren erreicht die logistische Regression auf einzelnen Aufteilungen 89,4 % bis 96,5 %. Unterschiede zwischen Modellen sind oft viel kleiner.

2. Bei den Ziffern ist die SVM auf 17 von 20 Aufteilungen öfter richtig als die logistische Regression, bei den Pinguinen auf keiner (die Regression auf 9, gleichauf auf 11). Was folgt daraus?
Antwort anzeigen

Richtige Antwort: Welches besser ist, hängt von den Daten ab, also prüfst du es auf deinen

Die Reihenfolge kehrt sich zwischen den Datensätzen um. Darum wählt man ein Modell per Validierung auf den eigenen Daten, nicht nach fremden Ranglisten.

3. Richtig oder falsch: „Ein Modell mit einem um 0,3 Punkte höheren Mittelwert ist besser.“
Antwort anzeigen

Richtige Antwort: Falsch: Bei so einem Abstand teilen sich die Aufteilungen fast gleich auf

Bei den Tumoren erreicht die SVM 94,2 % und Gradient Boosting 93,9 %. Die SVM ist auf 10 Aufteilungen öfter richtig, Boosting auf 7, und 3 sind gleichauf.

Das Wichtigste

  • Kein Modell liegt überall vorn: Die SVM schlägt die logistische Regression bei den Ziffern (17 Aufteilungen zu 3) und verliert bei den Pinguinen (9 zu 0).
  • Die Aufteilung allein verschiebt das Ergebnis um ein paar Punkte, daher kann ein Abstand der Mittelwerte von 0,3 Punkten ein Remis sein (10 Aufteilungen zu 7).
  • Vergleiche Modelle auf denselben Aufteilungen und zähle, auf wie vielen jedes gewinnt; auch ein kleiner, aber wiederholter Vorsprung zählt (die SVM vor kNN bei den Ziffern: 0,7 Punkte, 16 zu 2).
  • Wähle per Validierung auf deinen Daten, nimm bei einem Remis das einfachere Modell und sieh dir den Test einmal an, am Ende.

Tiefer: Formel, Code, Praxis

Die Mathematik

Für die Aufteilungen k = 1, …, K ist die Differenz in einem Paar d_k = acc_A(k) − acc_B(k); wir betrachten den Mittelwert d̄ = (1/K) · Σ_k d_k und die Zahl der Aufteilungen mit d_k > 0.

Varianz der Differenz: Var(A − B) = Var(A) + Var(B) − 2 · Cov(A, B). Ist eine Aufteilung für beide Modelle zugleich schwer, ist die Kovarianz groß, also schwankt die Differenz viel weniger als jedes Ergebnis für sich.

Vorzeichentest: Modell A gewinnt auf w Aufteilungen, B auf l, Gleichstände zählen nicht. Bei gleich guten Modellen folgt die Zahl der Siege von A Bin(w + l, ½), und p = min(1, 2 · P(X ≤ min(w, l))). Für 16 zu 2 ergibt das p ≈ 0,001.

Im Code (Python)

Dasselbe Experiment in scikit-learn: fünf Modelle mit Standardeinstellungen auf fünf Datensätzen und 20 Aufteilungen, dann vier Paare Aufteilung für Aufteilung, mit dem Vorzeichentest.

import pandas as pd
from scipy.stats import binomtest
from sklearn.datasets import load_iris, load_wine, load_breast_cancer, load_digits
from sklearn.model_selection import StratifiedShuffleSplit, cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.svm import SVC

body = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
peng = pd.read_csv("data/raw/penguins.csv").dropna(subset=body)
cancer = load_breast_cancer()
data = {"iris": load_iris(return_X_y=True), "wine": load_wine(return_X_y=True), "cancer": (cancer.data[:, :10], cancer.target),
        "penguins": (peng[body].values, peng["species"].values), "digits": load_digits(return_X_y=True)}
# der Skalierer steckt in jeder Pipeline, also lernt er seine Mittelwerte nur aus dem Lernteil jeder Aufteilung
models = {"logistic": make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000)),
          "kNN": make_pipeline(StandardScaler(), KNeighborsClassifier()),
          "forest": RandomForestClassifier(random_state=0),
          "boosting": GradientBoostingClassifier(random_state=0),
          "SVM": make_pipeline(StandardScaler(), SVC())}
splits = StratifiedShuffleSplit(n_splits=20, test_size=0.25, random_state=0)
acc = {}
for name, (X, y) in data.items():
    acc[name] = {m: cross_val_score(model, X, y, cv=splits) for m, model in models.items()}
    row = " | ".join(f"{m} {a.mean():.3f}" for m, a in acc[name].items())
    best = max(acc[name], key=lambda m: acc[name][m].mean())
    print(f"{name:8s} {row}  best: {best}")
# Vorzeichentest: nur die Aufteilungen ohne Gleichstand; bei gleich guten Modellen wäre jede ein Münzwurf
for name, a, b in [("digits", "SVM", "kNN"), ("digits", "SVM", "logistic"), ("penguins", "logistic", "SVM"), ("cancer", "SVM", "boosting")]:
    d = acc[name][a] - acc[name][b]
    win, lose = (d > 0).sum(), (d < 0).sum()
    print(f"{name}: {a} beats {b} in {win} of 20 splits, loses in {lose}; sign test p = {binomtest(win, win + lose).pvalue:.3f}; mean difference {d.mean():.3f}")

Ausgabe

iris     logistic 0.955 | kNN 0.945 | forest 0.949 | boosting 0.947 | SVM 0.959  best: SVM
wine     logistic 0.982 | kNN 0.964 | forest 0.981 | boosting 0.946 | SVM 0.986  best: SVM
cancer   logistic 0.931 | kNN 0.938 | forest 0.930 | boosting 0.939 | SVM 0.942  best: SVM
penguins logistic 0.988 | kNN 0.985 | forest 0.978 | boosting 0.973 | SVM 0.983  best: logistic
digits   logistic 0.969 | kNN 0.974 | forest 0.975 | boosting 0.964 | SVM 0.979  best: SVM
digits: SVM beats kNN in 14 of 20 splits, loses in 4; sign test p = 0.031; mean difference 0.006
digits: SVM beats logistic in 17 of 20 splits, loses in 3; sign test p = 0.003; mean difference 0.010
penguins: logistic beats SVM in 7 of 20 splits, loses in 1; sign test p = 0.070; mean difference 0.005
cancer: SVM beats boosting in 10 of 20 splits, loses in 7; sign test p = 0.629; mean difference 0.002

Aufteilungen und Baum-Implementierung sind andere als im Lab, also auch die Spitze: Die SVM hat auf vier Datensätzen den besten Mittelwert, die logistische Regression bei den Pinguinen. Auch hier gewinnt kein Modell überall. Die Richtung der Paare aus der Lektion bleibt: Bei den Ziffern schlägt die SVM die Regression auf 17 von 20 Aufteilungen und kNN auf 14, bei den Pinguinen schlägt die Regression die SVM auf 7 und verliert auf 1. Den Vorzeichentest besteht hier nur das erste Paar (p = 0,003). Die anderen beiden haben dieselbe Richtung, aber auf diesen Aufteilungen zu wenige Siege, also lohnt es sich, einen Schluss aus einem Satz Aufteilungen an einem zweiten zu prüfen. SVM und Boosting teilen sich bei den Tumoren wieder die Aufteilungen 10 zu 7.

Für die Praxis
  • Beginne mit einer Baseline (Lektion 1.3), dann nimm einige Modelle verschiedener Art: linear, Nachbarn, Bäume, ein Kern. Bewerte alle auf denselben Aufteilungen (cross_validate mit einem einzigen cv) und mit der Vorverarbeitung in einer Pipeline (Lektion 4.6).
  • Schau auf die Streuung und auf die Paare, nicht nur auf die Mittelwerte. Prüfe einen Vorsprung mit dem Vorzeichentest (binomtest aus SciPy) auf den Aufteilungen ohne Gleichstand. Bei einem Remis nimm das Modell, das billiger zu pflegen oder leichter zu erklären ist.
  • Tune erst die Finalisten (Lektion 3.5). Standardeinstellungen können weit vom Besten entfernt sein, besonders bei Boosting und SVMs.
  • Behandle Ranglisten „welches Modell wann“ aus dem Internet als Kandidatenliste für die Validierung, nicht als Urteil. Heb den Test fürs Ende auf und sieh ihn dir einmal an.

Mehr im Atlas

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