Estou trabalhando em um problema multiclasse com 9 possíveis rótulos, para os quais tenho um conjunto de dados composto por ~ 50.000 exemplos e ~ 200 recursos cada. Cada exemplo pode pertencer apenas a uma classe. Os dados são bastante equilibrados entre os diferentes rótulos.
Dada a sua robustez e escalabilidade, decidi usar a Floresta Aleatória (com um conjunto de 1000 árvores) como método de aprendizado. Para avaliar a precisão do desempenho do modelo, dado esse conjunto de dados, usei uma validação cruzada estratificada do 5Fold (estou usando o scikit-learn 0.18).
Como a Random Forest pode lidar inerentemente com conjuntos de dados de várias classes, usei-os diretamente no conjunto de dados fornecido e obtive uma precisão de 79,5 0,3. Também estava interessado em saber quais recursos tinham mais importância, algo que pode ser facilmente extraído do atributo feature_importances_ no RandomForestClassifier do scikit . No entanto, considerando que o conjunto de dados é bem equilibrado e que, como esperado, há quase o mesmo número de recursos dos 200 para contribuir para as diferentes classes, não pude isolar quais recursos contribuem mais para cada classe.
Como conseqüência, adotei uma estratégia one-versus-all usando a mesma configuração de Floresta Aleatória (a propósito, sensível ao custo, levando em consideração o desequilíbrio dos dados ao usar a estratégia oneVsAll), que me permitiu ver cada classe versus o resto, quais características são mais importantes. Os resultados que obtive sobre isso são razoáveis. Além disso, ao analisar o desempenho do modelo usando essa estratégia, obtive 88,7 0,2 de precisão, o que me surpreendeu, pois esperava que a Random Forest multiclass se classificasse melhor, dada sua natureza multiclasses.
Estou certo nisso? Essa diferença de precisão poderia ser plausível? Além disso, a estratégia acima adotada é correta e justa, uma vez que a Random Forest, por si só, pode lidar com problemas de várias classes sem qualquer "invasão", como a estratégia oneVsAll?
fonte
Respostas:
Eu tinha exatamente a mesma pergunta que você e fiquei um pouco triste ao descobrir que não foram postadas respostas sobre o seu tópico ...
Dito isto, encontrei este artigo: Técnica de binarização um contra todos no contexto da floresta aleatória ( https://www.elen.ucl.ac.be/Proceedings/esann/esannpdf/es2015-5.pdf ) publicada em 2015.
Os autores estão mostrando melhores desempenhos de classificação com os classificadores Random Forest um contra o resto em comparação com os aleatórios floresta multiclasse padrão.
Os autores não estão dando muitas pistas sobre o porquê de funcionar tão bem, exceto que as árvores geradas no contexto de um contra um são mais simples.
Gostaria de saber se você mesmo encontrou algumas respostas desde que postou sua pergunta.
fonte
No final do dia, a classe de modelo que você escolher define a forma do seu limite de decisão - se você usar RandomForests como uma classe múltipla ou como um classificador multiclasse de um para todos, os limites serão igualmente restritos, com a única diferença sendo os dados que você usa para se ajustar aos seus modelos. Dependendo de quão bem seus modelos se encaixam nos seus dados e de quão suscetível é o seu modelo a problemas de desequilíbrio de dados, não vejo realmente uma razão a priori de que a multiclasse seja melhor do que uma contra todas. Eles apenas dão a você coisas diferentes - uma dá a você uma decisão para cada par de classes, ao custo de mais modelos para treinar, e uma dá a você a decisão da classe imediatamente. É totalmente plausível para mim, especialmente considerando que o RandomForests não resolve uma função de perda convexa, que você obteria os resultados obtidos.
Se você estiver especificamente interessado em descobrir quais recursos são relevantes para o seu classificador, sugiro uma regressão logística com uma penalidade de perda de L1, pois a escarsidade forneceria um pequeno subconjunto de recursos que são preditivos para cada par de classes que você ter.
fonte