En general, el rendimiento de los clasificadores se compara utilizando la precisión, esta es una medida del número de instancias clasificadas correctamente dividido por el número total de instancias. Sin embargo, a partir de los datos de entrenamiento podemos obtener una mejor aproximación del error esperado de nuestro clasificador cuando usamos técnicas de ensamble o aprendizaje conjunto.
Error fuera de bolsa
Esta métrica es la precisión de los ejemplos usan todos los árboles en el conjunto de bosque aleatorio para el que se omitió durante el entrenamiento. Por lo tanto, actúa como una instancia de semi-prueba. Puede tener una idea de qué tan bien su clasificador puede generalizar usando esta métrica.xi
Para implementar oob en sklearn, debe especificarlo al crear su objeto Random Forests como
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Entonces podemos entrenar al modelo
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Puntuación: 0.979921928817
Como se esperaba, la precisión del modelo al evaluar el conjunto de entrenamiento es muy alta. Sin embargo, esto no tiene sentido porque puede muy bien estar ajustando sus datos y, por lo tanto, su modelo es basura. Sin embargo, podemos usar el puntaje de la bolsa como
print(forest.oob_score_)
0.86453272101
Esta es la precisión al evaluar nuestras instancias en el conjunto de entrenamiento utilizando solo los árboles para los que fueron omitidos. Ahora calculemos el puntaje en el conjunto de pruebas como
print('Score: ', forest.score(X_test, y_test))
Puntuación: 0.86517733935
Vemos que la precisión medida por Oob es muy similar a la obtenida con el conjunto de pruebas. Por lo tanto, sigue la teoría de que la precisión de Oob es una mejor métrica para evaluar el rendimiento de su modelo en lugar de solo la puntuación. Esto es una consecuencia de los modelos de ensacado y no se puede hacer con otros tipos de clasificadores.
Cálculo de oob usando diferentes métricas
¡Sí, usted puede hacer esto! Sin embargo, depende de cómo esté estructurado exactamente su código. No estoy seguro de cómo puede incluir el oob y el AUC junto con la cross_val_score
función. Sin embargo, si está haciendo los pliegues de validación cruzada manualmente, puede hacer lo siguiente, el algoritmo de bosques aleatorios en sklearn le proporciona la función de decisión del oob como
print(forest.oob_decision_function_)
La clase se puede obtener usando
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Entonces podemos calcular el AUC usando lo siguiente
metrics.roc_auc_score(y_train, pred_train)
0.86217157846471204