Como calcular o teste de McNemar para comparar dois classificadores de aprendizagem de máquinas

Tweet Share

última atualização em 8 de agosto de 2019

a escolha de um teste de hipótese estatística é um problema aberto desafiador para interpretar resultados de aprendizagem de máquinas.

Em seu amplamente citado de 1998, papel, Thomas Dietterich recomendado o do teste de McNemar, nos casos em que é caro ou é impraticável para treinar várias cópias do classificador de modelos.

isto descreve a situação actual com modelos de aprendizagem profunda que são ambos muito grandes e são treinados e avaliados em grandes conjuntos de Dados, Muitas vezes exigindo dias ou semanas para formar um único modelo.

neste tutorial, você vai descobrir como usar o teste de hipótese estatística de McNemar para comparar modelos classificadores de aprendizagem por máquina em um único conjunto de dados de teste.

depois de completar este tutorial, você saberá:

  • the recommendation of the Mcnemar’s test for models that are expensive to train, which suits large deep learning models.
  • How to transformate prediction results from two classifiers into a contingency table and how the table is used to calculate the statistic in the Mcnemar’s test.
  • How to calculate the Mcnemar’s test in Python and interpret and report the result.

kick-start your project with my new book Statistics for Machine Learning, including step-by-step tutorials and the Python source code files for all examples.Vamos começar.

How to Calculate Mcnemar's Test for Two Machine Learning Classificators

How to Calculate Mcnemar’s Test for Two Machine Learning Classificators
Photo by Mark Kao, some rights reserved.

Tutorial Overview

este tutorial é dividido em cinco partes; eles são:

  1. Estatística, Testes de Hipótese para uma Aprendizagem mais Profunda
  2. Tabela de Contingência
  3. do Teste de McNemar Estatística
  4. Interpretar o do Teste de McNemar para Classificadores
  5. do Teste de McNemar em Python

Precisa de ajuda com Estatísticas de Aprendizado de Máquina?

Tome agora o meu curso gratuito de colisão de 7 dias (com código de exemplo).

Clique para se inscrever e também obter uma versão em PDF do curso.

faça O Download GRATUITO do Mini-Curso

Estatística, Testes de Hipótese para uma Aprendizagem mais Profunda

Em seu importante e amplamente citado 1998 papel sobre o uso da estatística, testes de hipótese para comparar os classificadores intitulado “Aproximado de Testes Estatísticos para a Comparação de Classificação Supervisionada de Algoritmos de Aprendizagem”, Thomas Dietterich recomenda o uso de do teste de McNemar.

especificamente, o teste é recomendado nos casos em que os algoritmos que estão sendo comparados só podem ser avaliados uma vez, como por exemplo: em um conjunto de testes, ao contrário de avaliações repetidas através de uma técnica de recolocação, como K-fold cross-validation.

For algorithms that can be executed only once, Mcnemar’s test is the only test with acceptable Type I error.

— Aproximate Statistical Tests for Comparing Supervised Classification Learning Algorithm, 1998.Especificamente, o estudo de Dietterich preocupou-se com a avaliação de diferentes testes estatísticos de hipóteses, alguns operando sobre os resultados de métodos de recolocação. A preocupação do estudo foi um erro de tipo I baixo, ou seja, o teste estatístico relatando um efeito quando, de fato, nenhum efeito estava presente (falso positivo).

testes estatísticos que podem comparar modelos baseados em um único conjunto de testes é uma consideração importante para a aprendizagem moderna de máquinas, especificamente no campo da aprendizagem profunda.

modelos de aprendizagem profunda são muitas vezes grandes e operam em conjuntos de dados muito grandes. Juntos, estes fatores podem significar que o treinamento de um modelo pode levar dias ou mesmo semanas em hardware moderno rápido.

isto exclui a utilização prática de métodos de recolocação para comparar modelos e sugere a necessidade de utilizar um teste que possa funcionar com os resultados da avaliação de modelos formados num único conjunto de dados de ensaio.

The Mcnemar’s test may be a suitable test for evaluating these large and slow-to-train deep learning models.

Contingency Table

The Mcnemar’s test operates upon a contingency table.

Antes de mergulhar no teste, vamos tirar um momento para entender como a tabela de contingência para dois classificadores é calculada.

