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?