Come calcolare il test di McNemar per confrontare due classificatori di apprendimento automatico

Tweet Share Share

Ultimo aggiornamento l ‘ 8 agosto 2019

La scelta di un test di ipotesi statistica è un difficile problema aperto per l’interpretazione dei risultati di apprendimento automatico.

Nel suo ampiamente citato articolo del 1998, Thomas Dietterich ha raccomandato il test di McNemar in quei casi in cui è costoso o poco pratico addestrare più copie di modelli di classificatori.

Questo descrive la situazione attuale con modelli di apprendimento profondo che sono entrambi molto grandi e sono addestrati e valutati su grandi set di dati, spesso richiedono giorni o settimane per addestrare un singolo modello.

In questo tutorial, scoprirai come utilizzare il test di ipotesi statistica di McNemar per confrontare i modelli di classificatori di apprendimento automatico su un singolo set di dati di test.

Dopo aver completato questo tutorial, saprai:

  • La raccomandazione del test di McNemar per i modelli che sono costosi da addestrare, che si adatta grandi modelli di apprendimento profondo.
  • Come trasformare i risultati di previsione da due classificatori in una tabella di contingenza e come la tabella viene utilizzata per calcolare la statistica nel test di McNemar.
  • Come calcolare il test di McNemar in Python e interpretare e riportare il risultato.

Avvia il tuo progetto con il mio nuovo libro Statistiche per l’apprendimento automatico, inclusi tutorial passo-passo e file di codice sorgente Python per tutti gli esempi.

Iniziamo.

Come calcolare il test di McNemar per due classificatori di apprendimento automatico

Come calcolare il test di McNemar per due classificatori di apprendimento automatico
Foto di Mark Kao, alcuni diritti riservati.

Panoramica del tutorial

Questo tutorial è diviso in cinque parti; sono:

  1. Test di ipotesi statistica per Deep learning
  2. Tabella di contingenza
  3. Statistica del test di McNemar
  4. Interpretare il test di McNemar per classificatori
  5. Test di McNemar in Python

Hai bisogno di aiuto con le statistiche per l’apprendimento automatico?

Prendi il mio corso accelerato gratuito di 7 giorni (con codice di esempio).

Fare clic per iscriversi e anche ottenere una versione PDF Ebook gratuito del corso.

Scarica il tuo mini-corso GRATUITO

Test di ipotesi statistica per Deep Learning

Nel suo importante e ampiamente citato articolo del 1998 sull’uso dei test di ipotesi statistica per confrontare i classificatori intitolato “Test statistici approssimativi per confrontare algoritmi di apprendimento di classificazione supervisionati”, Thomas Dietterich raccomanda l’uso del test di McNemar.

In particolare, il test è raccomandato nei casi in cui gli algoritmi che vengono confrontati possono essere valutati solo una volta, ad esempio su un set di test, al contrario di valutazioni ripetute tramite una tecnica di ricampionamento, come la convalida incrociata k-fold.

Per gli algoritmi che possono essere eseguiti solo una volta, il test di McNemar è l’unico test con errore di tipo I accettabile.

— Test statistici approssimativi per confrontare l’algoritmo di apprendimento della classificazione supervisionato, 1998.

In particolare, lo studio di Dietterich riguardava la valutazione di diversi test di ipotesi statistica, alcuni dei quali operavano sui risultati dei metodi di ricampionamento. La preoccupazione dello studio era un basso errore di tipo I, cioè il test statistico che riportava un effetto quando in realtà non era presente alcun effetto (falso positivo).

I test statistici che possono confrontare modelli basati su un singolo set di test sono una considerazione importante per il moderno apprendimento automatico, in particolare nel campo del deep learning.

I modelli di deep learning sono spesso grandi e operano su set di dati molto grandi. Insieme, questi fattori possono significare che la formazione di un modello può richiedere giorni o addirittura settimane su hardware moderno veloce.

Ciò preclude l’uso pratico dei metodi di ricampionamento per confrontare i modelli e suggerisce la necessità di utilizzare un test in grado di operare sui risultati della valutazione di modelli addestrati su un singolo set di dati di test.

Il test di McNemar può essere un test adatto per valutare questi modelli di apprendimento profondo grandi e lenti.

Tabella di contingenza

Il test di McNemar opera su una tabella di contingenza.

Prima di immergerci nel test, prendiamoci un momento per capire come viene calcolata la tabella di contingenza per due classificatori.

