R'nin önyükleme paketinde cv.glm'deki maliyet fonksiyonu nedir?


14

Ayrılmak-out-out yöntemini kullanarak çapraz doğrulama yapıyorum. İkili bir yanıt var ve R ve cv.glm işlevi için önyükleme paketi kullanıyorum . Benim sorunum bu fonksiyonun "maliyet" kısmını tam olarak anlamıyorum. Anlayabildiğim kadarıyla bu, tahmini bir değerin 1 mi yoksa 0 mı, yani sınıflandırma için eşik değer olarak mı sınıflandırılması gerektiğine karar veren işlevdir. Bu doğru mu?

Ve, Ar yardım onlar bir binom modeli için bu işlevi kullanın: cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5). Bu işlevi nasıl yorumlayabilirim? böylece analizim için doğru şekilde değiştirebilirim.

Herhangi bir yardım takdir, anlamadığım bir işlevi kullanmak istemiyorum.

Yanıtlar:


9

r, gerçek sonucu içeren bir vektördür, pi ise takılmış değerleri içeren bir vektördür.

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

Bu. Kendi maliyet fonksiyonlarınızı tanımlayabilirsiniz. İkili sınıflandırma durumunda, böyle bir şey yapabilirsinizcost=|ripii|

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

ve mycost'u cv.glm işlevine argüman olarak koydu.


Olmamalı gibi bir şey (istisna ile, ne zaman , daha sonra terimdir değil, )? | r i - p i |cost| ri-pi| =112
|ripi|0.5
|rben-pben|=112
Mooncrater

@ feng-mai pi == 0 veya pi <0.5? (ve pi == 1 veya pi> 0.5?) karar sınırı olarak 0.5 kullanılıyorsa. Pi tahmini olasılıklar değil mi?
PM.

1
@PM Evet haklısın. , glm modelinin yanıtlarıdır. Düzeltme için teşekkürler. pben
Feng Mai

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

İlk olarak, bir kesme 0,5 olarak belirlediniz. R'niz 0/1, ancak pi olasılıktır. Mutlak hata 0,5'ten büyükse bireysel maliyet 1'dir, aksi takdirde 0'dır. Sonra bu işlev ortalama hata oranını hesaplar. Ancak, maliyet fonksiyonunuzu tanımlamadan önce kesme ayarlandığını unutmayın.

Aslında, kesme seçiminin maliyet fonksiyonu ile belirlenmesinin daha anlamlı olduğunu düşünüyorum.


0

@SLi'nin cevabı, tanımladığınız maliyet fonksiyonunun ne yaptığını zaten çok iyi açıklıyor. Bununla birlikte, maliyet fonksiyonunun deltadeğeri hesaplamak için kullanıldığını düşündüm cv.glm, bu da çapraz doğrulama hatasının bir ölçümüdür. Bununla birlikte, kritik deltaolarak, maliyete göre verilen her katın hatasının ağırlıklı ortalamasıdır. Bunu, kodun ilgili bitini inceleyerek görüyoruz:

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

ve işlev tarafından döndürülen değer:

  list(call = call, K = K, delta = as.numeric(c(CV, CV + cost.0)), 
    seed = seed)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.