Jaka jest funkcja kosztu w cv.glm w pakiecie rozruchowym R.

14

Przeprowadzam weryfikację krzyżową przy użyciu metody „zostaw-jeden-out”. Mam odpowiedź binarną i używam pakietu rozruchowego dla R oraz funkcji cv.glm . Mój problem polega na tym, że nie do końca rozumiem część „kosztu” w tej funkcji. Z tego, co rozumiem, jest to funkcja, która decyduje, czy wartość szacunkową należy zaklasyfikować jako 1 czy 0, tj. Wartość progową dla klasyfikacji. Czy to jest poprawne?

Oraz w pomocy w R oni korzystać z tej funkcji na dwumianowego modelu cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5). Jak interpretować tę funkcję? więc mogę go poprawnie zmodyfikować do celów analizy.

Każda pomoc jest doceniana, nie chcę korzystać z funkcji, której nie rozumiem.

mael
źródło

Odpowiedzi:

9

r jest wektorem zawierającym rzeczywisty wynik, pi jest wektorem zawierającym dopasowane wartości.

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

doost=|rja-pjaja|

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))
  }

i umieść mycost jako argument w funkcji cv.glm.

Feng Mai
źródło
doost
|rja-pja|0,5
|rja-pja|=112)
@ feng-mai pi == 0 czy pi <0,5? (i pi == 1 lub pi> 0,5?), jeśli używasz 0,5 jako granicy decyzji. Czy pi nie jest przewidywanymi prawdopodobieństwami ?
PM.
1
pja
1
cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

Najpierw ustawiłeś wartość graniczną na 0,5. Twoje r wynosi 0/1, ale pi jest prawdopodobieństwem. Zatem indywidualny koszt wynosi 1, jeśli błąd bezwzględny jest większy niż 0,5, w przeciwnym razie 0. Funkcja oblicza średni poziom błędu. Pamiętaj jednak, że granica została ustalona przed zdefiniowaniem funkcji kosztów.

Właściwie myślę, że bardziej sensowne jest, jeśli wybór wartości granicznej zależy od funkcji kosztów.

SLi
źródło
0

Odpowiedź @SLi już bardzo dobrze wyjaśnia, jaką funkcję zdefiniowała funkcja kosztów. Pomyślałem jednak, że dodam, że do obliczenia deltawartości służy funkcja kosztu cv.glm, która jest miarą błędu walidacji krzyżowej. Jednak krytycznie deltaważona jest średnia ważona błędu każdej zakładki podana przez koszt. Widzimy to, sprawdzając odpowiedni fragment kodu:

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"))
}

a wartość zwracana przez funkcję to:

  list(call = call, K = K, delta = as.numeric(c(CV, CV + cost.0)), 
    seed = seed)
Alex
źródło