Eu tenho um conjunto de dados desequilibrado em uma tarefa de classificação binária, em que a quantidade positiva vs a quantidade negativa é 0,3% vs 99,7%. A diferença entre pontos positivos e negativos é enorme. Quando treino uma CNN com a estrutura usada no problema MNIST, o resultado do teste mostra uma alta taxa de falsos negativos. Além disso, a curva de erro de treinamento diminui rapidamente em algumas épocas no início, mas permanece o mesmo valor nas seguintes épocas.
Poderia me aconselhar uma maneira de processar esse problema? Obrigado!
Por que você deseja usar CNNs aqui? Você já considerou outros modelos que realmente lidam com dados desequilibrados?
Por exemplo, eu descobri que as duas técnicas a seguir funcionaram muito bem para mim:
Florestas aleatórias com
SMOTE
aumento de SMOTE : use um híbrido que subamostra a classe majoritária e superextraia a classe minoritária em porcentagens ajustáveis. Selecione essas porcentagens, dependendo da distribuição de sua variável de resposta no conjunto de treinamento. Alimente esses dados ao seu modelo de RF. Sempre faça a validação cruzada / execute a pesquisa em grade para encontrar as melhores configurações de parâmetros para seus RFs.XGBoost com otimização de hiper-parâmetros : Novamente, valide cruzadamente ou execute a pesquisa por gird para encontrar as melhores configurações de parâmetros para o modelo. Além disso,
xgboost
permite equilibrar pesos de classe positivos e negativos usandoscale_pos_weight
. Consulte a documentação dos parâmetros para obter uma lista completa.Devo acrescentar também que o conjunto de dados em que estava trabalhando tinha a mesma porcentagem de inclinação e foi possível obter o escore de sensibilidade de 0,941 e uma especificidade de 0,71
xgboost
, o que significa que o modelo está prevendo os verdadeiros positivos com bastante precisão e que é um bom presságio bem pra mim.(Desculpe, não posso deixar um comentário, não é reputação suficiente e eu realmente queria saber por que você escolheu as CNNs)
fonte
O conjunto de dados desequilibrado é um problema comum em todas as áreas e não se refere especificamente à visão computacional e aos problemas tratados pelas Redes Neurais Convolucionais (CNNs).
Para resolver esse problema, você deve tentar equilibrar seu conjunto de dados, sobredimensionando as classes minoritárias ou sub-amostrando as classes majoritárias (ou ambas). Indiscutivelmente, uma boa escolha seria o algoritmo SMOTE (Técnica de Sobre-Amostragem de Minorias Sintéticas), como mencionado acima. Aqui você pode encontrar uma comparação de diferentes algoritmos de sobre-amostragem. Se você é usuário de Python, o desbalanced-learn é uma boa biblioteca que implementa muitas técnicas úteis para equilibrar conjuntos de dados.
Por outro lado, se você estiver tentando classificar imagens, uma boa maneira de aumentar o tamanho do seu conjunto de dados é aumentá- lo (por exemplo, criando exemplos sintéticos razoáveis, por exemplo, imagens semelhantes, mas girando / mudando um pouco em relação às originais). Às vezes, você pode achar útil aumentar as classes minoritárias para obter um melhor equilíbrio. A classe Keras ImageDataGenerator é uma boa ferramenta para esse fim.
fonte