R. बूट पैकेज में cv.glm में लागत कार्य क्या है?


14

मैं लीव-वन-आउट पद्धति का उपयोग करके क्रॉस सत्यापन कर रहा हूं। मेरे पास एक द्विआधारी प्रतिक्रिया है और आर, और cv.glm फ़ंक्शन के लिए बूट पैकेज का उपयोग कर रहा हूं । मेरी समस्या यह है कि मैं इस फ़ंक्शन में "लागत" भाग को पूरी तरह से नहीं समझता। मैं जो समझ सकता हूं वह वह फ़ंक्शन है जो यह तय करता है कि क्या अनुमानित मूल्य को 1 या 0 के रूप में वर्गीकृत किया जाना चाहिए, अर्थात वर्गीकरण के लिए सीमा मूल्य। क्या ये सही है?

और, R में मदद से वे एक द्विपद मॉडल के लिए इस फ़ंक्शन का उपयोग करते हैं: cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5) :। मैं इस फ़ंक्शन की व्याख्या कैसे करूं? इसलिए मैं अपने विश्लेषण के लिए इसे सही ढंग से संशोधित कर सकता हूं।

किसी भी मदद की सराहना की है, एक फ़ंक्शन का उपयोग नहीं करना चाहता जो मुझे समझ में नहीं आता है।

जवाबों:


9

r एक वेक्टर है जिसमें वास्तविक परिणाम होता है, pi एक वेक्टर है जिसमें फिट किए गए मान होते हैं।

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

सीरोंटी=Σ|आरमैं-पीमैंमैं|

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

और mycost को cv.glm फ़ंक्शन में एक तर्क के रूप में रखें।


सीरोंटी
Σ|आरमैं-पीमैं|0.5
|आरमैं-पीमैं|=11, नहीं 2)?
मूनक्रेटर

@ फेंग-माई पी == 0 या पी <0.5? (और pi == 1 या pi> 0.5?) यदि 0.5 का उपयोग निर्णय सीमा के रूप में किया जाता है। क्या भविष्यवाणियां संभावित नहीं हैं ?
पीएम

1
@PM हाँ आप सही हैं। पीमैंglm मॉडल से प्रतिक्रियाएं हैं। सुधारों के लिए धन्यवाद।
फेंग माई

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

सबसे पहले, आपने 0.5 के रूप में कट-ऑफ सेट किया है। आपका r 0/1 है, लेकिन pi प्रायिकता है। इसलिए व्यक्तिगत लागत 1 है यदि पूर्ण त्रुटि 0.5 से अधिक है, अन्यथा 0. तो, यह फ़ंक्शन औसत त्रुटि दर की गणना करता है। लेकिन याद रखें, कट-ऑफ आपके लागत फ़ंक्शन को परिभाषित करने से पहले सेट किया गया है।

वास्तव में, मुझे लगता है कि यह अधिक समझ में आता है अगर कट-ऑफ का विकल्प लागत फ़ंक्शन द्वारा निर्धारित किया जाता है।


0

@ एसएलआई द्वारा जवाब पहले से ही बहुत अच्छी तरह से बताता है कि आपने जो लागत फ़ंक्शन परिभाषित किया है। हालांकि, मैंने सोचा कि मैं जोड़ूंगा कि लागत फ़ंक्शन का उपयोग उस deltaमूल्य से गणना करने के लिए किया जाता है cv.glm, जो क्रॉस सत्यापन त्रुटि का माप है। हालांकि, गंभीर रूप deltaसे लागत द्वारा दी गई प्रत्येक गुना की त्रुटि का भारित औसत है। हम इसे कोड के प्रासंगिक बिट का निरीक्षण करके देखते हैं:

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

और फ़ंक्शन द्वारा लौटाया गया मान है:

  list(call = call, K = K, delta = as.numeric(c(CV, CV + cost.0)), 
    seed = seed)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.