¿La implementación aleatoria del bosque en scikit-learn utiliza la precisión media como método de puntuación para estimar el error de generalización con muestras fuera de bolsa? Esto no se menciona en la documentación, pero el método score () informa la precisión media.
Tengo un conjunto de datos altamente desequilibrado, y estoy usando AUC de ROC como mi métrica de puntuación en la búsqueda de la cuadrícula. ¿Hay alguna manera de decirle al clasificador que use el mismo método de puntuación en las muestras OOB también?
random-forest
scikit-learn
darXider
fuente
fuente
oob_score
informe la precisión. Aunque necesito mirar el código fuente nuevamente.Respuestas:
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
Entonces podemos entrenar al modelo
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
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
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 comoLa clase se puede obtener usando
Entonces podemos calcular el AUC usando lo siguiente
fuente
RandomForestClassifier
puede devolver un puntaje OOB que NO sea la precisión, y la segunda parte de su respuesta proporciona una muy buena pista sobre cómo abordar este problema. Sin embargo, debo enfatizar que no se deben usar las etiquetas de clase para calcular el AUC de la curva ROC; más bien, las probabilidades de clase deberían usarse directamente. Entonces, la definición correcta seríapred_train = forest.oob_decision_function_[:, 1]
.