under regresion ppt online machine logistica learning interpretación curvas curva r roc

regresion - Obtención de valores de umbral a partir de una curva ROC



curvas roc ppt (3)

2 soluciones basadas en los paquetes ROCR y pROC :

threshold1 <- function(predict, response) { perf <- ROCR::performance(ROCR::prediction(predict, response), "sens", "spec") df <- data.frame(cut = [email protected][[1]], sens = [email protected][[1]], spec = [email protected][[1]]) df[which.max(df$sens + df$spec), "cut"] } threshold2 <- function(predict, response) { r <- pROC::roc(response, predict) r$thresholds[which.max(r$sensitivities + r$specificities)] } data(ROCR.simple, package = "ROCR") threshold1(ROCR.simple$predictions, ROCR.simple$labels) #> [1] 0.5014893 threshold2(ROCR.simple$predictions, ROCR.simple$labels) #> [1] 0.5006387

Consulte también el paquete OptimalCutpoints , que proporciona muchos algoritmos para encontrar umbrales óptimos.

Tengo algunos modelos, utilizando el paquete ROCR en un vector de los porcentajes de clase previstos, tengo un objeto de rendimiento. Al trazar el objeto de rendimiento con las especificaciones "tpr", "fpr" me da una curva ROC.

Estoy comparando modelos en ciertos umbrales de tasa de falsos positivos (x). Espero obtener el valor de la verdadera tasa positiva (y) fuera del objeto de rendimiento. Aún más, me gustaría obtener el umbral de porcentaje de clase que se utilizó para generar ese punto.

el número de índice de la tasa de falsos positivos ( x-value ) que está más cerca del umbral sin estar por encima de él, debería proporcionarme el número de índice de la tasa positiva verdadera apropiada ( y-value ). No estoy exactamente seguro de cómo obtener ese valor de índice.

Y más al punto, ¿cómo obtengo el umbral de probabilidades de clase que se usó para hacer ese punto?


El paquete pROC incluye funciones coords para calcular el mejor umbral:

library(pROC) my_roc <- roc(my_response, my_predictor) coords(my_roc, "best", ret = "threshold")


Es por esto que str es mi función R favorita:

library(ROCR) data(ROCR.simple) pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels) perf <- performance(pred,"tpr","fpr") plot(perf) > str(perf) Formal class ''performance'' [package "ROCR"] with 6 slots ..@ x.name : chr "False positive rate" ..@ y.name : chr "True positive rate" ..@ alpha.name : chr "Cutoff" ..@ x.values :List of 1 .. ..$ : num [1:201] 0 0 0 0 0.00935 ... ..@ y.values :List of 1 .. ..$ : num [1:201] 0 0.0108 0.0215 0.0323 0.0323 ... ..@ alpha.values:List of 1 .. ..$ : num [1:201] Inf 0.991 0.985 0.985 0.983 ...

¡Ah ah! Es una clase S4 , por lo que podemos usar @ para acceder a las ranuras. Así es como haces un data.frame :

cutoffs <- data.frame([email protected][[1]], [email protected][[1]], [email protected][[1]]) > head(cutoffs) cut fpr tpr 1 Inf 0.000000000 0.00000000 2 0.9910964 0.000000000 0.01075269 3 0.9846673 0.000000000 0.02150538 4 0.9845992 0.000000000 0.03225806 5 0.9834944 0.009345794 0.03225806 6 0.9706413 0.009345794 0.04301075

Si tiene un umbral de fpr que desea alcanzar, puede data.frame este data.frame para encontrar el máximo de tpr por debajo de este umbral de fpr:

cutoffs <- cutoffs[order(cutoffs$tpr, decreasing=TRUE),] > head(subset(cutoffs, fpr < 0.2)) cut fpr tpr 96 0.5014893 0.1495327 0.8494624 97 0.4997881 0.1588785 0.8494624 98 0.4965132 0.1682243 0.8494624 99 0.4925969 0.1775701 0.8494624 100 0.4917356 0.1869159 0.8494624 101 0.4901199 0.1962617 0.8494624