Os dados de treinamento estão desequilibrados - mas meu conjunto de validação também deve ser?

9

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!

Spacey
fonte
Não tenho uma referência específica para isso, mas acho que exista uma porque: a) publiquei trabalhos que envolviam divisões de treinamento / validação e sempre construí a divisão para que a taxa positiva geral fosse equivalente nos dois conjuntos ; b) Lembro-me de comentários de revisores indicando que é isso que você deve fazer.
gammer
@ gammer Desculpe, você quer dizer que escolheu o método (1) no meu post?
Spacey
Sim, o primeiro
jogador
@ gammer Sim, veja isso é o que eu pensava a princípio, mas parece um pouco estranho quanto mais penso nisso, pois se confiarmos em nosso conjunto de treinamento, certamente deveremos também respeitar sua distribuição e tentar replicar isso no conjunto de validação Também ...
Spacey
Eu acho que talvez dependa de como o conjunto de dados original foi coletado. É uma amostra aleatória? Nesse caso, a divisão balanceada faz sentido porque torna a validação definida mais representativa da população. Se for retrospectivo (por exemplo, controle de caso), poderá ser diferente. Não tenho certeza. Eu te contei minha experiência. Espero que você obtenha uma resposta definitiva. Se você descobrir, poste uma resposta.
gammer

Respostas:

8

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.

Franck Dernoncourt
fonte
Eu suspeitava do mesmo Franck. Agora, com isso dito (esse conjunto de validação deve refletir a distribuição de dados distorcida original), você concorda que, no conjunto de treinamento, nós distorcemos os dados?
Spacey
1

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.

roubar
fonte