uma tabela de contingência é uma tabela ou Contagem de duas variáveis categóricas. No caso do teste de McNemar, estamos interessados em variáveis binárias corretas / incorretas ou sim / não para um controle e um tratamento ou dois casos. Isto é chamado de uma tabela de contingência 2×2.

a tabela de contingência pode não ser intuitiva à primeira vista. Vamos torná-lo concreto com um exemplo trabalhado.

considere que temos dois classificadores treinados. Cada classificador faz predição de classe binária para cada um dos 10 exemplos em um conjunto de dados de teste. As previsões são avaliadas e determinadas como sendo corretas ou incorretas.

podemos então resumir estes resultados numa tabela, como se segue:

1
2
3
4
5
6
7
8
9
10
11

Instância,Classifier1 Correto,Classifier2 Correto
1YesNo
2NoNo
3NoYes
4NoNo
5YesYes
6YesYes
7YesYes
8NoNo
9YesNo
10YesYes

Podemos ver que Classifier1 tenho 6 correto, ou uma precisão de 60%, e Classifier2 tem 5 correto, ou 50% de precisão no conjunto de teste.

a tabela pode agora ser reduzida a uma tabela de contingência.

a tabela de contingência baseia-se no fato de que ambos os classificadores foram treinados exatamente nos mesmos dados de treinamento e avaliados exatamente nas mesmas instâncias de dados de teste.

a tabela de contingência tem a seguinte estrutura:

1
2
3

Classifier2 Correto,Classifier2 Incorreto
Classifier1 Correto ????
Classificador1 Incorrecto ?? ??

No caso da primeira célula da tabela, devemos somar o número total de instâncias de teste que Classifier1 acertou e Classifier2 acertou. Por exemplo, a primeira instância que ambos os classificadores previram corretamente foi a instância número 5. O número total de instâncias que ambos os classificadores previram corretamente foi 4.

outra maneira mais programática de pensar sobre isso é somar cada combinação de sim/não na tabela de resultados acima.

1
2
3

Classifier2 Correto,Classifier2 Incorreto
Classifier1 Correto Sim/YesYes/Não
Classifier1 Incorreta Não/Sim Não/Não

Os resultados organizados em uma tabela de contingência são como segue:

1
2
3

Classifier2 Correto,Classifier2 Incorreto
Classifier1 Correto 42
Classifier1 Incorreto 1 3

do Teste de McNemar Estatística

do teste de McNemar é um par não-paramétricos ou de distribuição livre de teste de hipótese estatística.

também é menos intuitiva do que alguns outros testes estatísticos de hipótese.

The Mcnemar’s test is checking if the disagreements between two cases match. Tecnicamente, isto é referido como a homogeneidade da tabela de contingência (especificamente a homogeneidade marginal). Portanto, o teste de McNemar é um tipo de teste de homogeneidade para tabelas de contingência.

o teste é amplamente utilizado na medicina para comparar o efeito de um tratamento com um controlo.

em termos de comparação de dois algoritmos de classificação binária, o teste está comentando se os dois modelos discordam da mesma forma (ou não). Não é comentar se um modelo é mais ou menos preciso ou propenso a erros do que outro. Isto é claro quando olhamos para a forma como a estatística é calculada.

a estatística de ensaio de McNemar é calculada como:

1
estatística = (Sim/Não – Sim/Não)^2 / (Sim/Não + Sim/Não)

Onde Sim/Não é o número de instâncias de teste que Classifier1 acertou e Classifier2 tem incorreto, e Não/Sim é a contagem de instâncias de teste que Classifier1 tem incorreto e Classifier2 acertou.

este cálculo da Estatística do ensaio pressupõe que cada célula da tabela de contingência utilizada no cálculo tem uma contagem de, pelo menos, 25. A estatística do teste tem uma distribuição qui-quadrado com 1 grau de liberdade.

podemos ver que apenas dois elementos da tabela de contingência são utilizados, especificamente que os elementos Sim/Sim e Não / Não Não não são utilizados no cálculo da estatística de teste. Como tal, podemos ver que a estatística está relatando as diferentes previsões corretas ou incorretas entre os dois modelos, não a precisão ou as taxas de erro. Isto é importante para entender quando se faz reivindicações sobre a descoberta da estatística.

a suposição padrão, ou hipótese nula, do teste é que os dois casos discordam da mesma quantidade. Se a hipótese nula for rejeitada, ela sugere que há evidências que sugerem que os casos discordam de maneiras diferentes, que os desacordos são distorcidos.

