Sådan beregnes Mcnemars Test for at sammenligne to Maskinlæringsklassifikatorer

kvidre Share Share

sidst opdateret den 8.August 2019

valget af en statistisk hypotesetest er et udfordrende åbent problem for fortolkning af maskinindlærings resultater.

i sit bredt citerede papir fra 1998 anbefalede Thomas Dietterich Mcnemars test i de tilfælde, hvor det er dyrt eller upraktisk at træne flere kopier af klassificeringsmodeller.

dette beskriver den aktuelle situation med dybe læringsmodeller, der begge er meget store og trænes og evalueres på store datasæt, der ofte kræver dage eller uger for at træne en enkelt model.

i denne tutorial vil du opdage, hvordan du bruger Mcnemars statistiske hypotesetest til at sammenligne klassificeringsmodeller for maskinindlæring på et enkelt testdatasæt.

efter at have afsluttet denne tutorial, vil du vide:

  • anbefalingen fra Mcnemars test for modeller, der er dyre at træne, som passer til store dybe læringsmodeller.
  • Sådan omdannes forudsigelsesresultater fra to klassifikatorer til en beredskabstabel, og hvordan tabellen bruges til at beregne statistikken i Mcnemars test.
  • Sådan beregnes Mcnemars test i Python og fortolker og rapporterer resultatet.

kickstart dit projekt med min nye bog statistik for Machine Learning, herunder trin-for-trin tutorials og Python kildekode filer for alle eksempler.

lad os komme i gang.

Sådan beregnes Mcnemars Test for to Maskinlæringsklassifikatorer

Sådan beregnes Mcnemars Test for to Maskinlæringsklassifikatorer
foto af Mark Kao, nogle rettigheder forbeholdes.

Tutorial Oversigt

denne tutorial er opdelt i fem dele; de er:

  1. statistiske hypotesetest til dyb læring
  2. Beredskabstabel
  3. Mcnemars teststatistik
  4. fortolke Mcnemars Test for klassifikatorer
  5. Mcnemars Test i Python

brug for hjælp til statistik for Machine Learning?

Tag mit gratis 7-dages e-mail-crashkursus nu (med prøvekode).

Klik for at tilmelde dig og få også en gratis PDF Ebook version af kurset.

Hent dit gratis minikursus

statistiske hypotesetest til dyb læring

i hans vigtige og bredt citerede 1998-papir om brugen af statistiske hypotesetest til sammenligning af klassifikatorer med titlen “omtrentlige statistiske Tests til sammenligning af overvågede Klassificeringsindlæringsalgoritmer” anbefaler Thomas Dietterich brugen af Mcnemars test.

specifikt anbefales testen i de tilfælde, hvor algoritmerne, der sammenlignes, kun kan evalueres en gang, f. eks. i modsætning til gentagne evalueringer via en resamplingsteknik, såsom K-fold krydsvalidering.

for algoritmer, der kun kan udføres en gang, er Mcnemars test den eneste test med acceptabel type i-fejl.

— omtrentlige statistiske Tests til sammenligning af Overvåget Klassificeringsindlæringsalgoritme, 1998.

specifikt var Dietterichs undersøgelse bekymret for evalueringen af forskellige statistiske hypotesetest, hvoraf nogle arbejdede på resultaterne fra resamplingsmetoder. Undersøgelsens bekymring var lav type i-fejl, det vil sige den statistiske test, der rapporterede en effekt, når der faktisk ikke var nogen effekt (falsk positiv).

statistiske tests, der kan sammenligne modeller baseret på et enkelt testsæt, er en vigtig overvejelse for moderne maskinindlæring, specifikt inden for dyb læring.

Deep learning modeller er ofte store og opererer på meget store datasæt. Sammen kan disse faktorer betyde, at træning af en model kan tage dage eller endda uger på hurtigt moderne udstyr.

dette udelukker den praktiske anvendelse af resamplingsmetoder til sammenligning af modeller og antyder behovet for at bruge en test, der kan fungere på resultaterne af evaluering af uddannede modeller på et enkelt testdatasæt.

Mcnemars test kan være en passende test til evaluering af disse store og langsomt trænede dybe læringsmodeller.

Beredskabstabel

Mcnemars test fungerer på en beredskabstabel.

før vi dykker ned i testen, lad os tage et øjeblik til at forstå, hvordan beredskabstabellen for to klassifikatorer beregnes.

