Para classificação com Florestas Aleatórias em R, como ajustar para tamanhos de classe desequilibrados?

16

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?

ialm
fonte
1
Também estou enfrentando o mesmo problema. Você poderia fornecer o script para floresta aleatória ponderada e floresta aleatória baseada em métrica, se tiver? Ansioso por sua resposta

Respostas:

5

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.

David J. Harris
fonte
Oi David, obrigado pela sugestão. O aumento seria possível dentro / em combinação com florestas aleatórias? Além disso, li que o aumento pode não ser aplicável a dados ruidosos. Os dados com os quais estou trabalhando contêm muitas variáveis ​​"barulhentas" - atualmente estou executando florestas aleatórias sem seleção de recurso, reduzindo a amostragem da classe maior para lidar com o desequilíbrio. Estou obtendo resultados aceitáveis ​​(classificando corretamente 85% da classe menor e 93% da classe maior no conjunto de treinamento), mas as melhorias são sempre bem-vindas.
ialm
@ Jonathan Eu não tenho uma boa noção de quanto ruído é necessário antes que as florestas aleatórias comecem a superar os vários métodos de aumento, mas minha impressão é que é muito exigente. O gbmpacote Rpossui 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.
David J. Harris
@ DavidJ.Harris impulsionar também sofre de desequilíbrio classe, especialmente no caso de raridade absoluta, quando informações sobre as classes minoritárias é escassa
Antoine
2

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.

0,5

0asa
fonte
0

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

Qbik
fonte
Identificar subconjuntos de observações na classe maior parece uma ideia interessante. A segunda parte do projeto está realmente diferenciando a classe maior em subgrupos menores e úteis que podem ser úteis para estudos futuros. Quanto aos cálculos de entropia no código, na verdade, não mergulhei no código e apenas observei parte da teoria por trás de rf, por isso não posso comentar sobre isso.
Ialm
Eu queria modificar esse código há muito tempo, mas faltava tempo para isso, adicionar pesos não deve ser conceitualmente difícil.
Qbik
A floresta aleatória em R pode ser usada como ferramenta de regressão, talvez seja útil também para classificação não supervisionada. Eu queria modificar o código da randomForest há muito tempo, mas faltava tempo para isso, adicionar pesos não deveria ser conceitualmente difícil. Há um tempo atrás, eu estava pensando sozinho em como usar a floresta aleatória para clusterização não supervisionada e tive uma idéia, mas ainda não testei que, infelizmente, parece bastante computacionalmente exigente - numerofobservations ^ 2.
Qbik
0

(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.

Charles
fonte