Tengo algunos datos con los predictores y un binario de destino. Por ejemplo:

df <- data.frame(a=sort(sample(1:100,30)), b= sort(sample(1:100,30)), 
                 target=c(rep(0,11),rep(1,4),rep(0,4),rep(1,11)))

He entrenado logística de regresion modelo de uso de la glm()

model1 <- glm(formula= target ~ a + b, data=df, family=binomial)

Ahora estoy tratando de predecir la salida (por ejemplo, los mismos datos deberían ser suficientes)

predict(model1, newdata=df, type="response")

Esto genera un vector de probabilidad de los números. Pero quiero predecir la clase real. Yo podría usar round() sobre la probabilidad de los números, pero esto supone que cualquier cosa por debajo de 0,5 es de clase ‘0’, y cualquier cosa por encima de la clase ‘1’. Es esta una suposición correcta? Aun cuando la población de cada clase no pueden ser iguales (o casi iguales)? O hay una manera de calcular este límite?

hay diferentes criterios, uno por ejemplo es el punto donde la suma de la sensibilidad y la especificidad es máxima, véase, por ejemplo, esta pregunta: stackoverflow.com/questions/23131897/…
Gracias! Pero sería, sin duda, correcto usar el umbral como la fracción de la población, a la derecha? Es decir, si en la población, el 30% de los casos son ‘0’ s y 70% ‘1, un ingenuo estimación sería el uso de 0.3 como el umbral. Pero esto no sería una manera lógica de este enfoque?
Usted puede encontrar un gran tutorial sobre el tema aquí: hopstat.wordpress.com/2014/12/19/…

OriginalEl autor user2175594 | 2014-04-23

4 Comentarios

  1. 5

    El mejor umbral (o corte) de punto para ser utilizado en modelos glm es el punto que maximiza la especificidad y la sensibilidad. Este umbral podría no dar el más alto de la predicción en el modelo, pero no sería sesgada hacia positivos o negativos. El ROCR paquete contiene funciones que pueden ayudarle a hacer esto. compruebe la performance() función en este paquete. Que se va a obtener lo que estás buscando. Aquí una imagen de lo que usted está esperando para obtener:

    Decidir umbral para glm modelo de regresión logística en R

    Después de encontrar el punto de corte, que normalmente se escribe una función a mí mismo para encontrar el número de puntos de datos que tiene a su valor de predicción por encima de la frecuencia de corte, y coinciden con el grupo al que pertenecen.

    podría proporcionar un código específico que podría generar el gráfico anterior? También, ¿cómo pueden los valores de corte entre 0 y 14 para las probabilidades de que tome valores entre 0 y 1?
    He añadido más vil/ggplot enfoques de abajo!

    OriginalEl autor Error404

  2. 4

    El estándar de oro para determinar las buenas parámetros del modelo, incluyendo «¿qué umbral debería establecer» para la regresión logística, es de validación cruzada.

    La idea general es mantener una o más partes de su conjunto de entrenamiento y elegir el umbral que maximiza el número de clasificaciones correctas en este lugar-fuera de juego, pero Wikipedia puede dar muchos más detalles.

    Ya nos gustaría estar en sintonía el parámetro de umbral en la cruz de validación de datos, aparentemente, sería necesario un tercer llevó a cabo fuera establecido para la evaluación de informe imparcial de error esperado?
    Sí que es correcta. Tradicionalmente, usted tendría al menos tres particiones separadas de sus datos: entrenamiento, validación y test (evaluación). Sin embargo, si usted está haciendo algo como k-fold cross-validation, a continuación, la formación y la validación son esencialmente el mismo conjunto de re-particionado en varias formas.

    OriginalEl autor merlin2011

  3. 0

    Fuimos tratando de replicar primer gráfico. Dado un predictions <- prediction(pred,labels) objeto, entonces:

    baseR enfoque

    plot(unlist(performance(predictions, "sens")@x.values), unlist(performance(predictions, "sens")@y.values), 
         type="l", lwd=2, ylab="Specificity", xlab="Cutoff")
    par(new=TRUE)
    plot(unlist(performance(predictions, "spec")@x.values), unlist(performance(predictions, "spec")@y.values), 
         type="l", lwd=2, col='red', ylab="", xlab="")
    axis(4, at=seq(0,1,0.2),labels=z)
    mtext("Specificity",side=4, padj=-2, col='red')

    Decidir umbral para glm modelo de regresión logística en R

    ggplot2 enfoque

    sens <- data.frame(x=unlist(performance(predictions, "sens")@x.values), 
                       y=unlist(performance(predictions, "sens")@y.values))
    spec <- data.frame(x=unlist(performance(predictions, "spec")@x.values), 
                       y=unlist(performance(predictions, "spec")@y.values))
    
    sens %>% ggplot(aes(x,y)) + 
      geom_line() + 
      geom_line(data=spec, aes(x,y,col="red")) +
      scale_y_continuous(sec.axis = sec_axis(~., name = "Specificity")) +
      labs(x='Cutoff', y="Sensitivity") +
      theme(axis.title.y.right = element_text(colour = "red"), legend.position="none") 

    Decidir umbral para glm modelo de regresión logística en R

    OriginalEl autor user61871

  4. -2

    Usted puede intentar el siguiente:

    perfspec <- performance(prediction.obj = pred, measure="spec", x.measure="cutoff")
    
    plot(perfspec)
    
    par(new=TRUE)
    
    perfsens <- performance(prediction.obj = pred, measure="sens", x.measure="cutoff")
    
    plot(perfsens)

    OriginalEl autor Dipayan Sarkar

Dejar respuesta

Please enter your comment!
Please enter your name here