en beredskabstabel er en tabel eller optælling af to kategoriske variabler. I tilfælde af Mcnemars test er vi interesseret i binære variabler korrekt/forkert eller ja/nej til en kontrol og en behandling eller to tilfælde. Dette kaldes en 2 LP 2 beredskabstabel.

beredskabstabellen er muligvis ikke intuitiv ved første øjekast. Lad os gøre det konkret med et arbejdet eksempel.

overvej at vi har to uddannede klassifikatorer. Hver klassifikator gør binær klasse forudsigelse for hver af de 10 eksempler i en test datasæt. Forudsigelserne vurderes og bestemmes for at være korrekte eller forkerte.

vi kan derefter opsummere disse resultater i en tabel som følger:

1
2
3
4
5
6
7
8
9
10
11

forekomst,Klassificering1 korrekt,Klassificering2 korrekt
1YesNo
2nono
3NoYes
4NoNo
5YesYes
6YesYes
7YesYes
8nono
9yesno
10yesyes

vi kan se, at Classifier1 fik 6 korrekt eller en nøjagtighed på 60%, og Classifier2 fik 5 korrekte eller 50% nøjagtighed på testsættet.

tabellen kan nu reduceres til en beredskabstabel.

beredskabstabellen er afhængig af, at begge klassifikatorer blev trænet på nøjagtigt de samme træningsdata og evalueret på nøjagtigt de samme testdatainstanser.

beredskabstabellen har følgende struktur:

1
2
3

Classifier2 Korrekt, Classifier2 Forkert
Classifier1 Korrekt ????
Classifier1 Forkert ?? ??

i tilfælde af den første celle i tabellen skal vi opsummere det samlede antal testforekomster, som Classifier1 fik korrekt og Classifier2 fik korrekt. For eksempel var den første forekomst, som begge klassifikatorer forudsagde korrekt, instans nummer 5. Det samlede antal forekomster, som begge klassifikatorer forudsagde korrekt, var 4.

en anden mere programmatisk måde at tænke på dette er at opsummere hver kombination af ja/nej i resultattabellen ovenfor.

1
2
3

Classifier2 korrekt,Classifier2 forkert
Classifier1 korrekt Ja/Jaja/Nej
Classifier1 forkert nej / ja nej / nej

resultaterne organiseret i en beredskabstabel er som følger:

1
2
3

Classifier2 korrekt,Classifier2 forkert
Classifier1 korrekt 42
Classifier1 forkert 1 3

Mcnemars teststatistik

Mcnemars test er en parret ikke-parametrisk eller distributionsfri statistisk hypotesetest.

det er også mindre intuitivt end nogle andre statistiske hypotesetests.

Mcnemars test kontrollerer, om uenighederne mellem to sager stemmer overens. Teknisk kaldes dette homogeniteten af beredskabstabellen (specifikt den marginale homogenitet). Derfor er Mcnemars test en type homogenitetstest for beredskabstabeller.

testen bruges i vid udstrækning i medicin til at sammenligne effekten af en behandling mod en kontrol.

med hensyn til sammenligning af to binære klassificeringsalgoritmer kommenterer testen, om de to modeller er uenige på samme måde (eller ej). Det kommenterer ikke, om en model er mere eller mindre nøjagtig eller fejlbehæftet end en anden. Dette er tydeligt, når vi ser på, hvordan statistikken beregnes.

Mcnemars teststatistik beregnes som:

1
statistik = (ja / nej-nej / ja)^2 / (ja / nej + nej / ja)

hvor ja / nej er antallet af testforekomster, at Classifier1 blev korrekt, og Classifier2 blev forkert, og nej/ja er antallet af testforekomster, som Classifier1 blev forkert, og Classifier2 blev korrekt.

denne beregning af teststatistikken forudsætter, at hver celle i beredskabstabellen, der anvendes i beregningen, har et antal på mindst 25. Teststatistikken har en Chi-kvadreret fordeling med 1 grad af frihed.

vi kan se, at kun to elementer i beredskabstabellen bruges, specifikt at ja/ja og nej/nej-elementerne ikke bruges i beregningen af teststatistikken. Som sådan kan vi se, at statistikken rapporterer om de forskellige korrekte eller forkerte forudsigelser mellem de to modeller, ikke nøjagtigheden eller fejlprocenten. Dette er vigtigt at forstå, når man fremsætter krav om konstateringen af statistikken.

standardantagelsen eller nulhypotesen af testen er, at de to tilfælde er uenige i det samme beløb. Hvis nulhypotesen afvises, antyder det, at der er bevis for, at sagerne er uenige på forskellige måder, at uenighederne er skæve.

