Como calcular precisão e recall em uma matriz de confusão 3 x 3
12
Predicted
class
Cat Dog Rabbit
Actual class
Cat 5 3 0
Dog 2 3 1
Rabbit 0 2 11
Como posso calcular a precisão e recuperar, para que fique fácil calcular a pontuação F1. A matriz de confusão normal é uma dimensão 2 x 2. No entanto, quando se torna 3 x 3, não sei como calcular precisão e recordação.
Se você especificar as definições de precisão (também conhecido como valor preditivo positivo PPV) e recall (também conhecido como sensibilidade), verá que elas se relacionam a uma classe independente de qualquer outra classe:
Lembre-se ou sensibilidade é a proporção de casos corretamente identificados como pertencentes à classe c entre todos os casos que realmente pertencem à classe c .
(Como temos um caso realmente pertencente a " c ", qual é a probabilidade de prever isso corretamente?)
Precisão ou valor preditivo positivo PPV é a proporção de casos corretamente identificados como pertencentes à classe c entre todos os casos em que o classificador afirma que pertence à classe c .
Em outras palavras, daqueles casos previstos para pertencer à classe c , qual fração realmente pertence à classe c ? (Dada a previsão " c ", qual é a probabilidade de estar correta?)
valor preditivo negativo O VPN desses casos predisse não pertencer à classe c , qual fração realmente não pertence à classe c ? (Dada a previsão "não c ", qual é a probabilidade de estar correta?)
Assim, você pode calcular a precisão e recordar para cada uma das suas aulas. Para tabelas de confusão de várias classes, esses são os elementos diagonais divididos por suas somas de linha e coluna, respectivamente:
Muito obrigado. Eu já entendo a analogia descrita em sua solução. Vou ler papel. Eu aceitarei isso como uma resposta. Eu não entendo PPV E NPV.Por favor, explique esses conceitos tão gráficos quanto os Sens e Spec foram explicados e eu aceitarei sua resposta.
user22149
3
Ao reduzir os dados para escolhas forçadas (classificação) e não registrar se houve "fechamentos", você obtém estimativas estatísticas de precisão mínima com informações mínimas, além de assumir secretamente uma função estranha de utilidade / perda / custo e usar limites arbitrários . Seria muito melhor usar o máximo de informações, o que incluiria as probabilidades de pertencer à classe e não de escolhas forçadas.
Se você simplesmente deseja o resultado, meu conselho seria não pensar muito e usar as ferramentas à sua disposição. Aqui está como você pode fazer isso em Python;
A seguir, é apresentado um exemplo de uma matriz de confusão de várias classes, assumindo que nossos rótulos de classe são A, B e C
A / P A B C Soma
A 10 3 4 17
B 2 12 6 20
C 6 3 9 18
Soma 18 18 19 55
Agora calculamos três valores para Precision e Recall cada um e os chamamos de Pa, Pb e Pc; e similarmente Ra, Rb, Rc.
Sabemos Precisão = TP / (TP + FP); portanto, para Pa, o verdadeiro positivo será o real A previsto como A, ou seja, 10, o restante das duas células dessa coluna, seja B ou C, torna o falso positivo. então
Pa = 10/18 = 0,55 Ra = 10/17 = 0,59
Agora, precisão e recuperação para a classe B são Pb e Rb. Para a classe B, o verdadeiro positivo é o real B previsto como B, ou seja, a célula que contém o valor 12 e o restante das duas células dessa coluna produzem Falso Positivo, portanto
Pb = 12/18 = 0,67 Rb = 12/20 = 0,6
Da mesma forma Pc = 9/19 = 0,47 Rc = 9/18 = 0,5
O desempenho geral do classificador será determinado pela Precisão média e Recuperação média. Para isso, multiplicamos o valor de precisão de cada classe pelo número real de instâncias dessa classe e, em seguida, adicionamos e dividimos com o número total de instâncias. Gostar ,
Ao reduzir os dados para escolhas forçadas (classificação) e não registrar se houve "fechamentos", você obtém estimativas estatísticas de precisão mínima com informações mínimas, além de assumir secretamente uma função estranha de utilidade / perda / custo e usar limites arbitrários . Seria muito melhor usar o máximo de informações, o que incluiria as probabilidades de pertencer à classe e não de escolhas forçadas.
fonte
A maneira mais fácil é não usar confusion_matrix, use o rating_report (), ele fornecerá tudo o que você sempre precisou, felicidades ...
Edit:
este é o formato para confusion_matrix ():
[[TP, FN]
[FP, TN]]
E o relatório de classificação fornece tudo isso
fonte
Se você simplesmente deseja o resultado, meu conselho seria não pensar muito e usar as ferramentas à sua disposição. Aqui está como você pode fazer isso em Python;
Para obter a seguinte saída
fonte
A seguir, é apresentado um exemplo de uma matriz de confusão de várias classes, assumindo que nossos rótulos de classe são A, B e C
A / P A B C Soma
A 10 3 4 17
B 2 12 6 20
C 6 3 9 18
Soma 18 18 19 55
Agora calculamos três valores para Precision e Recall cada um e os chamamos de Pa, Pb e Pc; e similarmente Ra, Rb, Rc.
Sabemos Precisão = TP / (TP + FP); portanto, para Pa, o verdadeiro positivo será o real A previsto como A, ou seja, 10, o restante das duas células dessa coluna, seja B ou C, torna o falso positivo. então
Pa = 10/18 = 0,55 Ra = 10/17 = 0,59
Agora, precisão e recuperação para a classe B são Pb e Rb. Para a classe B, o verdadeiro positivo é o real B previsto como B, ou seja, a célula que contém o valor 12 e o restante das duas células dessa coluna produzem Falso Positivo, portanto
Pb = 12/18 = 0,67 Rb = 12/20 = 0,6
Da mesma forma Pc = 9/19 = 0,47 Rc = 9/18 = 0,5
O desempenho geral do classificador será determinado pela Precisão média e Recuperação média. Para isso, multiplicamos o valor de precisão de cada classe pelo número real de instâncias dessa classe e, em seguida, adicionamos e dividimos com o número total de instâncias. Gostar ,
Precisão média = (0,55 * 17 + 0,67 * 20 + 0,47 * 18) / 55 = 31,21 / 55 = 0,57 Recuperação média = (0,59 * 17 + 0,6 * 20 + 0,5 * 18) / 55 = 31,03 / 55 = 0,56
Espero que ajude
fonte