Estou explorando diferentes métodos de classificação para um projeto em que estou trabalhando e estou interessado em experimentar as Florestas Aleatórias. Estou tentando me educar ao longo do curso e gostaria de receber qualquer ajuda fornecida pela comunidade do CV.
Dividi meus dados em conjuntos de treinamento / teste. Desde a experimentação com florestas aleatórias no R (usando o pacote randomForest), tenho tido problemas com uma alta taxa de classificação incorreta para minha classe menor. Eu li este artigo sobre o desempenho de florestas aleatórias em dados desequilibrados, e os autores apresentaram dois métodos para lidar com o desequilíbrio de classe ao usar florestas aleatórias.
1. Florestas aleatórias ponderadas
2. Florestas aleatórias equilibradas
O pacote R não permite a ponderação das classes (nos fóruns de ajuda do R, eu li que o parâmetro classwt não está funcionando corretamente e está agendado como uma futura correção de bug); portanto, fico com a opção 2. Posso especificar o número de objetos amostrados de cada classe para cada iteração da floresta aleatória.
Sinto-me desconfortável em definir tamanhos de amostra iguais para florestas aleatórias, pois sinto que estaria perdendo muitas informações sobre a classe maior, levando a um desempenho ruim com dados futuros. As taxas de classificação incorreta ao reduzir a amostragem da classe maior mostraram melhora, mas eu queria saber se havia outras maneiras de lidar com tamanhos de classes desequilibrados em florestas aleatórias?
Respostas:
Se você não gosta dessas opções, já pensou em usar um método de reforço? Dada uma função de perda apropriada, o aumento recalibra automaticamente os pesos à medida que avança. Se a natureza estocástica das florestas aleatórias lhe agrada, o aumento do gradiente estocástico também o constrói.
fonte
gbm
pacoteR
possui um termo "pesos" em funcionamento e você pode aumentar a aleatoriedade de maneira muito semelhante às florestas aleatórias, diminuindo com o termo "bag.fraction". Parece que vale a pena tentar.Eu acho que ponderar objetos é de alguma forma equivalente a duplicá-los. Talvez você deva tentar modificar a etapa de auto-inicialização, amostrando adequadamente suas diferentes classes.
fonte
Em vez de provar classes grandes, você pode expandir classes pequenas! Se classes grandes têm muitas vezes mais observação do que pequenas, o biase será pequeno. Espero que você possa lidar com esse conjunto de dados superdimensionado.
Você também pode identificar subconjuntos de observações que lidam com o máximo de informações sobre classes grandes, existem muitos procedimentos possíveis, o mais simples que eu acho que é baseado no método de vizinhos mais próximos - a amostragem de observação condicionada na estrutura gráfica da vizinhança garante que a amostra tenha densidade de probabilidade mais semelhante a original.
randomForest está escrito em Fortran ec, o código fonte está disponível (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz), mas não consigo identificar o local onde a enttropia é calculada, ps. ups que a floresta aleatória usa Gini em vez de entropia
fonte
(1) Você está certo de que a função de ponderação não funciona e não tem certeza se alguma vez foi corrigida.
(2) A maioria usa a opção 2 com dados balanceados. A chave para não perder muitos dados é a amostragem estratificada. Você experimenta aleatoriamente um conjunto equilibrado exclusivo para cada árvore.
fonte
A super amostragem minoritária sintética (SMOTE) gera novas observações da classe minoritária como combinações convexas aleatórias de observações vizinhas. O artigo está aqui: https://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-14-106
fonte