¿Cuál es la función de costo en cv.glm en el paquete de arranque de R?


14

Estoy haciendo una validación cruzada usando el método de dejar uno afuera. Tengo una respuesta binaria y estoy usando el paquete de arranque para R y la función cv.glm . Mi problema es que no entiendo completamente la parte del "costo" en esta función. Por lo que puedo entender, esta es la función que decide si un valor estimado debe clasificarse como 1 o 0, es decir, el valor umbral para la clasificación. ¿Es esto correcto?

Y, en la ayuda en I que utilizan esta función para un modelo binomial: cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5). ¿Cómo interpreto esta función? para poder modificarlo correctamente para mi análisis.

Cualquier ayuda es apreciada, no quiero usar una función que no entiendo.

Respuestas:


9

r es un vector que contiene el resultado real, pi es un vector que contiene los valores ajustados.

cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

Esto está diciendo . Puede definir sus propias funciones de costo. En su caso para la clasificación binaria, puede hacer algo como estoCost=El |ryo-pagyoyoEl |

mycost <- function(r, pi){
    weight1 = 1 #cost for getting 1 wrong
    weight0 = 1 #cost for getting 0 wrong
    c1 = (r==1)&(pi<0.5) #logical vector - true if actual 1 but predict 0
    c0 = (r==0)&(pi>=0.5) #logical vector - true if actual 0 but predict 1
    return(mean(weight1*c1+weight0*c0))
  }

y pon mycost como argumento en la función cv.glm.


En caso de no ser algo así como sigma | r i - p i |Cost
El |ryo-pagyoEl |0.5 0.5
El |ryo-pagyoEl |=112

@ feng-mai pi == 0 o pi <0.5? (y pi == 1 o pi> 0.5?) si usa 0.5 como límite de decisión. ¿No son las probabilidades pronosticadas pi ?
PM.

1
pagyo

1
cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

Primero, ha establecido un límite de 0.5. Tu r es 0/1, pero pi es probabilidad. Entonces, el costo individual es 1 si el error absoluto es mayor que 0.5, de lo contrario 0. Entonces, esta función calcula la tasa de error promedio. Pero recuerde, el límite se ha establecido antes de definir su función de costo.

En realidad, creo que tiene más sentido si la opción de corte está determinada por la función de costo.


0

La respuesta de @SLi ya explica muy bien qué hace la función de costo que ha definido. Sin embargo, pensé que agregaría que la función de costo se usa para calcular el deltavalor cv.glm, que es una medida del error de validación cruzada. Sin embargo, críticamente deltaes el promedio ponderado del error de cada pliegue dado por el costo. Vemos esto al inspeccionar el bit relevante del código:

for (i in seq_len(ms)) {
    j.out <- seq_len(n)[(s == i)]
    j.in <- seq_len(n)[(s != i)]
    Call$data <- data[j.in, , drop = FALSE]
    d.glm <- eval.parent(Call)
    p.alpha <- n.s[i]/n # create weighting for averaging later
    cost.i <- cost(glm.y[j.out], predict(d.glm, data[j.out, 
        , drop = FALSE], type = "response"))
    CV <- CV + p.alpha * cost.i # add previous error to running total
    cost.0 <- cost.0 - p.alpha * cost(glm.y, predict(d.glm, 
        data, type = "response"))
}

y el valor devuelto por la función es:

  list(call = call, K = K, delta = as.numeric(c(CV, CV + cost.0)), 
    seed = seed)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.