laatst bijgewerkt op 8 augustus 2019
de keuze voor een statistische hypothese test is een uitdagend open probleem voor het interpreteren van machine learning resultaten.In zijn veel geciteerde artikel uit 1998 adviseerde Thomas Dietterich de McNemar-test in die gevallen waarin het duur of onpraktisch is om meerdere exemplaren van classificatiemodellen te trainen.
dit beschrijft de huidige situatie met deep learning-modellen die zowel zeer groot zijn als worden opgeleid en geëvalueerd op grote datasets, waarbij vaak dagen of weken nodig zijn om een enkel model te trainen.
In deze tutorial zult u ontdekken hoe u de McNemar ‘ s statistical hypothesis test kunt gebruiken om automatic learning classifier modellen te vergelijken op een enkele test dataset.
na het voltooien van deze tutorial, zult u weten:
- de aanbeveling van de McNemar ‘ s test voor modellen die duur zijn om te trainen, die past bij grote deep learning modellen.
- hoe de voorspellingsresultaten van twee classifiers worden omgezet in een contingentietabel en hoe de tabel wordt gebruikt om de statistiek in de McNemar-test te berekenen.
- hoe de test van McNemar in Python te berekenen en het resultaat te interpreteren en te rapporteren.
start uw project met mijn nieuwe boek statistieken voor Machine Learning, inclusief stap-voor-stap tutorials en de Python broncode bestanden voor alle voorbeelden.
laten we beginnen.
Hoe bereken je McNemar’ s Test voor twee Machine Learning Classifiers
foto door Mark Kao, enkele rechten voorbehouden.
- Tutorial Overview
- hulp nodig met statistieken voor Machine Learning?
- Statistical Hypothesis Tests for Deep Learning
- Contingency Table
- McNemar ’s Test Statistiek
- interpreteer de McNemar-Test voor Classifiers
- geen maat voor de variabiliteit van Trainingssets of modellen.
- minder directe vergelijking van modellen
- McNemar ’s Test in Python
- Uitbreidingen
- verder lezen
- papier
- API
- Artikelen
- Samenvatting
- Krijg grip op statistieken voor Machine Learning!
- Ontwikkel een goed begrip van statistieken
- ontdek hoe gegevens in kennis kunnen worden omgezet
Tutorial Overview
deze tutorial bestaat uit vijf delen; :
- Statistical Hypothesis Tests for Deep Learning
- Contingency Table
- McNemar ’s Test Statistic
- interpreteer de McNemar’ s Test voor Classifiers
- McNemar ‘ s Test in Python
hulp nodig met statistieken voor Machine Learning?
neem nu mijn gratis 7-daagse e-mail spoedcursus (met voorbeeldcode).
Klik om u aan te melden en ontvang ook een gratis PDF Ebook versie van de cursus.
Download uw gratis minicursus
Statistical Hypothesis Tests for Deep Learning
in zijn belangrijke en veel geciteerde paper uit 1998 over het gebruik van statistische hypothesetests om classifiers te vergelijken, getiteld “Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithms”, beveelt Thomas Dietterich het gebruik van de McNemar ‘ s test aan.
specifiek wordt de test aanbevolen in die gevallen waarin de algoritmen die worden vergeleken slechts eenmaal kunnen worden geëvalueerd, bv. op één testset, in tegenstelling tot herhaalde evaluaties via een resampling-techniek, zoals k-voudige kruisvalidatie.
voor algoritmen die slechts één keer kunnen worden uitgevoerd, is McNemar ‘ s test de enige test met een aanvaardbare type I-fout.
— Approximate Statistical Tests for Comparing surveilled Classification Learning Algorithm, 1998.
het onderzoek van Dietterich had met name betrekking op de evaluatie van verschillende statistische hypothesetests, waarvan sommige gebaseerd waren op de resultaten van resamplingmethoden. De zorg van de studie was een lage type I-fout, dat wil zeggen de statistische test die een effect rapporteerde terwijl er in feite geen effect aanwezig was (vals-positief).
statistische tests die modellen kunnen vergelijken op basis van een enkele testset zijn een belangrijke overweging voor modern machine learning, met name op het gebied van deep learning.Deep learning modellen zijn vaak groot en werken op zeer grote datasets. Samen kunnen deze factoren betekenen dat de training van een model dagen of zelfs weken kan duren op snelle moderne hardware.
dit sluit het praktische gebruik uit van resamplingmethoden om modellen te vergelijken en suggereert de noodzaak om een test te gebruiken die kan werken op basis van de resultaten van de evaluatie van getrainde modellen op een enkele testgegevensreeks.
de McNemar-test kan een geschikte test zijn voor het evalueren van deze grote en langzaam te trainen deep learning-modellen.
Contingency Table
de test van McNemar werkt op basis van een contingency table.
voordat we in de test duiken, nemen we even de tijd om te begrijpen hoe de contingentietabel voor twee classifiers wordt berekend.
een contingency table is een tabel of een telling van twee categorische variabelen. In het geval van de McNemar ‘ s test, zijn we geïnteresseerd in binaire variabelen correct/incorrect of ja/nee voor een controle en een behandeling of twee gevallen. Dit wordt een 2×2 contingency table genoemd.
de contingententabel is op het eerste gezicht misschien niet intuïtief. Laten we het concreet maken met een bewerkt voorbeeld.
bedenk dat we twee getrainde classifiers hebben. Elke classifier maakt binaire klasse voorspelling voor elk van de 10 voorbeelden in een test dataset. De voorspellingen worden geëvalueerd en vastgesteld correct of onjuist te zijn.
we kunnen deze resultaten dan samenvatten in een tabel, als volgt:
1
2
3
4
5
6
7
8
9
10
11
|
Bijvoorbeeld Classifier1 Juiste,Classifier2 Juiste
1YesNo
2NoNo
3NoYes
4NoNo
5YesYes
6YesYes
7YesYes
8NoNo
9YesNo
10YesYes
|
We kunnen zien dat Classifier1 kreeg 6 correct, of een nauwkeurigheid van 60%, en Classifier2 kreeg 5 correct, of 50% nauwkeurigheid op de testset.
de tabel kan nu worden teruggebracht tot een contingentietabel.
de contingententabel berust op het feit dat beide classificateurs werden opgeleid op exact dezelfde trainingsgegevens en geëvalueerd op exact dezelfde testgegevens.
de tabel voor onvoorziene omstandigheden heeft de volgende structuur:
1
2
3
|
Classifier2 Correct, Classifier2 Incorrect
Classifier1 Correct ????
Classificatie1 Onjuist ?? ??
|
In het geval van de eerste cel in de tabel moeten we het totale aantal testinstanties optellen dat Classifier1 correct werd en Classifier2 correct. Bijvoorbeeld, de eerste instantie die beide classifiers correct voorspeld was instantie nummer 5. Het totale aantal gevallen dat beide classifiers correct voorspelden was 4.
een andere meer programmatische manier om hier over na te denken is door elke combinatie van ja/nee op te tellen in de resultaattabel hierboven.
1
2
3
|
Classifier2 Juiste,Classifier2 Onjuiste
Classifier1 Corrigeren Ja/YesYes/Nee
Classifier1 Onjuiste Nee/Ja Nee/Nee
|
De resultaten zijn ingedeeld in een contingency tabel zijn als volgt:
1
2
3
|
Classifier2 Juiste,Classifier2 Onjuiste
Classifier1 Juiste 42
Classifier1 Onjuist 1 3
|
McNemar ’s Test Statistiek
McNemar’ s test is een gekoppeld nonparametric of distributie-gratis statistische hypothese te testen.
het is ook minder intuïtief dan sommige andere statistische hypothesetests.
de test van McNemar controleert of de meningsverschillen tussen twee zaken overeenkomen. Technisch wordt dit aangeduid als de homogeniteit van de contingentietabel (in het bijzonder de marginale homogeniteit). Daarom is de McNemar-test een soort homogeniteitstest voor contingentietabellen.
de test wordt veel gebruikt in de geneeskunde om het effect van een behandeling te vergelijken met een controlegroep.
in termen van het vergelijken van twee binaire classificatiealgoritmen, is de test commentaar op de vraag of de twee modellen verschillen op dezelfde manier (of niet). Het geeft geen commentaar op de vraag of het ene model meer of minder nauwkeurig of foutgevoelig is dan het andere. Dit is duidelijk als we kijken naar hoe de statistiek wordt berekend.
de teststatistiek van McNemar wordt berekend als:
1
|
statistiek = (Ja/Nee – – Nee/Ja)^2 / (Ja/Nee + Nee/Ja)
|
Waar Ja/Nee is de graaf van test-exemplaren die Classifier1 kreeg juiste en Classifier2 kreeg onjuist, en Nee/Ja is de graaf van test-exemplaren die Classifier1 kreeg onjuiste en Classifier2 correct gekregen.
bij deze berekening van de teststatistiek wordt ervan uitgegaan dat elke cel in de voor de berekening gebruikte contingentietabel een telling van ten minste 25 heeft. De teststatistiek heeft een Chi-kwadraat verdeling met 1 graad van vrijheid.
we kunnen zien dat slechts twee elementen van de contingentietabel worden gebruikt, met name dat de ja/ja-en nee/nee-elementen niet worden gebruikt bij de berekening van de teststatistiek. Als zodanig kunnen we zien dat de statistiek rapporteert over de verschillende correcte of onjuiste voorspellingen tussen de twee modellen, niet de nauwkeurigheid of foutenpercentages. Dit is belangrijk om te begrijpen bij het maken van claims over het vinden van de statistiek.
de standaardhypothese, of nulhypothese, van de test is dat de twee gevallen niet met hetzelfde bedrag overeenstemmen. Als de nulhypothese wordt afgewezen, suggereert het dat er bewijs is dat de zaken op verschillende manieren van mening verschillen, dat de meningsverschillen scheef zijn.
gegeven de keuze van een significantieniveau kan de p-waarde berekend door de test als volgt worden geïnterpreteerd:
- p > Alfa: geen afwijzing van H0, geen verschil in onenigheid (de behandeling had bijvoorbeeld geen effect).
- p < = Alfa: reject H0, significant verschil in het meningsverschil (bijvoorbeeld behandeling had een effect).
interpreteer de McNemar-Test voor Classifiers
het is belangrijk om even de tijd te nemen om duidelijk te begrijpen hoe het resultaat van de test moet worden geïnterpreteerd in de context van twee modellen van automatische classifiers.
de twee termen die bij de berekening van de McNemar-Test worden gebruikt, geven de fouten weer die door beide modellen zijn gemaakt. In het bijzonder de cellen Nee/Ja en ja/nee in de contingency table. De test controleert of er een significant verschil is tussen de tellingen in deze twee cellen. Dat is alles.
als deze cellen tellingen hebben die vergelijkbaar zijn, toont het ons dat beide modellen fouten maken in vrijwel dezelfde verhouding, alleen op verschillende exemplaren van de testset. In dit geval zou het resultaat van de test niet significant zijn en zou de nulhypothese niet worden afgewezen.
onder de nulhypothese moeten de twee algoritmen hetzelfde foutenpercentage hebben…
— Approximate Statistical Tests for Comparing surveilled Classification Learning Algorithm, 1998.
als deze cellen tellingen hebben die niet vergelijkbaar zijn, toont dit aan dat beide modellen niet alleen verschillende fouten maken, maar in feite een verschillend relatieve percentage fouten op de testset hebben. In dit geval zou het resultaat van de test significant zijn en zouden we de nulhypothese verwerpen.
dus kunnen we de nulhypothese verwerpen ten gunste van de hypothese dat de twee algoritmen verschillende prestaties hebben wanneer ze op de specifieke training worden getraind
— Approximate Statistical Tests for Comparing surveilled Classification Learning Algorithm, 1998.
we kunnen dit als volgt samenvatten:
- nulhypothese niet afwijzen: Classifiers hebben een vergelijkbaar percentage fouten op de testset.
- nulhypothese afwijzen: Classifiers hebben een ander percentage fouten in de testset.
na het uitvoeren van de test en het vinden van een significant resultaat, kan het nuttig zijn om een effect statistische meting te rapporteren om de bevinding te kwantificeren. Bijvoorbeeld, een natuurlijke keuze zou zijn om de odds ratio ‘ s te rapporteren, of de contingency table zelf, hoewel beide veronderstellen een geavanceerde lezer.
het kan nuttig zijn het foutverschil tussen de twee classificeerders op de testset te rapporteren. In dit geval, wees voorzichtig met uw claims als de significante test rapporteert niet over het verschil in fout tussen de modellen, alleen het relatieve verschil in de verhouding van fout tussen de modellen.
ten slotte wijst Dietterich bij het gebruik van de McNemar-test op twee belangrijke beperkingen die in aanmerking moeten worden genomen. Ze zijn:
geen maat voor de variabiliteit van Trainingssets of modellen.
over het algemeen varieert het gedrag van het model op basis van de specifieke trainingsgegevens die worden gebruikt om bij het model te passen.
dit is te wijten aan zowel de interactie van het model met specifieke opleidingsinstanties als het gebruik van willekeur tijdens het leren. Het aanpassen van het model op meerdere verschillende trainingsdatasets en het evalueren van de vaardigheid, zoals wordt gedaan met resampling methoden, biedt een manier om de variantie van het model te meten.
de test is geschikt als de bronnen van variabiliteit klein zijn.
vandaar dat McNemar ‘ s test alleen moet worden toegepast als we geloven dat deze bronnen van variabiliteit klein zijn.
— Approximate Statistical Tests for Comparing surveilled Classification Learning Algorithm, 1998.
minder directe vergelijking van modellen
de twee classificeerders worden geëvalueerd op één testset en de testset zal naar verwachting kleiner zijn dan de trainingsset.
dit verschilt van hypothesetests waarbij gebruik wordt gemaakt van resamplingmethoden, aangezien meer, zo niet alle, van de dataset beschikbaar wordt gesteld als een testset tijdens de evaluatie (die zijn eigen problemen vanuit statistisch perspectief introduceert).
dit biedt minder kans om de prestaties van de modellen te vergelijken. Het vereist dat de testset een geschikte vertegenwoordiger van het domein is, wat vaak betekent dat de testdataset groot is.
McNemar ’s Test in Python
de McNemar’ s test kan worden geïmplementeerd in Python met behulp van de mcnemar() Statsmodels functie.
de functie neemt de contingency table als argument en retourneert de berekende teststatistiek en p-waarde.
afhankelijk van de hoeveelheid gegevens kunt u de statistiek op twee manieren gebruiken.
als er een cel in de tabel is die wordt gebruikt voor de berekening van de teststatistiek met een telling van minder dan 25, wordt een gewijzigde versie van de test gebruikt die een exacte p-waarde berekent met behulp van een binomiale verdeling. Dit is het standaard gebruik van de test:
1
|
stat, p = mcnemar (tabel, exact = True)
|
als alle bij de berekening van de teststatistiek in de contingententabel gebruikte cellen een waarde van 25 of meer hebben, kan de standaardberekening van de test worden gebruikt.
1
|
stat, p = mcnemar (tabel, exact = onwaar, correctie = waar)
|
we kunnen de McNemar ‘ s berekenen op de voorbeeldtabel hierboven beschreven. Deze contingentietabel heeft een kleine telling in zowel de onenigheid cellen en als zodanig de exacte methode moet worden gebruikt.
het volledige voorbeeld wordt hieronder weergegeven.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# Voorbeeld van de berekening van de mcnemar test
van statsmodels.Statistiek.contingency_tables import mcnemar
# define contingency table
table = ,
]
# bereken mcnemar-test
result = mcnemar (table, exact=True)
# vat de bevinding
samen print (‘statistic=%.3f, p-waarde=%.3f ‘ % (resultaat.statistiek, resultaat.pvalue))
# interpreteer de p-waarde
Alfa = 0,05
indien resultaat.pvalue > Alfa:
print (‘zelfde percentage fouten (weiger H0 niet)’)
else:
print (‘Different proportions of errors (reject H0)’)
|
het uitvoeren van het voorbeeld berekent de statistische en p-waarde op de contingency table en drukt de resultaten.
We kunnen zien dat de test sterk bevestigt dat er zeer weinig verschil is in de meningsverschillen tussen de twee zaken. De nulhypothese wordt niet afgewezen.
aangezien we de test gebruiken om classificeerders te vergelijken, stellen we dat er geen statistisch significant verschil is in de meningsverschillen tussen de twee modellen.
1
2
|
statistiek=1.000, p-waarde=1.000
Dezelfde verhoudingen van fouten (niet verwerpen H0)
|
Uitbreidingen
Deze sectie bevat een aantal ideeën voor het uitbreiden van de tutorial die je wenst te verkennen.
- zoek een research paper in machine learning die gebruik maakt van de statistische hypothese Test McNemar ‘ s.
- actualiseer het voorbeeld van de code zodanig dat de tabel voor onvoorziene omstandigheden een significant verschil in verschil tussen de twee gevallen laat zien.
- implementeer een functie die de juiste versie van McNemar ‘ s test gebruikt op basis van de meegeleverde contingency table.
als u een van deze extensies verkent, zou ik dat graag willen weten.
verder lezen
deze sectie biedt meer informatie over het onderwerp als u dieper wilt gaan.
papier
- opmerking over de steekproeffout van het verschil tussen gecorreleerde verhoudingen of percentages, 1947.
- Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithms, 1998.
API
- statsmodellen.Statistiek.contingency_tables.mcnemar() API
Artikelen
- McNemar ’s test op Wikipedia
- Type I en Type II fouten op Wikipedia
- Contingency tabel op wikipedia
Samenvatting
In deze tutorial, u ontdekt hoe u de McNemar’ s test statistische hypothese te testen, te vergelijken machine learning classifier modellen op een enkele test dataset.
specifiek heb je geleerd:
- de aanbeveling van de McNemar ‘ s test voor modellen die duur zijn om te trainen, die past bij grote deep learning modellen.
- hoe de voorspellingsresultaten van twee classifiers worden omgezet in een contingentietabel en hoe de tabel wordt gebruikt om de statistiek in de McNemar-test te berekenen.
- hoe de test van McNemar in Python te berekenen en het resultaat te interpreteren en te rapporteren.
heeft u vragen?
Stel uw vragen in de opmerkingen hieronder en Ik zal mijn best doen om te beantwoorden.
Krijg grip op statistieken voor Machine Learning!
Ontwikkel een goed begrip van statistieken
…door het schrijven van regels code in python
ontdek hoe in mijn nieuwe Ebook:
statistische methoden voor Machine Learning
het biedt zelfstudie tutorials over onderwerpen als:
hypothese testen, correlatie, niet-parametrische statistieken, Resampling, en nog veel meer…
ontdek hoe gegevens in kennis kunnen worden omgezet
sla de academici over. Alleen Resultaten.
bekijk wat erin zit