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.

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.


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.


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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.