dada a selecção de um nível de significância, o valor p calculado pelo ensaio pode ser interpretado do seguinte modo ::

  • p > alfa: não rejeitar H0, nenhuma diferença no desacordo (por exemplo, o tratamento não teve efeito).
  • p <= Alfa: rejeitar H0, diferença significativa no desacordo (por exemplo, o tratamento teve um efeito).

Interpretar o do Teste de McNemar para Classificadores

é importante ter um momento para compreender claramente como interpretar o resultado do teste no contexto de dois aprendizado de máquina do classificador modelos.

the two terms used in the calculation of the Mcnemar’s Test capture the errors made by both models. Especificamente, as células ” Não ” / ” Sim ” e ” sim ” / ” não ” na tabela de contingência. O teste verifica se há uma diferença significativa entre as contagens nestas duas células. É tudo.

se estas células têm contagens semelhantes, mostra – nos que ambos os modelos cometem erros na mesma proporção, apenas em diferentes instâncias do conjunto de testes. Neste caso, o resultado do teste não seria significativo e a hipótese nula não seria rejeitada.

sob a hipótese nula, os dois algoritmos devem ter a mesma taxa de erro…

— Aproximate Statistical Tests for Comparing Supervised Classification Learning Algorithm, 1998.

se estas células têm contagens que não são semelhantes, mostra que ambos os modelos não só cometem erros diferentes, mas na verdade têm uma proporção relativa diferente de erros no conjunto de testes. Neste caso, o resultado do teste seria significativo e rejeitaríamos a hipótese nula.

Assim, podemos rejeitar a hipótese nula em favor da hipótese de que os dois algoritmos têm desempenho diferente quando treinados em particular da formação

— Aproximado de Testes Estatísticos para a Comparação de Classificação Supervisionada de Algoritmo de Aprendizagem, de 1998.

podemos resumir da seguinte forma:

  • falha em rejeitar a hipótese nula: classificadores têm uma proporção similar de erros no conjunto de testes.
  • rejeita a hipótese nula: os classificadores têm uma proporção diferente de erros no conjunto de testes.

após a realização do teste e a obtenção de um resultado significativo, pode ser útil comunicar uma medida estatística de efeito a fim de quantificar o resultado. Por exemplo, uma escolha natural seria relatar as razões de probabilidade, ou a tabela de contingência em si, embora ambos assumam um leitor sofisticado.

pode ser útil relatar a diferença de erro entre os dois classificadores no conjunto de teste. Neste caso, tenha cuidado com as suas alegações, pois o teste significativo não relata a diferença de erro entre os modelos, apenas a diferença relativa na proporção de erro entre os modelos.Finalmente, ao usar o teste de McNemar, Dietterich destaca duas limitações importantes que devem ser consideradas. São:

nenhuma medida de Conjunto de formação ou variabilidade do modelo.

Geralmente, o comportamento do modelo varia com base nos dados de treinamento específicos usados para se ajustar ao modelo.

isto deve-se tanto à interacção do modelo com instâncias de formação específicas como ao uso da aleatoriedade durante a aprendizagem. Encaixar o modelo em múltiplos conjuntos de dados de treinamento diferentes e avaliar a habilidade, como é feito com métodos de recolocação, fornece uma maneira de medir a variância do modelo.O teste é apropriado se as fontes de variabilidade forem pequenas.Por conseguinte, o teste de McNemar só deve ser aplicado se considerarmos que estas fontes de variabilidade são pequenas.

— Aproximate Statistical Tests for Comparing Supervised Classification Learning Algorithm, 1998.

menor comparação direta de modelos

os dois classificadores são avaliados em um único conjunto de teste, e espera-se que o conjunto de teste seja menor do que o conjunto de treinamento.

isto é diferente dos testes de hipótese que fazem uso de métodos de recolocação como mais, se não todos, do conjunto de dados é disponibilizado como um conjunto de teste durante a avaliação (que introduz seus próprios problemas a partir de uma perspectiva estatística).

isto proporciona menos uma oportunidade para comparar o desempenho dos modelos. Ele requer que o conjunto de testes seja adequadamente representativo do domínio, muitas vezes significando que o conjunto de dados de teste é grande.

Mcnemar’s Test in Python

The Mcnemar’s test can be implemented in Python using the mcnemar() Statsmodels function.

