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?


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.


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


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


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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.