Una tabella di contingenza è una tabulazione o conteggio di due variabili categoriali. Nel caso del test del McNemar, siamo interessati a variabili binarie corrette / errato o sì / no per un controllo e un trattamento o due casi. Questo è chiamato un 2×2 tabella di contingenza.

La tabella di contingenza potrebbe non essere intuitiva a prima vista. Rendiamolo concreto con un esempio lavorato.

Considera che abbiamo due classificatori addestrati. Ogni classificatore fa previsione di classe binaria per ciascuno dei 10 esempi in un set di dati di test. Le previsioni sono valutate e determinate per essere corrette o errate.

Possiamo quindi riassumere questi risultati in una tabella, come segue:

1
2
3
4
5
6
7
8
9
10
11

Esempio,Classifier1 Corretto,Classifier2 Corretto
1YesNo
2NoNo
3NoYes
4NoNo
5YesYes
6YesYes
7YesYes
8NoNo
9YesNo
10YesYes

Possiamo vedere che Classifier1 ottenuto 6 corretto, o una precisione del 60%, e Classifier2 ottenuto 5 corretto, o 50% di precisione sul set di test.

La tabella può ora essere ridotta a una tabella di contingenza.

La tabella di contingenza si basa sul fatto che entrambi i classificatori sono stati addestrati esattamente sugli stessi dati di allenamento e valutati esattamente sulle stesse istanze di dati di test.

La tabella di contingenza ha la seguente struttura:

1
2
3

Classifier2 Corretto,Classifier2 Non Corretto
Classifier1 Corretto ????
Classificatore 1 Errato ?? ??

Nel caso della prima cella della tabella, dobbiamo sommare il numero totale di istanze di test che Classifier1 ha corretto e Classifier2 ha corretto. Ad esempio, la prima istanza prevista correttamente da entrambi i classificatori era l’istanza numero 5. Il numero totale di istanze previste correttamente da entrambi i classificatori era 4.

Un altro modo più programmatico di pensare a questo è sommare ogni combinazione di Sì/No nella tabella dei risultati sopra.

1
2
3

Classifier2 Corretto,Classifier2 non Corretto
Classifier1 Corretto Sì/YesYes/No
Classifier1 Errato No/Sì No/No

I risultati organizzati in una tabella di contingenza sono come segue:

1
2
3

Classifier2 Corretto,Classifier2 Non Corretto
Classifier1 Corretto 42
Classifier1 Errato 1 3

McNemar Test di Statistica

McNemar test è associato non parametrici o la distribuzione non-free test di ipotesi statistiche.

È anche meno intuitivo di alcuni altri test di ipotesi statistica.

Il test di McNemar sta controllando se i disaccordi tra due casi corrispondono. Tecnicamente, questo è indicato come l’omogeneità della tabella di contingenza (in particolare l’omogeneità marginale). Pertanto, il test di McNemar è un tipo di test di omogeneità per le tabelle di contingenza.

Il test è ampiamente usato in medicina per confrontare l’effetto di un trattamento contro un controllo.

In termini di confronto di due algoritmi di classificazione binaria, il test sta commentando se i due modelli non sono d’accordo nello stesso modo (o meno). Non sta commentando se un modello è più o meno preciso o soggetto a errori rispetto a un altro. Questo è chiaro quando guardiamo a come viene calcolata la statistica.

La statistica di prova di McNemar è calcolata come:

1
statistica = (Sì/No/Sì)^2 / (Sì/No + No/Sì)

Dove Sì/No è il numero di istanze di test che Classifier1 ho corretto e Classifier2 ha corretto, e No/Sì è il numero di istanze di test che Classifier1 ha corretto e Classifier2 ho corretto.

Questo calcolo della statistica del test presuppone che ogni cella nella tabella di contingenza utilizzata nel calcolo abbia un conteggio di almeno 25. La statistica del test ha una distribuzione Chi-quadrata con 1 grado di libertà.

Possiamo vedere che vengono utilizzati solo due elementi della tabella di contingenza, in particolare che gli elementi Sì/Sì e No/No non vengono utilizzati nel calcolo della statistica del test. Come tale, possiamo vedere che la statistica sta segnalando le diverse previsioni corrette o errate tra i due modelli, non la precisione o i tassi di errore. Questo è importante da capire quando si fanno affermazioni sul ritrovamento della statistica.

L’ipotesi predefinita, o ipotesi nulla, del test è che i due casi non sono d’accordo con la stessa quantità. Se l’ipotesi nulla viene respinta, suggerisce che ci sono prove che suggeriscono che i casi non sono d’accordo in modi diversi, che i disaccordi sono distorti.

