Hur man beräknar Mcnemars Test för att jämföra två klassificerare för maskininlärning

Tweet Share Share

Senast uppdaterad den 8 augusti 2019

valet av ett statistiskt hypotesprov är ett utmanande Öppet problem för tolkning av maskininlärningsresultat.

i sitt allmänt citerade 1998-papper rekommenderade Thomas Dietterich Mcnemars test i de fall där det är dyrt eller opraktiskt att träna flera kopior av klassificeringsmodeller.

detta beskriver den nuvarande situationen med djupinlärningsmodeller som båda är mycket stora och tränas och utvärderas på stora datamängder, vilket ofta kräver dagar eller veckor för att träna en enda modell.

i denna handledning kommer du att upptäcka hur man använder Mcnemars statistiska hypotesprov för att jämföra maskininlärningsklassificeringsmodeller på en enda testdataset.

när du har slutfört denna handledning kommer du att veta:

  • rekommendationen från Mcnemars test för modeller som är dyra att träna, vilket passar stora djupinlärningsmodeller.
  • hur man omvandlar prediktionsresultat från två klassificerare till en beredskapstabell och hur tabellen används för att beräkna statistiken i Mcnemars test.
  • hur man beräknar Mcnemars test i Python och tolkar och rapporterar resultatet.

Kick-starta ditt projekt med min nya Bokstatistik för maskininlärning, inklusive steg-för-steg-handledning och Python-källkodsfilerna för alla exempel.

Låt oss komma igång.

hur man beräknar Mcnemars Test för två Maskininlärningsklassificerare

hur man beräknar Mcnemars Test för två Maskininlärningsklassificerare
foto av Mark Kao, vissa rättigheter reserverade.

handledning Översikt

denna handledning är uppdelad i fem delar; de är:

  1. statistiska hypotesprov för djupinlärning
  2. Beredskapstabell
  3. Mcnemars teststatistik
  4. tolka Mcnemars Test för klassificerare
  5. Mcnemars Test i Python

behöver du hjälp med statistik för maskininlärning?

ta min gratis 7-dagars e-postkraschkurs nu (med provkod).

Klicka för att registrera dig och få en gratis PDF-e-bokversion av kursen.

ladda ner din gratis minikurs

statistiska hypotesprov för djupt lärande

i hans viktiga och allmänt citerade 1998-papper om användningen av statistiska hypotesprov för att jämföra klassificerare med titeln ”ungefärliga statistiska tester för att jämföra övervakade Klassificeringsinlärningsalgoritmer”, rekommenderar Thomas Dietterich användningen av Mcnemars test.

specifikt rekommenderas testet i de fall där algoritmerna som jämförs endast kan utvärderas en gång, t. ex. på en testuppsättning, i motsats till upprepade utvärderingar via en omsamplingsteknik, såsom K-faldig korsvalidering.

för algoritmer som bara kan köras en gång är Mcnemars test det enda testet med acceptabelt typ i-fel.

— ungefärliga statistiska tester för att jämföra övervakad Klassificeringsinlärningsalgoritm, 1998.

specifikt handlade Dietterichs studie om utvärderingen av olika statistiska hypotesprov, vissa arbetar med resultaten från omsamplingsmetoder. Studiens oro var lågt typ i-fel, det vill säga det statistiska testet som rapporterade en effekt när det faktiskt inte fanns någon effekt (falskt positivt).

statistiska tester som kan jämföra modeller baserade på en enda testuppsättning är ett viktigt övervägande för modern maskininlärning, särskilt inom djupinlärning.

Djupinlärningsmodeller är ofta stora och fungerar på mycket stora datamängder. Tillsammans kan dessa faktorer innebära att träningen av en modell kan ta dagar eller till och med veckor på snabb modern hårdvara.

detta utesluter den praktiska användningen av resamplingmetoder för att jämföra modeller och föreslår behovet av att använda ett test som kan fungera på resultaten av utvärdering av utbildade modeller på en enda testdataset.

Mcnemars test kan vara ett lämpligt test för att utvärdera dessa stora och långsamma djupinlärningsmodeller.

Beredskapstabell

Mcnemars test fungerar på en beredskapstabell.

innan vi dyker in i testet, låt oss ta en stund för att förstå hur beredskapstabellen för två klassificerare beräknas.