i betragtning af valget af et signifikansniveau kan p-værdien beregnet ved testen fortolkes som følger:

  • p > alfa: undlader at afvise H0, ingen forskel i uenigheden (f.eks. behandling havde ingen effekt).
  • p < = alpha: Afvis H0, signifikant forskel i uenigheden (f.eks. behandling havde en effekt).

Fortolk Mcnemars Test for klassifikatorer

det er vigtigt at tage et øjeblik til klart at forstå, hvordan man fortolker resultatet af testen i sammenhæng med to maskinindlæringsklassificeringsmodeller.

de to udtryk, der anvendes i beregningen af Mcnemars Test, fanger fejlene fra begge modeller. Specifikt nej/ja og ja / nej celler i beredskabstabellen. Testen kontrollerer, om der er en signifikant forskel mellem tællingerne i disse to celler. Det var alt.

hvis disse celler har tællinger, der ligner hinanden, viser det os, at begge modeller laver fejl i stort set samme forhold, bare på forskellige forekomster af testsættet. I dette tilfælde ville resultatet af testen ikke være signifikant, og nulhypotesen ville ikke blive afvist.

under nulhypotesen skal de to algoritmer have den samme fejlfrekvens …

— omtrentlige statistiske Tests til sammenligning af Overvåget Klassificeringsindlæringsalgoritme, 1998.

hvis disse celler har tællinger, der ikke er ens, viser det, at begge modeller ikke kun laver forskellige fejl, men faktisk har en anden relativ andel af fejl på testsættet. I dette tilfælde ville resultatet af testen være signifikant, og vi ville afvise nulhypotesen.

så vi kan afvise nulhypotesen til fordel for hypotesen om, at de to algoritmer har forskellige præstationer, når de trænes på den pågældende træning

— omtrentlige statistiske Tests til sammenligning af Overvåget Klassificeringsindlæringsalgoritme, 1998.

vi kan opsummere dette som følger:

  • Undlad at afvise Nulhypotese: klassifikatorer har en lignende andel af fejl på testsættet.
  • Afvis Nulhypotese: klassifikatorer har en anden andel af fejl på testsættet.

efter at have udført testen og fundet et signifikant resultat, kan det være nyttigt at rapportere et effektstatistisk mål for at kvantificere fundet. For eksempel ville et naturligt valg være at rapportere oddsforholdene eller selve beredskabstabellen, selvom begge disse antager en sofistikeret læser.

det kan være nyttigt at rapportere forskellen i fejl mellem de to klassifikatorer på testsættet. I dette tilfælde skal du være forsigtig med dine påstande, da den signifikante test ikke rapporterer om forskellen i fejl mellem modellerne, kun den relative forskel i andelen af fejl mellem modellerne.

endelig fremhæver Dietterich ved brug af Mcnemars test to vigtige begrænsninger, der skal overvejes. De er:

intet mål for træningssæt eller Modelvariabilitet.

generelt varierer modeladfærd baseret på de specifikke træningsdata, der bruges til at passe til modellen.

dette skyldes både samspillet mellem modellen og specifikke træningsforekomster og brugen af tilfældighed under læring. Montering af modellen på flere forskellige træningsdatasæt og evaluering af færdigheden, som det gøres med resamplingsmetoder, giver en måde at måle variansen af modellen på.

testen er hensigtsmæssig, hvis kilderne til variabilitet er små.

derfor bør Mcnemars test kun anvendes, hvis vi mener, at disse kilder til variabilitet er små.

— omtrentlige statistiske Tests til sammenligning af Overvåget Klassificeringsindlæringsalgoritme, 1998.

mindre direkte sammenligning af modeller

de to klassifikatorer evalueres på et enkelt testsæt, og testsættet forventes at være mindre end træningssættet.

dette adskiller sig fra hypotesetest, der gør brug af resamplingsmetoder, da mere, hvis ikke alle, af datasættet stilles til rådighed som et testsæt under evalueringen (som introducerer sine egne problemer fra et statistisk perspektiv).

dette giver mindre mulighed for at sammenligne modellernes ydeevne. Det kræver, at testsættet er en passende repræsentant for domænet, hvilket ofte betyder, at testdatasættet er stort.

Mcnemars test i Python

Mcnemars test kan implementeres i Python ved hjælp af mcnemar() Statsmodels-funktionen.

funktionen tager beredskabstabellen som et argument og returnerer den beregnede teststatistik og p-værdi.

der er to måder at bruge statistikken afhængigt af mængden af data.

