Melhor maneira de obter a média do escore F com classes desequilibradas


7

Eu tenho um conjunto de dados com classes desequilibradas. Três classes compõem cerca de 60% dos dados. Além disso, tenho divisões de teste diferentes que causam um desequilíbrio. Por exemplo:

Conjunto de trens: label_1 ... label_n

Conjunto de teste: label_1, label_3, label_9

Isso significa que, embora eu tenha apenas três rótulos no meu conjunto de testes, ele pode ser previsto como 1 de n rótulos. Então, quando eu uso sklearn.metrics.precision_recall_fscore_support , recebo uma matriz com muitos zeros.

Meu problema é que preciso obter uma pontuação F média em todas as classes, em vez de um valor por classe. No entanto, apenas uma média da matriz retornada da função sklearn acima sempre será um valor muito baixo, pois existem muitos zeros. Por outro lado, assumir uma média acima de valores diferentes de zero também não faz sentido para mim, pois o número total de previsões em potencial deve ser o número total de classes.

Existe uma boa maneira de obter uma média nesse caso? Eu tentei usar as opções micro, macro e média ponderada, mas não tenho certeza de qual delas está certa.

Alguém poderia me ajudar com isso?

Respostas:


1

"Eu não tenho certeza qual é o certo"

Aqui não há certo ou errado.

O desempenho de um classificador pode ser representado usando uma matriz . Ao tentar representar o desempenho usando uma única métrica, você perde algumas informações.nn

Em outras palavras, como é impossível recuperar a matriz de confusão com base em uma única métrica, há uma perda de informações quando consideramos apenas uma única métrica para interpretar o desempenho de um classificador.

Mas ainda assim ... para decidir qual classificador é melhor entre várias alternativas - precisamos de uma única métrica ...

Qual métrica única representa melhor o desempenho? Essa é uma questão subjetiva. É aqui que os estatísticos se tornam criativos. É por isso que tantas métricas foram propostas.

Métricas diferentes 'preferem' diferentes tipos de informações que podem ser extraídas da matriz de confusão. Cabe a você decidir qual captura as informações que considera mais "importantes".

Alguns critérios que você pode considerar:

  • Todas as classes são igualmente importantes / todas as instâncias são igualmente importantes?
  • Classificação e erros de classificação são igualmente "importantes"?
  • Os falsos positivos e falsos negativos são igualmente "importantes"?
  • O desempenho deve ser absoluto ou relativo a algum classificador aleatório?
  • A métrica deve ser linear em algum sentido?
  • etc.

Obrigado pela sua resposta! Entendo que não há uma métrica específica em que possa me concentrar, mas, neste caso, escolhi o F-score, dado o desequilíbrio de classes. No entanto, minha pergunta é realmente como faço para obter uma representação média da pontuação F para o classificador como um todo, em vez de por classe? A média de uma matriz esparsa fornece valores muito baixos, mas não seria correto simplesmente calcular a média acima dos valores diferentes de zero. Em essência, o meu problema poderia ser reduzido para a melhor maneira de ter uma média sobre uma matriz esparsa, onde os valores diferentes de zero deve ser ponderada mais do que os de zero
SanjanaS801

"... mas não seria correto simplesmente calcular a média acima dos valores diferentes de zero". Mais uma vez - não há certo ou errado. Micro, macro e ponderado - todos têm sua própria semântica. O que você quer que sua média represente? Cabe a você decidir. Se você deseja que valores diferentes de zero sejam mais ponderados - vá em frente.
Lior Kogan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.