en beredskapstabell är en tabell eller räkning av två kategoriska variabler. När det gäller Mcnemars test är vi intresserade av binära variabler korrekta/felaktiga eller ja/nej för en kontroll och en behandling eller två fall. Detta kallas en 2-2-beredskapstabell.

beredskapstabellen kanske inte är intuitiv vid första anblicken. Låt oss göra det konkret med ett fungerande exempel.

Tänk på att vi har två utbildade klassificerare. Varje klassificerare gör binär klass förutsägelse för vart och ett av de 10 exemplen i en testdataset. Förutsägelserna utvärderas och bestäms vara korrekta eller felaktiga.

vi kan sedan sammanfatta dessa resultat i en tabell, enligt följande:

1
2
3
4
5
6
7
8
9
10
11

instans,Classifier1 korrekt,Classifier2 korrekt
1YesNo
2NoNo
3NoYes
4NoNo
5YesYes
6YesYes
7YesYes
8nono
9ja
10ja

vi kan se att Classifier1 fick 6 korrekt, eller en noggrannhet på 60%, och Classifier2 fick 5 korrekta eller 50% noggrannhet på testuppsättningen.

tabellen kan nu reduceras till en beredskapstabell.

beredskapstabellen bygger på det faktum att båda klassificerarna utbildades på exakt samma träningsdata och utvärderades på exakt samma testdatainstanser.

beredskapstabellen har följande struktur:

1
2
3

Classifier2 Korrekt, Classifier2 Felaktig
Classifier1 Korrekt ????
Classifier1 Felaktig ?? ??

när det gäller den första cellen i tabellen måste vi summera det totala antalet testinstanser som Classifier1 fick rätt och Classifier2 fick rätt. Till exempel var den första instansen som båda klassificerarna förutspådde korrekt instansnummer 5. Det totala antalet instanser som båda klassificerare förutspådde korrekt var 4.

ett annat mer programmatiskt sätt att tänka på detta är att summera varje kombination av ja/nej i resultattabellen ovan.

1
2
3

klassificerare 2 korrekt, klassificerare 2 felaktigt
klassificerare 1 Korrekt Ja / Jaja / Nej
klassificerare 1 felaktigt Nej / Ja Nej / Nej

resultaten organiserade i en beredskapstabell är följande:

1
2
3

klassificerare 2 korrekt, klassificerare 2 felaktig
klassificerare 1 Korrekt 42
klassificerare 1 felaktig 1 3

Mcnemars teststatistik

Mcnemars test är ett parat icke-parametriskt eller distributionsfritt statistiskt hypotesprov.

det är också mindre intuitivt än vissa andra statistiska hypotesprov.

Mcnemars test kontrollerar om oenigheterna mellan två fall matchar. Tekniskt sett kallas detta homogeniteten i beredskapstabellen (specifikt den marginella homogeniteten). Därför är Mcnemars test en typ av homogenitetstest för beredskapstabeller.

testet används ofta i medicin för att jämföra effekten av en behandling mot en kontroll.

när det gäller att jämföra två binära klassificeringsalgoritmer kommenterar testet om de två modellerna inte håller med på samma sätt (eller inte). Det kommenterar inte om en modell är mer eller mindre exakt eller felbenägen än en annan. Detta är tydligt när vi tittar på hur statistiken beräknas.

Mcnemars teststatistik beräknas som:

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

där ja / nej är räkningen av testinstanser som Classifier1 fick rätt och Classifier2 fick fel, och Nej/Ja är räkningen av testinstanser som Classifier1 fick fel och Classifier2 fick rätt.

denna beräkning av teststatistiken förutsätter att varje cell i beredskapstabellen som används i beräkningen har ett antal på minst 25. Teststatistiken har en Chi-kvadrerad fördelning med 1 frihetsgrad.

vi kan se att endast två element i beredskapstabellen används, specifikt att ja/ja och nej/nej-elementen inte används vid beräkningen av teststatistiken. Som sådan kan vi se att statistiken rapporterar om de olika korrekta eller felaktiga förutsägelserna mellan de två modellerna, inte noggrannheten eller felfrekvensen. Detta är viktigt att förstå när man gör påståenden om statistikens resultat.

standardantagandet, eller nollhypotesen, för testet är att de två fallen inte håller med om samma belopp. Om nollhypotesen avvisas antyder den att det finns bevis som tyder på att fallen är oense på olika sätt, att oenigheterna är sneda.

