Tengo datos de aprendizaje que consisten en ~ 45k muestras, cada una tiene 21 características. Estoy tratando de entrenar un clasificador de bosque aleatorio en estos datos, que está etiquetado en 3 clases (-1, 0 y 1). Las clases son más o menos iguales en sus tamaños.
Mi modelo de clasificador de bosque aleatorio está utilizando gini
como criterio de calidad dividida, el número de árboles es 10 y no he limitado la profundidad de un árbol.
La mayoría de las características han mostrado una importancia insignificante: la media es aproximadamente del 5%, un tercio de ellas es de importancia 0, un tercio de ellas es de importancia superior a la media.
Sin embargo, quizás el hecho más llamativo es el puntaje de oob (fuera de bolsa): un poco menos del 1%. Me hizo pensar que el modelo falla, y de hecho, al probar el modelo en un nuevo conjunto independiente de tamaño ~ 40k, obtuve una puntuación del 63% (hasta ahora suena bien), pero una inspección más profunda de la matriz de confusión me ha demostrado que el El modelo solo tiene éxito para la clase 0, y falla en aproximadamente el 50% de los casos cuando se trata de decidir entre 1 y -1.
Salida de Python adjunta:
array([[ 7732, 185, 6259],
[ 390, 11506, 256],
[ 7442, 161, 6378]])
Esto se debe naturalmente a que la clase 0 tiene propiedades especiales que hacen que sea mucho más fácil predecir. Sin embargo, ¿es cierto que el puntaje de Oob que he encontrado ya es una señal de que el modelo no es bueno? ¿Cuál es un buen puntaje oob para bosques aleatorios ? ¿Existe alguna ley general que ayude a determinar si un modelo es "bueno", utilizando el puntaje de Oob solo o en combinación con algunos otros resultados del modelo?
Editar: después de eliminar datos incorrectos (aproximadamente un tercio de los datos), las etiquetas fueron más o menos 2% para 0 y 49% para cada uno de -1 / + 1. El puntaje oob fue de 0.011 y el puntaje en los datos de la prueba fue de 0.49, con una matriz de confusión apenas sesgada hacia la clase 1 (aproximadamente 3/4 de las predicciones).
scikit
's oob_score
es una puntuación, es decir, una medida de acuerdo. Sin embargo, no pude encontrarlo documentado.