Obtuve un modelo de regresión logística (vía train
) para una respuesta binaria, y obtuve la matriz de confusión logística a través de confusionMatrix
in caret
. Me da la matriz de confusión del modelo logístico, aunque no estoy seguro de qué umbral se está utilizando para obtenerlo. ¿Cómo obtengo la matriz de confusión para valores de umbral específicos usando confusionMatrix
in caret
?
r
classification
roc
caret
confusion-matrix
Leche negra
fuente
fuente
confusionmatrix
, sin paréntesis.glm
función desde elstats
paquete y le pasaste el resultadoconfusionMatrix
? No sabía que se podía hacer eso, y al leer el manual no está claro que se pueda. ¿O hicistepredict
algo? Un breve ejemplo ayudaría.train
funcióncaret
para ajustar el modelo, lo que me permite especificarlo como un glm con la familia binomial. Luego usé lapredict
función en el objeto generado a través detrain
.Respuestas:
La mayoría de los modelos de clasificación en R producen tanto una predicción de clase como las probabilidades para cada clase. Para datos binarios, en casi todos los casos, la predicción de clase se basa en un límite de probabilidad del 50%.
glm
es el mismo. Concaret
, el usopredict(object, newdata)
le da la clase predicha ypredict(object, new data, type = "prob")
le dará probabilidades específicas de la clase (cuandoobject
es generada portrain
).Puede hacer las cosas de manera diferente definiendo su propio modelo y aplicando el límite que desee. El
caret
sitio web también tiene un ejemplo que usa remuestreo para optimizar el corte de probabilidad.tl; dr
confusionMatrix
usa las clases predichas y, por lo tanto, un límite de probabilidad del 50%Max
fuente
Hay una manera bastante fácil, suponiendo
tune <- train(...)
:Obviamente, puede establecer el umbral a lo que quiera probar o elegir el "mejor", donde mejor significa la mayor especificidad y sensibilidad combinadas:
Después de mirar el ejemplo que publicó Max, no estoy seguro de si hay algunos matices estadísticos que hacen que mi enfoque sea menos deseado.
fuente
caret
paquete.rocCurve$thresholds[which(rocCurve$sensitivities + rocCurve$specificities == max(rocCurve$sensitivities + rocCurve$specificities))]
que también te da la flexibilidad para ponderarlos de manera diferente si lo deseas ... una última cosa a tener en cuenta es que, de manera realista, es probable que desees ajustar el umbral (como lo haría con cualquier hiperparámetro modelo) como describe Max aquí .