Berechnung des McNemar-Tests zum Vergleich zweier Klassifikatoren für maschinelles Lernen

Tweet Teilen Teilen

Zuletzt aktualisiert am 8. August 2019

Die Wahl eines statistischen Hypothesentests ist ein herausforderndes offenes Problem bei der Interpretation von Ergebnissen des maschinellen Lernens.

In seinem viel zitierten Artikel von 1998 empfahl Thomas Dietterich den McNemar-Test in den Fällen, in denen es teuer oder unpraktisch ist, mehrere Kopien von Klassifikatormodellen zu trainieren.

Dies beschreibt die aktuelle Situation mit Deep-Learning-Modellen, die beide sehr groß sind und auf großen Datensätzen trainiert und ausgewertet werden.

In diesem Tutorial erfahren Sie, wie Sie den statistischen Hypothesentest von McNemar verwenden, um Klassifikatormodelle für maschinelles Lernen in einem einzelnen Testdatensatz zu vergleichen.

Nachdem Sie dieses Tutorial abgeschlossen haben, werden Sie wissen:

  • Die Empfehlung des McNemar-Tests für Modelle, die teuer zu trainieren sind, eignet sich für große Deep-Learning-Modelle.
  • Wie Vorhersageergebnisse aus zwei Klassifikatoren in eine Kontingenztabelle umgewandelt werden und wie die Tabelle zur Berechnung der Statistik im McNemar-Test verwendet wird.
  • So berechnen Sie den McNemar-Test in Python und interpretieren und melden das Ergebnis.

Starten Sie Ihr Projekt mit meinem neuen Buch Statistics for Machine Learning, einschließlich Schritt-für-Schritt-Anleitungen und den Python-Quellcodedateien für alle Beispiele.

Lass uns anfangen.

Berechnung des McNemar-Tests für zwei Klassifikatoren für maschinelles Lernen

Berechnung des McNemar-Tests für zwei Klassifikatoren für maschinelles Lernen
Foto von Mark Kao, einige Rechte vorbehalten.

Tutorial Übersicht

Dieses Tutorial ist in fünf Teile gegliedert; sie sind:

  1. Statistische Hypothesentests für Deep Learning
  2. Kontingenztabelle
  3. Mcnemars Teststatistik
  4. Interpretieren Sie den McNemar-Test für Klassifikatoren
  5. Mcnemars Test in Python

Benötigen Sie Hilfe mit Statistiken für maschinelles Lernen?

Nehmen Sie jetzt an meinem kostenlosen 7-tägigen E-Mail-Crashkurs teil (mit Beispielcode).

Klicken Sie hier, um sich anzumelden und eine kostenlose PDF-Ebook-Version des Kurses zu erhalten.

Laden Sie Ihren KOSTENLOSEN Minikurs herunter

Statistische Hypothesentests für Deep Learning

In seinem wichtigen und viel zitierten Artikel von 1998 über die Verwendung statistischer Hypothesentests zum Vergleich von Klassifikatoren mit dem Titel „Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithms“ empfiehlt Thomas Dietterich die Verwendung des McNemar-Tests.

Der Test wird insbesondere dann empfohlen, wenn die zu vergleichenden Algorithmen nur einmal ausgewertet werden können, z. im Gegensatz zu wiederholten Auswertungen über eine Resampling-Technik wie die k-fache Kreuzvalidierung.

Für Algorithmen, die nur einmal ausgeführt werden können, ist der McNemar-Test der einzige Test mit akzeptablem Typ-I-Fehler.

— Ungefähre statistische Tests zum Vergleich des überwachten Klassifizierungslernalgorithmus, 1998.

Dietterichs Studie befasste sich insbesondere mit der Auswertung verschiedener statistischer Hypothesentests, von denen einige auf den Ergebnissen von Resampling-Methoden basierten. Das Anliegen der Studie war ein geringer Typ-I-Fehler, dh der statistische Test meldete einen Effekt, wenn tatsächlich kein Effekt vorhanden war (falsch positiv).

Statistische Tests, die Modelle anhand eines einzigen Testsets vergleichen können, sind ein wichtiger Aspekt für modernes maschinelles Lernen, insbesondere im Bereich Deep Learning.

Deep-Learning-Modelle sind oft groß und arbeiten mit sehr großen Datensätzen. Zusammengenommen können diese Faktoren dazu führen, dass das Training eines Modells auf schneller moderner Hardware Tage oder sogar Wochen dauern kann.

