Estoy buscando entrenar un clasificador que discrimine entre Type A
y Type B
objetos con un conjunto de entrenamiento razonablemente grande de aproximadamente 10,000 objetos, de los cuales aproximadamente la mitad son Type A
y la otra mitad Type B
. El conjunto de datos consta de 100 características continuas que detallan las propiedades físicas de las celdas (tamaño, radio medio, etc.). La visualización de los datos en diagramas de dispersión por pares y diagramas de densidad nos dice que hay una superposición significativa en las distribuciones de las células cancerosas y normales en muchas de las características.
Actualmente estoy explorando bosques aleatorios como método de clasificación para este conjunto de datos, y he visto algunos buenos resultados. Usando R, los bosques aleatorios pueden clasificar correctamente alrededor del 90% de los objetos.
Una de las cosas que queremos probar y hacer es crear una especie de "puntaje de certeza" que cuantifique la confianza que tenemos en la clasificación de los objetos. Sabemos que nuestro clasificador nunca será 100% preciso, e incluso si se logra una alta precisión en las predicciones, querremos que técnicos capacitados identifiquen qué objetos son verdaderamente Type A
y Type B
. Entonces, en lugar de proporcionar predicciones intransigentes de Type A
o Type B
, queremos presentar una puntuación para cada objeto que describa cómo A
o cómo es B
un objeto. Por ejemplo, si diseñamos una puntuación que oscila entre 0 y 10, una puntuación de 0 puede indicar que un objeto es muy similar a los Type A
objetos, mientras que una puntuación de 10 indicará que un objeto es muy parecido Type B
.
Estaba pensando que podría usar los votos dentro de los bosques al azar para diseñar tal puntaje. Dado que la clasificación en bosques aleatorios se realiza por votación mayoritaria dentro del bosque de árboles generados, asumiría que los objetos que fueron votados por el 100% de los árboles Type A
serían diferentes de los objetos que fueron votados, por ejemplo, el 51% de los árboles para ser Type A
.
Actualmente, he intentado establecer un umbral arbitrario para que la proporción de votos que un objeto debe recibir se clasifique como Type A
o Type B
, y si el umbral no se supera, se clasificará como Uncertain
. Por ejemplo, si fuerzo la condición de que el 80% o más de los árboles deben acordar una decisión para que se apruebe una clasificación, encuentro que el 99% de las predicciones de la clase son correctas, pero aproximadamente el 40% de los objetos están agrupados como Uncertain
.
¿Tendría sentido, entonces, aprovechar la información de votación para calificar la certeza de las predicciones? ¿O me dirijo en la dirección equivocada con mis pensamientos?
Respuestas:
Tiene mucho sentido, y todas las implementaciones de bosques aleatorios con los que he trabajado (como MATLAB) también proporcionan resultados probabilísticos para hacer precisamente eso.
No he trabajado con la implementación de R, pero me sorprendería si no hubiera una manera simple de obtener resultados suaves de los votos, así como la decisión difícil.
Editar: solo eché un vistazo a R, y predic.randomForest también genera probabilidades de salida.
fuente
Si está utilizando R, el paquete caret le evitará reinventar la rueda. Por ejemplo, el siguiente código utiliza la validación cruzada para elegir los parámetros de ajuste para un modelo de bosque aleatorio, y luego genera la desviación media y estándar de precisión para cada pliegue de validación cruzada. Finalmente, calcula las probabilidades de clase para el modelo.
Lo bueno de caret es que hace que sea muy fácil comparar diferentes modelos predictivos. Por ejemplo, si quieres probar una SVM, se puede reemplazar el texto
method='rf'
conmethod='svmLinear'
omethod='svmRadial'.
También puede elegir los parámetros de ajuste basado en el AUC en lugar de precisión mediante la adición de una línea para el parámetro trainControl:summaryFunction=twoClassSummary
.Finalmente, hay un poco de código del paquete PerformanceAnalytics
chart.Correlation(Dataset[-5], col= Dataset$Class)
, que no es necesario para construir el modelo, pero proporciona una buena visualización de su conjunto de datos.fuente
modelLookup()
comando para obtener una lista de lo que es posible.prob
tipo depredict
también está disponible al usarrandomForest
para entrenar su modelo (con o sin el uso de otros paquetes comocaret
oPerformanceAnalytics
).El paquete randomForest en R es un paquete bastante decente para entrar en mayores detalles sobre su análisis. Le proporciona los votos (ya sea como una fracción o recuentos sin procesar) y ofrece una capacidad incorporada para el ajuste y la validación cruzada e incluso puede brindarle más información sobre sus características (si desea saber cuáles de sus 100 son Lo más importante en el análisis).
Si ya está usando ese paquete, entonces tal vez desee echarle un vistazo más de cerca y si no lo está, tal vez échele un vistazo.
fuente