Desequilíbrio de classe no aprendizado de máquina supervisionado

47

Essa é uma pergunta em geral, não específica para nenhum método ou conjunto de dados. Como lidamos com um problema de desequilíbrio de classe no aprendizado de máquina supervisionado, em que o número de 0 é de cerca de 90% e o número de 1 é de cerca de 10% em seu conjunto de dados.

Uma das maneiras que sigo é a amostragem para equilibrar o conjunto de dados, treinar o classificador e repeti-lo para várias amostras.

Eu sinto que isso é aleatório. Existe alguma estrutura para abordar esse tipo de problema.

NG_21
fonte

Respostas:

45

Existem muitas estruturas e abordagens. Esse é um problema recorrente.

Exemplos:

  • Subamostragem . Selecione uma subamostra dos conjuntos de zeros, para que seu tamanho corresponda ao conjunto de zeros. Há uma perda óbvia de informações, a menos que você use uma estrutura mais complexa (por exemplo, eu dividiria o primeiro conjunto em 9 subconjuntos menores e mutuamente exclusivos, treinaria um modelo em cada um deles e agruparia os modelos).
  • Sobre-amostragem . Produza artificiais até a proporção ser de 50% / 50%. Meu empregador anterior usou isso por padrão. Existem muitas estruturas para isso (acho que o SMOTE é o mais popular, mas prefiro truques mais simples como o Noisy PCA ).
  • Uma aula de aprendizagem . Suponha que seus dados tenham alguns pontos reais (esses) e muito ruído aleatório que não existe fisicamente vazou no conjunto de dados (qualquer coisa que não seja um é ruído). Use um algoritmo para excluir os dados em vez de um algoritmo de classificação.
  • Treinamento sensível a custos . Use uma função de custo assimétrico para equilibrar artificialmente o processo de treinamento.

Algumas revisões acesas, em ordem crescente de complexidade técnica \ nível de detalhes:

Ah, e a propósito, 90% / 10% não é desequilibrado. Os conjuntos de dados de fraude de transação de cartão geralmente são divididos em 99,97% / 0,03%. Isso está desequilibrado.

Lucas Gallindo
fonte
Acabei de notar que o Noisy PCA que citei pode ser visto como Sobreamostragem, Regularização ou Tremulação, dependendo dos detalhes da implementação.
Lucas Gallindo
Obrigado Lucas pelos recursos. Eu tenho um problema peculiar em mãos, onde todas as minhas amostras são rotuladas como '1'. No entanto, na realidade, essas amostras têm uma impureza mínima, ou seja, existem alguns registros que, na verdade, deveriam ser '0', mas são rotulados como '1'. Eu acredito que esse tipo de problema pertence a uma classificação de classe. O meu entendimento está correto. Existe uma estrutura comum usada para identificá-los, inicialmente eu estava tentando agrupar, mas isso não está funcionando.
NG_21
1
Todos esses algoritmos precisam de alguns dados rotulados como zero e alguns como um com 100% de certeza sobre a exatidão do rótulo (ou algo muito próximo de 100%). Você tem todos, mas sabe que uma pequena porcentagem desses dados está incorreta, uma situação diferente. Sem nenhum conhecimento sobre o domínio do aplicativo, eu o atacava usando a Detecção de Anomalias e depois rotulava as anomalias como zero. Em seguida, tente algum algoritmo de classificação (One Class Learning, talvez). Com conhecimento sobre o domínio do aplicativo, eu procuraria a ajuda de um especialista em domínio antes de qualquer coisa.
Lucas Gallindo 21/01
13

Isso depende muito do método de aprendizagem. A maioria das abordagens de propósito geral tem uma (ou várias) maneiras de lidar com isso. Uma correção comum é atribuir uma penalidade de classificação incorreta mais alta à classe minoritária, forçando o classificador a reconhecê-las (SVM, regressão logística, redes neurais, ...).

Alterar a amostragem também é uma possibilidade, como você mencionou. Nesse caso, a superamostragem da classe minoritária geralmente é uma solução melhor do que a subamostragem da classe majoritária.

Alguns métodos, como florestas aleatórias, não precisam de modificações.

Marc Claesen
fonte
Obrigado. Você pode apontar para qualquer recurso em que ele seja explicado com alguns exemplos. Existe uma maneira de conseguir isso no R / Python sem recorrer à codificação do algoritmo do zero.
NG_21
1
Verifique a primeira função neste pacote R: cran.r-project.org/web/packages/unbalanced/unbalanced.pdf
Lucas Gallindo
7
Por que a floresta aleatória não precisa de modificações? Eu acho que você ainda pode peso da aula, designe
mac
4

Frequentemente, o problema não é a frequência, mas a quantidade absoluta de casos na classe minoritária. Se você não possui variação suficiente no destino quando comparado com a variação nos recursos, isso pode significar que o algoritmo não pode classificar as coisas com muita precisão.

Uma coisa é que a penalidade de classificação incorreta pode ser usada na etapa de classificação e não na etapa de estimativa de parâmetros, se houver. Alguns métodos não têm conceito de parâmetro, apenas produzem rótulos de classe ou probabilidades de classe.

Quando você possui um estimador probabilístico, pode tomar uma decisão de classificação com base em bases teóricas da informação ou na combinação de valor comercial.

Analista
fonte
1

Adicione dois truques: 1. use CDF, conte a frequência em seus dados de treinamento ou use uma validação muito grande (se o seu conjunto de testes não mudar, mas o conjunto de validação deve ter a mesma distribuição que o conjunto de treinamento), classifique sua previsão e obtenha primeiro X% (sua contagem da frequência anterior) para uma classe e as outras são / 2. amostra ponderada, o modelo tenderá para a classe de amostra ponderada, você pode usar a variação da amostra v. weighti = 1/2 (1- (vmax - vi) / vmax)

user102423
fonte