Dies schließt die praktische Verwendung von Resampling-Methoden zum Vergleichen von Modellen aus und legt die Notwendigkeit nahe, einen Test zu verwenden, der mit den Ergebnissen der Auswertung trainierter Modelle an einem einzelnen Testdatensatz arbeiten kann.

Der McNemar-Test kann ein geeigneter Test für die Bewertung dieser großen und langsam zu trainierenden Deep-Learning-Modelle sein.

Kontingenztabelle

Der McNemar-Test arbeitet mit einer Kontingenztabelle.

Bevor wir in den Test eintauchen, nehmen wir uns einen Moment Zeit, um zu verstehen, wie die Kontingenztabelle für zwei Klassifikatoren berechnet wird.

Eine Kontingenztabelle ist eine Tabellierung oder Zählung von zwei kategorialen Variablen. Im Falle des McNemar-Tests interessieren wir uns für binäre Variablen richtig / falsch oder ja / Nein für eine Kontrolle und eine Behandlung oder zwei Fälle. Dies wird als 2 × 2-Kontingenztabelle bezeichnet.

Die Kontingenztabelle ist möglicherweise auf den ersten Blick nicht intuitiv. Machen wir es mit einem ausgearbeiteten Beispiel konkret.

Bedenken Sie, dass wir zwei ausgebildete Klassifikatoren haben. Jeder Klassifikator führt eine binäre Klassenvorhersage für jedes der 10 Beispiele in einem Testdatensatz durch. Die Vorhersagen werden ausgewertet und als richtig oder falsch bestimmt.

Wir können diese Ergebnisse dann wie folgt in einer Tabelle zusammenfassen:

1
2
3
4
5
6
7
8
9
10
11

Instanz, Klassifikator1 Korrekt,Klassifikator2 Korrekt
1jaja
2NeIn
3jaja
4NeIn
5JAJA
6JAJA
7JAJA
8NeIn
9JEIN
10JeiNja

Wir können sehen, dass Classifier1 6 hat genauigkeit von 60%, und Classifier2 bekam 5 richtige, oder 50% genauigkeit auf die test set.

Die Tabelle kann nun auf eine Kontingenztabelle reduziert werden.

Die Kontingenztabelle beruht auf der Tatsache, dass beide Klassifikatoren auf genau denselben Trainingsdaten trainiert und auf genau denselben Testdateninstanzen ausgewertet wurden.

Die Kontingenztabelle hat folgende Struktur:

1
2
3

Klassifikator2 korrekt,Klassifikator2 Falsch
Klassifikator1 Korrekt ????
Klassifikator1 Falsch ?? ??

Im Fall der ersten Zelle in der Tabelle müssen wir die Gesamtzahl der Testinstanzen summieren, die Classifier1 korrekt und Classifier2 korrekt erhalten hat. Zum Beispiel war die erste Instanz, die beide Klassifikatoren korrekt vorhergesagt haben, Instanznummer 5. Die Gesamtzahl der Instanzen, die beide Klassifikatoren korrekt vorhergesagt haben, betrug 4.

Eine weitere programmatischere Möglichkeit, darüber nachzudenken, besteht darin, jede Kombination von Ja / Nein in der obigen Ergebnistabelle zu summieren.

1
2
3

Klassifikator2 Richtig,Klassifikator2 falsch
Klassifikator1 Richtig Ja/Jaja/Nein
Klassifikator1 Falsch Nein/Ja Nein/Nein

Die in einer Kontingenztabelle organisierten Ergebnisse lauten wie folgt:

1
2
3

Klassifikator2 Korrekt,Klassifikator2 Falsch
Klassifikator1 Korrekt 42
Klassifikator1 Falsch 1 3

Mcnemars Teststatistik

Der McNemar-Test ist ein gepaarter nichtparametrischer oder verteilungsfreier statistischer Hypothesentest.

Es ist auch weniger intuitiv als einige andere statistische Hypothesentests.

Der McNemar-Test prüft, ob die Meinungsverschiedenheiten zwischen zwei Fällen übereinstimmen. Technisch wird dies als Homogenität der Kontingenztabelle (insbesondere als marginale Homogenität) bezeichnet. Daher ist der McNemar-Test eine Art Homogenitätstest für Kontingenztabellen.

Der Test wird in der Medizin häufig verwendet, um die Wirkung einer Behandlung mit einer Kontrolle zu vergleichen.