hvis der er en celle i tabellen, der bruges til beregning af teststatistikken, der har et antal på mindre end 25, bruges en modificeret version af testen, der beregner en nøjagtig p-værdi ved hjælp af en binomialfordeling. Dette er standardbrugen af testen:

1
stat, p = mcnemar (tabel, nøjagtig=sand)

Alternativt, hvis alle celler, der anvendes til beregning af teststatistikken i beredskabstabellen, har en værdi på 25 eller mere, kan standardberegningen af testen anvendes.

1
stat, p = mcnemar (tabel, nøjagtig=falsk, korrektion=sand)

vi kan beregne Mcnemars på eksemplet beredskabstabel beskrevet ovenfor. Denne beredskabstabel har et lille antal i både uenighedscellerne, og som sådan skal den nøjagtige metode anvendes.

det komplette eksempel er angivet nedenfor.

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

# eksempel på beregning af mcnemar-testen
fra statsmodels.statistik.contingency_tables import mcnemar
# Definer beredskabstabel
tabel = ,
]
# Beregn mcnemar test
resultat = mcnemar(tabel, nøjagtig=sand)
# opsummer fundet
Udskriv(‘statistik=%.3f, p-værdi=%.3f ‘ % (resultat.statistik, resultat.pvalue))
# fortolk p-værdien
alpha = 0,05
hvis resultat.pvalue > alpha:
print (‘samme proportioner af fejl (undlader at afvise H0)’)
else:
Udskriv (‘forskellige proportioner af fejl (Afvis H0)’)

kørsel af eksemplet beregner statistik og p-værdi på beredskabstabellen og udskriver resultaterne.

vi kan se, at testen stærkt bekræfter, at der er meget lille forskel i uenighederne mellem de to sager. Nulhypotesen blev ikke afvist.

da vi bruger testen til at sammenligne klassifikatorer, siger vi, at der ikke er nogen statistisk signifikant forskel i uenighederne mellem de to modeller.

1
2

statistik=1.000, p-værdi=1.000
samme proportioner af fejl (undlader at afvise H0)

udvidelser

dette afsnit viser nogle ideer til at udvide den tutorial, som du måske ønsker at udforske.

  • Find et forskningsdokument i maskinindlæring, der gør brug af Mcnemars statistiske hypotesetest.
  • Opdater kodeeksemplet, så beredskabstabellen viser en signifikant forskel i uenighed mellem de to tilfælde.
  • Implementer en funktion, der vil bruge den korrekte version af Mcnemars test baseret på den medfølgende beredskabstabel.

hvis du udforsker nogen af disse udvidelser, vil jeg meget gerne vide det.

yderligere læsning

dette afsnit giver flere ressourcer om emnet, hvis du ønsker at gå dybere.

Papers

  • Note om prøveudtagningsfejlen for forskellen mellem korrelerede proportioner eller procenter, 1947.
  • omtrentlige statistiske Tests til sammenligning af overvågede Klassificeringsindlæringsalgoritmer, 1998.

API

  • statsmodeller.statistik.contingency_tables.mcnemar() API

artikler

  • Mcnemars test på Facebook
  • type I og type II fejl på Facebook
  • Beredskabstabel på Facebook

Resume

i dette tutorial, du opdagede, hvordan du bruger mcnemars teststatistiske hypotesetest til at sammenligne maskinlæringsklassificeringsmodeller på et enkelt Testdatasæt.

specifikt lærte du:

  • anbefalingen fra Mcnemars test for modeller, der er dyre at træne, som passer til store dybe læringsmodeller.
  • Sådan omdannes forudsigelsesresultater fra to klassifikatorer til en beredskabstabel, og hvordan tabellen bruges til at beregne statistikken i Mcnemars test.
  • Sådan beregnes Mcnemars test i Python og fortolker og rapporterer resultatet.

har du nogen spørgsmål?
stil dine spørgsmål i kommentarerne nedenfor, og jeg vil gøre mit bedste for at svare.

få styr på statistik for Machine Learning!

statistiske metoder til maskinindlæring

udvikle en arbejdsforståelse af statistik

…ved at skrive kodelinjer i python

Opdag hvordan i min nye e-bog:
statistiske metoder til maskinindlæring

det giver selvstudie tutorials om emner som:
hypotesetest, korrelation, ikke-parametrisk statistik, Resampling og meget mere…

Opdag hvordan man omdanner Data til viden

Spring akademikerne over. Bare Resultater.

se hvad der er indeni

bøger fra Share Share

You might also like

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.