med tanke på valet av en signifikansnivå kan p-värdet beräknat med testet tolkas enligt följande:

  • p > alfa: misslyckas med att avvisa H0, ingen skillnad i oenigheten (t.ex. behandling hade ingen effekt).
  • p < = alfa: avvisa H0, signifikant skillnad i oenigheten (t.ex. behandling hade effekt).

tolka Mcnemars Test för klassificerare

det är viktigt att ta en stund att tydligt förstå hur man tolkar resultatet av testet i samband med två maskininlärningsklassificeringsmodeller.

de två termerna som används vid beräkningen av Mcnemars Test fångar de fel som gjorts av båda modellerna. Specifikt cellerna Nej/Ja och ja/nej i beredskapstabellen. Testet kontrollerar om det finns en signifikant skillnad mellan räkningarna i dessa två celler. Det är allt.

om dessa celler har räkningar som liknar, visar det oss att båda modellerna gör fel i ungefär samma proportion, bara på olika instanser av testuppsättningen. I detta fall skulle resultatet av testet inte vara signifikant och nollhypotesen skulle inte avvisas.

under nollhypotesen bör de två algoritmerna ha samma felfrekvens …

— ungefärliga statistiska tester för att jämföra övervakad Klassificeringsinlärningsalgoritm, 1998.

om dessa celler har räkningar som inte är lika, visar det sig att båda modellerna inte bara gör olika fel utan faktiskt har en annan relativ andel fel på testuppsättningen. I det här fallet skulle resultatet av testet vara betydande och vi skulle avvisa nollhypotesen.

så vi kan avvisa nollhypotesen till förmån för hypotesen att de två algoritmerna har olika prestanda när de tränas på den specifika träningen

— ungefärliga statistiska tester för att jämföra övervakad Klassificeringsinlärningsalgoritm, 1998.

vi kan sammanfatta detta enligt följande:

  • misslyckas med att avvisa nollhypotes: klassificerare har en liknande andel fel på testuppsättningen.
  • avvisa nollhypotes: klassificerare har en annan andel fel på testuppsättningen.

efter att ha utfört testet och hittat ett signifikant resultat kan det vara användbart att rapportera en effekt statistisk åtgärd för att kvantifiera fyndet. Till exempel skulle ett naturligt val vara att rapportera oddsförhållandena eller själva beredskapstabellen, även om båda dessa antar en sofistikerad läsare.

det kan vara användbart att rapportera skillnaden i fel mellan de två klassificerarna på testuppsättningen. Var i så fall försiktig med dina påståenden eftersom det signifikanta testet inte rapporterar om skillnaden i fel mellan modellerna, bara den relativa skillnaden i andelen fel mellan modellerna.

slutligen, när man använder Mcnemars test, belyser Dietterich två viktiga begränsningar som måste beaktas. De är:

inget mått på träningsuppsättning eller Modellvariation.

generellt varierar modellbeteendet baserat på de specifika träningsdata som används för att passa modellen.

detta beror på både modellens interaktion med specifika träningsinstanser och användningen av slumpmässighet under lärandet. Att montera modellen på flera olika träningsdataset och utvärdera färdigheten, som görs med omsamplingsmetoder, ger ett sätt att mäta modellens varians.

testet är lämpligt om variabilitetskällorna är små.

därför bör Mcnemars test endast tillämpas om vi tror att dessa variationskällor är små.

— ungefärliga statistiska tester för att jämföra övervakad Klassificeringsinlärningsalgoritm, 1998.

mindre direkt jämförelse av modeller

de två klassificerarna utvärderas på en enda testuppsättning och testuppsättningen förväntas vara mindre än träningsuppsättningen.

detta skiljer sig från hypotestester som använder sig av omsamplingsmetoder eftersom mer, om inte alla, av datasetet görs tillgängligt som en testuppsättning under utvärderingen (som introducerar sina egna problem ur ett statistiskt perspektiv).

detta ger mindre möjlighet att jämföra modellernas prestanda. Det kräver att testuppsättningen är en lämplig representant för domänen, vilket ofta betyder att testdatauppsättningen är stor.

Mcnemars Test i Python

Mcnemars test kan implementeras i Python med hjälp av mcnemar() Statsmodels-funktionen.

funktionen tar beredskapstabellen som ett argument och returnerar den beräknade teststatistiken och p-värdet.

det finns två sätt att använda statistiken beroende på mängden data.

