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
xEu
Para implementar oob no sklearn, você deve especificá-lo ao criar seu objeto Random Forests como
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Então podemos treinar o modelo
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Pontuação: 0.979921928817
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
print(forest.oob_score_)
0.86453272101
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
print('Score: ', forest.score(X_test, y_test))
Pontuação: 0.86517733935
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 como
print(forest.oob_decision_function_)
A classe pode ser obtida usando
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Em seguida, podemos calcular a AUC usando o seguinte
metrics.roc_auc_score(y_train, pred_train)
0.86217157846471204