In Bezug auf den Vergleich zweier binärer Klassifizierungsalgorithmen wird im Test kommentiert, ob die beiden Modelle auf dieselbe Weise nicht übereinstimmen (oder nicht). Es kommt nicht darauf an, ob ein Modell mehr oder weniger genau oder fehleranfällig ist als ein anderes. Dies wird deutlich, wenn wir uns ansehen, wie die Statistik berechnet wird.

Die McNemar-Teststatistik wird berechnet als:

1
statistik = (Ja /Nein – Nein / Ja)^2 / (Ja /Nein + Nein /Ja)

Dabei ist Yes / No die Anzahl der Testinstanzen, die Classifier1 korrekt und Classifier2 falsch erhalten hat, und No / Yes ist die Anzahl der Testinstanzen, die Classifier1 falsch und Classifier2 korrekt erhalten hat.

Bei dieser Berechnung der Teststatistik wird davon ausgegangen, dass jede Zelle in der in der Berechnung verwendeten Kontingenztabelle mindestens 25 zählt. Die Teststatistik hat eine Chi-Quadrat-Verteilung mit 1 Freiheitsgrad.

Wir können sehen, dass nur zwei Elemente der Kontingenztabelle verwendet werden, insbesondere dass die Elemente Ja / Ja und Nein / Nein bei der Berechnung der Teststatistik nicht verwendet werden. Als solches können wir sehen, dass die Statistik über die verschiedenen korrekten oder falschen Vorhersagen zwischen den beiden Modellen berichtet, nicht über die Genauigkeit oder Fehlerraten. Dies ist wichtig zu verstehen, wenn Ansprüche über die Feststellung der Statistik zu machen.

Die Standardannahme oder Nullhypothese des Tests ist, dass die beiden Fälle in gleichem Maße nicht übereinstimmen. Wenn die Nullhypothese abgelehnt wird, deutet dies darauf hin, dass es Hinweise darauf gibt, dass die Fälle auf unterschiedliche Weise nicht übereinstimmen, dass die Meinungsverschiedenheiten verzerrt sind.

Bei Auswahl eines Signifikanzniveaus kann der durch den Test berechnete p-Wert wie folgt interpretiert werden:

  • p > alpha: H0 nicht ablehnen, kein Unterschied in der Meinungsverschiedenheit (z. B. Behandlung hatte keine Wirkung).
  • p <= alpha: ablehnen H0, signifikanter Unterschied in der Meinungsverschiedenheit (z. B. Behandlung hatte eine Wirkung).

Interpretieren des McNemar-Tests für Klassifikatoren

Es ist wichtig, sich einen Moment Zeit zu nehmen, um klar zu verstehen, wie das Ergebnis des Tests im Kontext von zwei Klassifikatormodellen für maschinelles Lernen interpretiert werden kann.

Die beiden bei der Berechnung des McNemar-Tests verwendeten Terme erfassen die Fehler beider Modelle. Insbesondere die Zellen No / Yes und Yes / No in der Kontingenztabelle. Der Test prüft, ob es einen signifikanten Unterschied zwischen den Zählungen in diesen beiden Zellen gibt. Das ist alles.

Wenn diese Zellen ähnliche Zählungen aufweisen, zeigt dies, dass beide Modelle Fehler im gleichen Verhältnis machen, nur in verschiedenen Instanzen des Testsatzes. In diesem Fall wäre das Ergebnis des Tests nicht signifikant und die Nullhypothese würde nicht abgelehnt.

Unter der Nullhypothese sollten die beiden Algorithmen die gleiche Fehlerrate haben …

— Ungefähre statistische Tests zum Vergleich des überwachten Klassifizierungslernalgorithmus, 1998.

Wenn diese Zellen Zählungen haben, die nicht ähnlich sind, zeigt dies, dass beide Modelle nicht nur unterschiedliche Fehler machen, sondern tatsächlich einen unterschiedlichen relativen Anteil an Fehlern im Testsatz aufweisen. In diesem Fall wäre das Ergebnis des Tests signifikant und wir würden die Nullhypothese ablehnen.

Wir können also die Nullhypothese zugunsten der Hypothese ablehnen, dass die beiden Algorithmen eine unterschiedliche Leistung aufweisen, wenn sie auf das jeweilige Training trainiert werden

— Ungefähre statistische Tests zum Vergleich des überwachten Klassifizierungslernalgorithmus, 1998.

