Eu rotulei dados compostos por 10000 exemplos positivos e 50000 exemplos negativos, fornecendo um total de 60000 exemplos. Obviamente esses dados estão desequilibrados.
Agora, digamos que quero criar meu conjunto de validação e quero usar 10% dos meus dados para fazer isso. Minha pergunta é a seguinte:
Devo garantir que meu conjunto de validação TAMBÉM esteja desequilibrado (como um aceno para a verdadeira distribuição do conjunto de treinamento) ou devo garantir que meu conjunto de validação esteja equilibrado? Por exemplo, meu conjunto de validação deve ser feito de:
- 10% de exemplo positivo + 10% de negativo, dando mais de 1000 e 5000 exemplos. (Este conjunto de validação reflete o desequilíbrio dos dados originais).
- Ou o conjunto de validação deve ser feito com, digamos, 10% de positivo, dando 1000+ e (10/5 = 2%) negativos, dando também 1000 exemplos?
(Mesma pergunta para o conjunto de teste).
Parece haver muitos métodos para treinar com dados desequilibrados, mas não onde posso encontrar as melhores práticas para determinar se meu conjunto de validação deve ou não refletir o desequilíbrio original ou não. Por fim, NÃO estou fazendo validação cruzada, usarei um único conjunto de validação e uma rede neural.
Obrigado!
Respostas:
O objetivo do conjunto de validação é selecionar a época / iteração em que a rede neural provavelmente terá o melhor desempenho no conjunto de teste. Posteriormente, é preferível que a distribuição de classes no conjunto de validação reflita a distribuição de classes no conjunto de testes, para que as métricas de desempenho no conjunto de validação sejam uma boa aproximação das métricas de desempenho no conjunto de teste. Em outras palavras, o conjunto de validação deve refletir o desequilíbrio dos dados originais.
fonte
Usando um treinamento naturalmente desequilibrado e dados de teste, deparei-me com um cenário em que meu modelo parecia melhorar com o tempo, mas na verdade estava apenas memorizando as amostras das classes minoritárias no conjunto de treinamento e aprendendo a prever sempre a classe majoritária para todo o resto.
Diagnosticei esse problema equilibrando meus dados de teste e observando que a precisão e a perda dos dados de teste pioraram com mais épocas (o que não era o caso dos dados de teste desequilibrados).
Outra maneira de diagnosticar problemas como esse seria usar métricas como sensibilidade, especificidade ou precisão para uma única classe, em vez de analisar a precisão / perda geral. Esta postagem do blog entra em mais detalhes sobre isso e fornece uma amostra de implementação dessas métricas em Keras http://www.deepideas.net/unbalanced-classes-machine-learning/
Acho que a solução certa depende da aplicação do seu modelo no mundo real e da importância da precisão das classes minoritárias. Por exemplo, se você está treinando algo como o imagenet e percebe que ele tem baixa precisão para a classe "lesma do mar" que provavelmente está ok. Mas se você estivesse treinando um modelo para prever se alguém tem câncer, a precisão da classe minoritária seria muito importante.
fonte