Data la selezione di un livello di significatività, il valore p calcolato dal test può essere interpretato come segue:

  • p > alfa: non riescono a rifiutare H0, nessuna differenza nel disaccordo (ad esempio il trattamento non ha avuto alcun effetto).
  • p < = alfa: rifiutare H0, differenza significativa nel disaccordo (ad esempio, il trattamento ha avuto un effetto).

Interpretare il test di McNemar per classificatori

È importante prendere un momento per capire chiaramente come interpretare il risultato del test nel contesto di due modelli di classificatori di apprendimento automatico.

I due termini utilizzati nel calcolo del test McNemar catturano gli errori commessi da entrambi i modelli. In particolare, le celle No/Sì e Sì/No nella tabella di contingenza. Il test controlla se c’è una differenza significativa tra i conteggi in queste due celle. Questo è tutto.

Se queste celle hanno conteggi simili, ci mostra che entrambi i modelli commettono errori nella stessa proporzione, solo su diverse istanze del set di test. In questo caso, il risultato del test non sarebbe significativo e l’ipotesi nulla non sarebbe respinta.

Sotto l’ipotesi nulla, i due algoritmi dovrebbero avere lo stesso tasso di errore…

— Test statistici approssimativi per confrontare l’algoritmo di apprendimento della classificazione supervisionato, 1998.

Se queste celle hanno conteggi che non sono simili, mostra che entrambi i modelli non solo commettono errori diversi, ma in realtà hanno una diversa proporzione relativa di errori sul set di test. In questo caso, il risultato del test sarebbe significativo e rifiuteremmo l’ipotesi nulla.

Quindi possiamo rifiutare l’ipotesi nulla a favore dell’ipotesi che i due algoritmi abbiano prestazioni diverse quando addestrati sul particolare allenamento

— Test statistici approssimativi per confrontare l’algoritmo di apprendimento della classificazione supervisionato, 1998.

Possiamo riassumere questo come segue:

  • Fail to Reject Null Hypothesis: i classificatori hanno una proporzione simile di errori sul set di test.
  • Rifiuta ipotesi nulla: i classificatori hanno una proporzione diversa di errori sul set di test.

Dopo aver eseguito il test e aver trovato un risultato significativo, può essere utile segnalare una misura statistica dell’effetto per quantificare il risultato. Ad esempio, una scelta naturale sarebbe quella di segnalare i rapporti di probabilità, o la tabella di contingenza stessa, anche se entrambi questi presuppongono un lettore sofisticato.

Può essere utile segnalare la differenza di errore tra i due classificatori sul set di test. In questo caso, fai attenzione alle tue affermazioni poiché il test significativo non riporta la differenza di errore tra i modelli, ma solo la differenza relativa nella proporzione di errore tra i modelli.

Infine, nell’utilizzare il test di McNemar, Dieterich evidenzia due importanti limitazioni che devono essere considerate. Sono:

Nessuna misura della variabilità del set di allenamento o del modello.

Generalmente, il comportamento del modello varia in base ai dati di allenamento specifici utilizzati per adattarsi al modello.

Ciò è dovuto sia all’interazione del modello con istanze di formazione specifiche sia all’uso della casualità durante l’apprendimento. Adattare il modello su più set di dati di allenamento diversi e valutare l’abilità, come avviene con i metodi di ricampionamento, fornisce un modo per misurare la varianza del modello.

Il test è appropriato se le fonti di variabilità sono piccole.

Quindi, il test di McNemar dovrebbe essere applicato solo se riteniamo che queste fonti di variabilità siano piccole.

— Test statistici approssimativi per confrontare l’algoritmo di apprendimento della classificazione supervisionato, 1998.

Confronto meno diretto dei modelli

I due classificatori vengono valutati su un singolo set di test e il set di test dovrebbe essere più piccolo del set di allenamento.

Questo è diverso dai test di ipotesi che fanno uso di metodi di ricampionamento in quanto più, se non tutti, del set di dati è reso disponibile come set di test durante la valutazione (che introduce i propri problemi da una prospettiva statistica).

Questo offre meno di un’opportunità per confrontare le prestazioni dei modelli. Richiede che il set di test sia adeguatamente rappresentativo del dominio, spesso il che significa che il set di dati di test è grande.

Test di McNemar in Python

Il test di McNemar può essere implementato in Python utilizzando la funzione Statsmodels di mcnemar ().

La funzione prende la tabella di contingenza come argomento e restituisce la statistica di test calcolata e il valore P.

