A implementação da floresta aleatória no scikit-learn está usando a precisão média como método de pontuação para estimar o erro de generalização com amostras prontas para uso? Isso não é mencionado na documentação, mas o método score () relata a precisão média.
Eu tenho um conjunto de dados altamente desequilibrado e estou usando a AUC do ROC como métrica de pontuação na pesquisa em grade. Existe uma maneira de dizer ao classificador para usar o mesmo método de pontuação nas amostras OOB também?
random-forest
scikit-learn
darXider
fonte
fonte
oob_score
relate a precisão. Eu preciso olhar para o código-fonte novamente.Respostas:
Em geral, o desempenho dos classificadores é comparado com precisão, que é uma medida do número de instâncias classificadas corretamente dividido pelo número total de instâncias. No entanto, a partir dos dados de treinamento, podemos obter uma melhor aproximação do erro esperado de nosso classificador quando estivermos usando técnicas de ensemble learning ou ensacamento.
Erro fora da bolsa
Para implementar oob no sklearn, você deve especificá-lo ao criar seu objeto Random Forests como
Então podemos treinar o modelo
Como esperado, a precisão do modelo ao avaliar o conjunto de treinamento é muito alta. No entanto, isso não faz sentido porque você pode muito bem ajustar seus dados e, portanto, seu modelo é um lixo. No entanto, podemos usar a pontuação pronta para uso como
Essa é a precisão ao avaliar nossas instâncias no conjunto de treinamento usando apenas as árvores para as quais foram omitidas. Agora vamos calcular a pontuação no conjunto de testes como
Vemos que a precisão medida pelo oob é muito semelhante à obtida com o conjunto de testes. Assim, segue-se a teoria de que a precisão do oob é uma métrica melhor para avaliar o desempenho do seu modelo, em vez de apenas a pontuação. Isso é uma consequência dos modelos de ensacamento e não pode ser feito com outros tipos de classificadores.
Calculando oob usando métricas diferentes
Sim, você pode fazer isso! No entanto, depende de como exatamente seu código está estruturado. Não sei como você pode incluir o oob e a AUC, todos juntos com a
cross_val_score
função. No entanto, se você estiver executando as dobras de validação cruzada manualmente, poderá fazer o seguinte, o algoritmo de florestas aleatórias no sklearn fornece a função de decisão do oob comoA classe pode ser obtida usando
Em seguida, podemos calcular a AUC usando o seguinte
fonte
RandomForestClassifier
possível retornar uma pontuação OOB que NÃO é precisão, e a segunda parte da sua resposta fornece uma dica muito boa sobre como abordar esse problema. No entanto, devo enfatizar que não se deve usar os rótulos das classes para calcular a AUC da curva ROC; pelo contrário, as probabilidades de classe devem ser usadas diretamente. Então, a definição correta seriapred_train = forest.oob_decision_function_[:, 1]
.