om det finns en cell i tabellen som används vid beräkningen av teststatistiken som har ett antal mindre än 25, används en modifierad version av testet som beräknar ett exakt p-värde med hjälp av en binomialfördelning. Detta är standardanvändningen av testet:

1
stat, p = mcnemar (tabell, exakt = sant)

alternativt, om alla celler som används vid beräkningen av teststatistiken i beredskapstabellen har ett värde av 25 eller mer, kan standardberäkningen av testet användas.

1
stat, p = mcnemar (tabell, exakt = falsk, korrigering = sann)

vi kan beräkna Mcnemars på exemplet beredskapstabell som beskrivs ovan. Denna beredskapstabell har ett litet antal i båda oenighetscellerna och som sådan måste den exakta metoden användas.

det fullständiga exemplet listas nedan.

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

# exempel på beräkning av mcnemar-testet
från statsmodels.statistik.contingency_tables importera mcnemar
# definiera beredskapstabell
tabell = ,
]
# beräkna mcnemar test
resultat = mcnemar (tabell, exakt=sant)
# sammanfatta upptäckten
Skriv ut (’statistik=%.3f, p-värde=%.3f ’ % (resultat.statistik, resultat.pvalue))
# tolka p-värdet
alfa = 0,05
om resultatet.pvalue > alfa:
Skriv ut (’samma proportioner av fel (misslyckas med att avvisa H0)’)
annat:
Skriv ut (’olika proportioner av fel (avvisa H0)’)

att köra exemplet beräknar statistiken och p-värdet på beredskapstabellen och skriver ut resultaten.

vi kan se att testet starkt bekräftar att det finns mycket liten skillnad i oenigheterna mellan de två fallen. Nollhypotesen avvisas inte.

när vi använder testet för att jämföra klassificerare anger vi att det inte finns någon statistiskt signifikant skillnad i oenigheterna mellan de två modellerna.

1
2

statistik=1.000, p-värde=1.000
samma proportioner av fel (misslyckas med att avvisa H0)

Extensions

det här avsnittet innehåller några tips för att utöka handledningen som du kanske vill utforska.

  • hitta ett forskningspapper i maskininlärning som använder sig av Mcnemars statistiska hypotesprov.
  • uppdatera kodexemplet så att beredskapstabellen visar en signifikant skillnad i oenighet mellan de två fallen.
  • implementera en funktion som använder rätt version av Mcnemars test baserat på den medföljande beredskapstabellen.

om du utforskar någon av dessa tillägg skulle jag gärna veta.

Vidare läsning

det här avsnittet ger mer resurser om ämnet om du vill gå djupare.

papper

  • anmärkning om provtagningsfelet för skillnaden mellan korrelerade proportioner eller procentsatser, 1947.
  • ungefärliga statistiska tester för att jämföra övervakade Klassificeringsinlärningsalgoritmer, 1998.

API

  • statsmodels.statistik.kontingency_tables.mcnemar() API

artiklar

  • Mcnemars test på Wikipedia
  • typ i-och typ II-fel på Wikipedia
  • Beredskapstabell på wikipedia

sammanfattning

i den här handledningen upptäckte du hur du använder mcnemars TESTSTATISTISKA hypotesprov för att jämföra maskininlärningsklassificeringsmodeller på en enda testdataset.

specifikt lärde du dig:

  • rekommendationen från Mcnemars test för modeller som är dyra att träna, vilket passar stora djupinlärningsmodeller.
  • hur man omvandlar prediktionsresultat från två klassificerare till en beredskapstabell och hur tabellen används för att beräkna statistiken i Mcnemars test.
  • hur man beräknar Mcnemars test i Python och tolkar och rapporterar resultatet.

har du några frågor?
Ställ dina frågor i kommentarerna nedan och jag kommer att göra mitt bästa för att svara.

få ett grepp om statistik för maskininlärning!

statistiska metoder för maskininlärning

utveckla en fungerande förståelse för statistik

…genom att skriva kodrader i python

Upptäck hur i min nya Ebook:
statistiska metoder för maskininlärning

det ger självstudiehandledning om ämnen som:
hypotesprov, korrelation, icke-parametrisk statistik, Omsampling och mycket mer…

Upptäck hur du omvandlar Data till kunskap

hoppa över akademikerna. Bara Resultat.

se vad som finns inuti

Tweet Dela Dela

You might also like

Lämna ett svar

Din e-postadress kommer inte publiceras.