Apa fungsi biaya dalam cv.glm dalam paket boot R?


14

Saya sedang melakukan validasi silang menggunakan metode leave-one-out. Saya memiliki respons biner dan saya menggunakan paket boot untuk R, dan fungsi cv.glm . Masalah saya adalah saya tidak sepenuhnya memahami bagian "biaya" dalam fungsi ini. Dari apa yang saya mengerti ini adalah fungsi yang memutuskan apakah nilai estimasi harus diklasifikasikan sebagai 1 atau 0, yaitu nilai ambang untuk klasifikasi. Apakah ini benar?

Dan, dalam bantuan dalam R mereka menggunakan fungsi ini untuk model binomial: cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5) . Bagaimana cara menafsirkan fungsi ini? jadi saya bisa memodifikasinya dengan benar untuk analisis saya.

Bantuan apa pun dihargai, tidak ingin menggunakan fungsi yang tidak saya mengerti.

Jawaban:


9

r adalah vektor yang berisi hasil aktual, pi adalah vektor yang berisi nilai yang dipasang.

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

cHaist=|rsaya-halsayasaya|

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

dan menempatkan mycost sebagai argumen dalam fungsi cv.glm.


cHaist
|rsaya-halsaya|0,5
|rsaya-halsaya|=112

@ feng-mai pi == 0 atau pi <0,5? (dan pi == 1 atau pi> 0,5?) jika menggunakan 0,5 sebagai batas keputusan. Bukankah pi probabilitas yang diprediksi ?
PM.

1
halsaya

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

Pertama, Anda telah menetapkan batas sebagai 0,5. R Anda adalah 0/1, tetapi pi adalah probabilitas. Jadi biaya individu adalah 1 jika kesalahan absolut lebih besar dari 0,5, jika tidak, maka fungsi ini menghitung tingkat kesalahan rata-rata. Tetapi ingat, cut-off telah ditetapkan sebelum Anda menentukan fungsi biaya Anda.

Sebenarnya, saya pikir lebih masuk akal jika pilihan cut-off ditentukan oleh fungsi biaya.


0

Jawaban oleh @SLi sudah menjelaskan dengan sangat baik fungsi fungsi biaya yang telah Anda tentukan. Namun, saya pikir saya akan menambahkan bahwa fungsi biaya digunakan untuk menghitung deltanilai dari cv.glm, yang merupakan pengukuran kesalahan validasi silang. Namun, secara kritis deltaadalah rata-rata tertimbang dari kesalahan setiap lipatan yang diberikan oleh biaya. Kami melihat ini dengan memeriksa bit kode yang relevan:

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

dan nilai yang dikembalikan oleh fungsi adalah:

  list(call = call, K = K, delta = as.numeric(c(CV, CV + cost.0)), 
    seed = seed)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.