Wir können dies wie folgt zusammenfassen:

  • Nullhypothese nicht ablehnen: Klassifikatoren haben einen ähnlichen Anteil an Fehlern im Testsatz.
  • Nullhypothese ablehnen: Klassifikatoren haben einen unterschiedlichen Anteil an Fehlern im Testsatz.

Nach Durchführung des Tests und Feststellung eines signifikanten Ergebnisses kann es sinnvoll sein, ein statistisches Effektmaß zu melden, um den Befund zu quantifizieren. Zum Beispiel wäre eine natürliche Wahl, die Odds Ratios oder die Kontingenztabelle selbst zu melden, obwohl beide einen anspruchsvollen Leser voraussetzen.

Es kann nützlich sein, den Fehlerunterschied zwischen den beiden Klassifikatoren im Testset zu melden. Seien Sie in diesem Fall vorsichtig mit Ihren Ansprüchen, da der signifikante Test nicht über den Unterschied im Fehler zwischen den Modellen berichtet, sondern nur über den relativen Unterschied im Fehleranteil zwischen den Modellen.

Schließlich hebt Dietterich bei der Verwendung des McNemar-Tests zwei wichtige Einschränkungen hervor, die berücksichtigt werden müssen. Sie sind:

Kein Maß für Trainingssatz oder Modellvariabilität.

Im Allgemeinen variiert das Modellverhalten basierend auf den spezifischen Trainingsdaten, die zum Anpassen des Modells verwendet werden.

Dies ist sowohl auf die Interaktion des Modells mit bestimmten Trainingsinstanzen als auch auf die Verwendung von Zufälligkeit während des Lernens zurückzuführen. Das Anpassen des Modells an mehrere verschiedene Trainingsdatensätze und das Auswerten der Fertigkeit, wie dies bei Resampling-Methoden der Fall ist, bietet eine Möglichkeit, die Varianz des Modells zu messen.

Der Test ist geeignet, wenn die Variabilitätsquellen gering sind.

Daher sollte der McNemar-Test nur angewendet werden, wenn wir glauben, dass diese Variabilitätsquellen gering sind.

— Ungefähre statistische Tests zum Vergleich des überwachten Klassifizierungslernalgorithmus, 1998.

Weniger Direkter Vergleich von Modellen

Die beiden Klassifikatoren werden an einem einzigen Testsatz ausgewertet, und es wird erwartet, dass der Testsatz kleiner ist als der Trainingssatz.

Dies unterscheidet sich von Hypothesentests, die Resampling-Methoden verwenden, da mehr, wenn nicht alle, des Datensatzes während der Auswertung als Testsatz zur Verfügung gestellt werden (was aus statistischer Sicht seine eigenen Probleme mit sich bringt).

Dies bietet weniger Gelegenheit, die Leistung der Modelle zu vergleichen. Es erfordert, dass der Testsatz angemessen repräsentativ für die Domäne ist, was häufig bedeutet, dass der Testdatensatz groß ist.

Mcnemars Test in Python

Der McNemar-Test kann in Python mit der Funktion mcnemar() Statsmodels implementiert werden.

Die Funktion nimmt die Kontingenztabelle als Argument und gibt die berechnete Teststatistik und den p-Wert zurück.

Je nach Datenmenge gibt es zwei Möglichkeiten, die Statistik zu verwenden.

Wenn es eine Zelle in der Tabelle gibt, die in der Berechnung der Teststatistik verwendet wird, die eine Zählung von weniger als 25 hat, dann wird eine modifizierte Version des Tests verwendet, die einen exakten p-Wert unter Verwendung einer Binomialverteilung berechnet. Dies ist die Standardverwendung des Tests:

1
stat, p = mcnemar (Tabelle, genau = Wahr)

Wenn alternativ alle Zellen, die bei der Berechnung der Teststatistik in der Kontingenztabelle verwendet werden, einen Wert von 25 oder mehr haben, kann die Standardberechnung des Tests verwendet werden.

1
stat, p = mcnemar (Tabelle, genau = Falsch, Korrektur = Wahr)

Wir können die mcnemars anhand der oben beschriebenen Beispielkontingenztabelle berechnen. Diese Kontingenztabelle enthält eine kleine Anzahl in beiden Unstimmigkeitszellen, und daher muss die genaue Methode verwendet werden.

