Eu tenho dados de aprendizagem que consistem em ~ 45k amostras, cada uma com 21 recursos. Estou tentando treinar um classificador de floresta aleatório nesses dados, que é rotulado como 3 classes (-1, 0 e 1). As classes são mais ou menos iguais em seus tamanhos.
Meu modelo de classificador aleatório de floresta está usando gini
como critério de qualidade de divisão, o número de árvores é 10 e não limitamos a profundidade de uma árvore.
A maioria dos recursos mostrou importância insignificante - a média é de cerca de 5%, um terço deles é de importância 0, e um terço deles é de importância acima da média.
No entanto, talvez o fato mais impressionante seja a pontuação oob (fora da bolsa): um pouco menos de 1%. Isso me fez pensar que o modelo falha e, de fato, testando o modelo em um novo conjunto independente de tamanho ~ 40k, obtive pontuação de 63% (parece bom até agora), mas uma inspeção mais profunda da matriz de confusão me mostrou que o o modelo é bem-sucedido apenas para a classe 0 e falha em cerca de 50% dos casos quando se trata de decidir entre 1 e -1.
Saída do Python anexada:
array([[ 7732, 185, 6259],
[ 390, 11506, 256],
[ 7442, 161, 6378]])
Isso ocorre naturalmente porque a classe 0 possui propriedades especiais, o que facilita muito a previsão. No entanto, é verdade que a pontuação oob que encontrei já é um sinal de que o modelo não é bom? Qual é uma boa pontuação de oob para florestas aleatórias ? Existe alguma regra prática que ajude a determinar se um modelo é "bom", usando a pontuação oob sozinha ou em combinação com alguns outros resultados do modelo?
Editar: após remover dados incorretos (cerca de um terço dos dados), os rótulos eram mais ou menos 2% para 0 e 49% para cada um de -1 / + 1. A pontuação oob foi de 0,011 e a pontuação nos dados do teste foi de 0,49, com a matriz de confusão dificilmente enviesada para a classe 1 (cerca de 3/4 das previsões).
scikit
's oob_score
é uma pontuação, ou seja, uma medida de acordo. Não consegui encontrá-lo documentado, no entanto.