a função toma a tabela de contingência como argumento e devolve a estatística de ensaio calculada e o valor-p.

existem duas formas de utilizar a estatística dependendo da quantidade de dados.

se houver uma célula na tabela que é usada no cálculo da Estatística do teste que tem uma contagem inferior a 25, então uma versão modificada do teste é usada que calcula um valor p exato usando uma distribuição binomial. Esta é a utilização predefinida do teste:

1
estatística, p = mcnemar(tabela exata=True)

como alternativa, se todas as células utilizadas no cálculo da estatística de teste na tabela de contingência de ter um valor de 25 ou mais, então o padrão de cálculo do teste pode ser usado.

1
estatística, p = mcnemar(tabela exata=False, correção=True)

Podemos calcular a McNemar no exemplo de tabela de contingência descritos acima. Esta tabela de contingência tem uma pequena contagem em ambas as células de desacordo e, como tal, o método exato deve ser usado.

o exemplo completo está listado abaixo.

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

# Exemplo de cálculo do uso do teste de mcnemar
a partir de statsmodels.estatistica.contingency_tables de importação de mcnemar
# define tabela de contingência
tabela = ,
]
# calcular o uso do teste de mcnemar
resultado = mcnemar(tabela exata=True)
# resumir a constatação
print(‘estatística=%.3f, valor p=%.3f ‘ % (resultado.estatística, resultado.pvalue))
# interpretar o valor p
Alfa = 0, 05
se resultar.pvalue > alpha:
print (‘Same proportions of errors (fail to reject H0)’)
else:
imprimir (‘diferentes proporções de erros (rejeitar H0)’)

a execução do exemplo calcula a estatística e o valor p na tabela de contingência e imprime os resultados.

podemos ver que o teste confirma fortemente que há muito pouca diferença nas divergências entre os dois casos. A hipótese nula não rejeitada.Como estamos usando o teste para comparar classificadores, afirmamos que não há diferença estatisticamente significativa nas divergências entre os dois modelos.

1
2

estatística=1.000, p-valor=1.000
Mesmas proporções de erros (falha ao rejeitar H0)

Extensões de

Esta seção lista algumas ideias para estender o tutorial que você pode desejar explorar.

  • Find a research paper in machine learning that makes use of the Mcnemar’s statistical hypothesis test.
  • actualize o exemplo de código de modo a que a tabela de contingência mostre uma diferença significativa de desacordo entre os dois casos.
  • implemente uma função que usará a versão correta do teste de McNemar com base na tabela de contingência fornecida.Se explorar alguma destas extensões, adoraria saber.

    Leitura Adicional

    esta secção fornece mais recursos sobre o tema se você está procurando ir mais fundo.

    Papers

    • Note on the sampling error of the difference between correlated proportions or percentages, 1947.
    • approximate Statistical Tests for Comparing Supervised Classification Learning Algorithms, 1998.

    API

    • statsmodels.estatistica.rubricas de contingência.mcnemar() API

    Artigos

    • do teste de McNemar na Wikipédia
    • Tipo I e tipo II erros na Wikipédia
    • tabela de Contingência na wikipédia

    Resumo

    neste tutorial, você descobre como utilizar o do teste de McNemar teste de hipótese estatística para comparar aprendizado de máquina do classificador modelos em um único conjunto de dados de teste.Especificamente, aprendeu:

    • the recommendation of the Mcnemar’s test for models that are expensive to train, which suits large deep learning models.
    • How to transformate prediction results from two classifiers into a contingency table and how the table is used to calculate the statistic in the Mcnemar’s test.
    • How to calculate the Mcnemar’s test in Python and interpret and report the result.Tem alguma pergunta?Faça suas perguntas nos comentários abaixo e farei o meu melhor para responder.

      controle as estatísticas para a aprendizagem de máquinas!

      métodos estatísticos para a aprendizagem de máquinas

      desenvolver uma compreensão de trabalho das estatísticas

      …escrevendo linhas de código em python

      Descubra como no meu novo e-Book:
      Métodos Estatísticos para Machine Learning

      fornece auto-estudo tutoriais sobre temas como:
      Testes de Hipótese, Correlação não paramétrica de Estatísticas, Reamostragem, e muito mais…

      descubra como transformar dados em conhecimento

      Skip the Academics. Apenas Resultados.Veja o que está dentro

      Tweet Share

You might also like

Deixe uma resposta

O seu endereço de email não será publicado.