Das vollständige Beispiel ist unten aufgeführt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# Beispiel für die Berechnung des Mcnemar-Tests
aus statsmodels.Stats.contingency_tables import mcnemar
# Kontingenztabelle definieren
Tabelle = ,
]
# Mcnemar-Test berechnen
Ergebnis = mcnemar(Tabelle, genau =Wahr)
# Fassen Sie den Befund zusammen
print(’statistic=%.3f, p-Wert=%.3f‘ % (Ergebnis.statistik, Ergebnis.pvalue))
# interpretiere den p-Wert
alpha = 0.05
if result.pvalue > alpha:
print(‚Gleiche Anteile von Fehlern (Fehler beim Ablehnen von H0)‘)
else:
print(‚Unterschiedliche Fehleranteile (‚ H0)‘)

Wenn Sie das Beispiel ausführen, werden die Statistik und der p-Wert für die Kontingenztabelle berechnet und die Ergebnisse gedruckt.

Wir können sehen, dass der Test stark bestätigt, dass es sehr wenig Unterschied in den Meinungsverschiedenheiten zwischen den beiden Fällen gibt. Die Nullhypothese nicht abgelehnt.

Da wir den Test verwenden, um Klassifikatoren zu vergleichen, stellen wir fest, dass es keinen statistisch signifikanten Unterschied in den Meinungsverschiedenheiten zwischen den beiden Modellen gibt.

1
2

statistik = 1.000, p-Wert = 1.000
Gleiche Fehleranteile (H0 nicht ablehnen)

Erweiterungen

In diesem Abschnitt werden einige Ideen zur Erweiterung des Tutorials aufgeführt, die Sie möglicherweise erkunden möchten.

  • Hier finden Sie eine Forschungsarbeit zum maschinellen Lernen, die den statistischen Hypothesentest von McNemar verwendet.
  • Aktualisieren Sie das Codebeispiel so, dass die Kontingenztabelle einen signifikanten Unterschied in der Meinungsverschiedenheit zwischen den beiden Fällen zeigt.
  • Implementieren Sie eine Funktion, die die korrekte Version des McNemar-Tests basierend auf der bereitgestellten Kontingenztabelle verwendet.

Wenn Sie eine dieser Erweiterungen erkunden, würde ich gerne wissen.

Weiterführende Literatur

Dieser Abschnitt enthält weitere Ressourcen zu diesem Thema, wenn Sie tiefer gehen möchten.

Papiere

  • Anmerkung zum Stichprobenfehler der Differenz zwischen korrelierten Anteilen oder Prozentsätzen, 1947.
  • Ungefähre statistische Tests zum Vergleich überwachter Klassifizierungslernalgorithmen, 1998.

API

  • Statsmodelle.Stats.contingency_tables.mcnemar() API

Artikel

  • Mcnemars Test auf Wikipedia
  • Typ I und Typ II Fehler auf Wikipedia
  • Kontingenztabelle auf wikipedia

Zusammenfassung

In diesem Tutorial haben Sie herausgefunden, wie Sie der statistische Hypothesentest von McNemar’s Test zum Vergleichen von Klassifikatormodellen für maschinelles Lernen mit einem einzelnen Testdatensatz.

Insbesondere haben Sie gelernt:

  • Die Empfehlung des McNemar-Tests für Modelle, die teuer zu trainieren sind, eignet sich für große Deep-Learning-Modelle.
  • Wie Vorhersageergebnisse aus zwei Klassifikatoren in eine Kontingenztabelle umgewandelt werden und wie die Tabelle zur Berechnung der Statistik im McNemar-Test verwendet wird.
  • So berechnen Sie den McNemar-Test in Python und interpretieren und melden das Ergebnis.

Haben Sie Fragen?
Stellen Sie Ihre Fragen in den Kommentaren unten und ich werde mein Bestes tun, um zu antworten.

Holen Sie sich einen Griff auf Statistiken für maschinelles Lernen!

Statistische Methoden für maschinelles Lernen

Entwicklung eines funktionierenden Verständnisses der Statistik

…durch das Schreiben von Codezeilen in Python

Entdecken Sie, wie in meinem neuen Ebook:
Statistische Methoden für maschinelles Lernen

Es bietet Tutorials zum Selbststudium zu Themen wie:
Hypothesentests, Korrelation, nichtparametrische Statistiken, Resampling und vieles mehr…

Entdecken Sie, wie Sie Daten in Wissen umwandeln können

Überspringen Sie die Akademiker. Nur Ergebnisse.

Sehen, was drin ist

Tweet Teilen Teilen

You might also like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.