Esistono due modi per utilizzare la statistica in base alla quantità di dati.

Se nella tabella è presente una cella utilizzata nel calcolo della statistica del test con un conteggio inferiore a 25, viene utilizzata una versione modificata del test che calcola un valore p esatto utilizzando una distribuzione binomiale. Questo è l’utilizzo predefinito del test:

1
stat, p = mcnemar(tabella esatta=True)

in alternativa, se tutte le cellule utilizzate per il calcolo della statistica test nella tabella di contingenza hanno un valore di 25 o più, il calcolo del test può essere utilizzato.

1
stat, p = mcnemar(tabella esatta=False, correzione=True)

Siamo in grado di calcolare il McNemar sull’esempio di tabella di contingenza descritto sopra. Questa tabella di contingenza ha un piccolo conteggio in entrambe le celle di disaccordo e come tale deve essere utilizzato il metodo esatto.

L’esempio completo è elencato di seguito.

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

# Esempio di calcolo del test di mcnemar
da statsmodels.Statistica.contingency_tables importa mcnemar
# define contingency table
table = ,
]
# calcolare mcnemar test
risultato = mcnemar (tabella, esatto=Vero)
# riassumere il risultato
stampa(‘statistica=%.3f, valore p=%.3f ‘ % (risultato.statistica, risultato.pvalue))
# interpretare il p-value
alpha = 0.05
se risultato.pvalue > alpha:
stampa(‘Stesse proporzioni di errori (non riescono a rifiutare H0)’)
altro:
stampa (‘Diverse proporzioni di errori (rifiuta H0)’)

L’esecuzione dell’esempio calcola la statistica e il valore p nella tabella di contingenza e stampa i risultati.

Possiamo vedere che il test conferma fortemente che c’è pochissima differenza nei disaccordi tra i due casi. L’ipotesi nulla non respinta.

Mentre stiamo usando il test per confrontare i classificatori, affermiamo che non vi è alcuna differenza statisticamente significativa nei disaccordi tra i due modelli.

1
2

statistica=1.000, p-value=1.000
Stesse proporzioni di errori (non rifiutare H0)

Estensioni

in Questa sezione sono elencate alcune idee per ampliare il tutorial che si potrebbe desiderare di esplorare.

  • Trova un documento di ricerca in machine learning che fa uso del test di ipotesi statistica di McNemar.
  • Aggiorna l’esempio di codice in modo tale che la tabella di contingenza mostri una differenza significativa nel disaccordo tra i due casi.
  • Implementare una funzione che utilizzerà la versione corretta del test di McNemar in base alla tabella di contingenza fornita.

Se esplori una di queste estensioni, mi piacerebbe saperlo.

Ulteriori letture

Questa sezione fornisce più risorse sull’argomento se stai cercando di approfondire.

Papers

  • Note on the sampling error of the difference between correlated proportions or percentages, 1947.
  • Test statistici approssimativi per il confronto di algoritmi di apprendimento di classificazione supervisionati, 1998.

API

  • statsmodels.Statistica.contingency_tables.mcnemar() API

Articoli

  • McNemar test su Wikipedia
  • Tipo I e di tipo II errori su Wikipedia
  • tabella di Contingenza su wikipedia

Sommario

In questo tutorial, hai scoperto come utilizzare la McNemar test di ipotesi statistica test per confrontare apprendimento automatico di modelli di classificazione su un singolo set di dati di prova.

In particolare, hai imparato:

  • La raccomandazione del test di McNemar per i modelli che sono costosi da addestrare, che si adatta grandi modelli di apprendimento profondo.
  • Come trasformare i risultati di previsione da due classificatori in una tabella di contingenza e come la tabella viene utilizzata per calcolare la statistica nel test di McNemar.
  • Come calcolare il test di McNemar in Python e interpretare e riportare il risultato.

Avete domande?
Fai le tue domande nei commenti qui sotto e farò del mio meglio per rispondere.

Ottenere una maniglia sulle statistiche per l’apprendimento automatico!

Metodi statistici per l'apprendimento automatico

Sviluppare una comprensione operativa delle statistiche

…scrivendo righe di codice in python

Scopri come nel mio nuovo Ebook:
Metodi statistici per l’apprendimento automatico

Fornisce tutorial di autoapprendimento su argomenti come:
Test di ipotesi, correlazione, statistiche non parametriche, Ricampionamento e molto altro…

Scopri come trasformare i dati in conoscenza

Salta gli accademici. Solo risultati.

Vedere cosa c’è dentro

Tweet Condividi Condividi

You might also like

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.