GBM प्रिडिक्शन इंटरवल कैसे खोजें


12

मैं कैरेट पैकेज का उपयोग करके GBM मॉडल के साथ काम कर रहा हूं और अपने अनुमानित डेटा के लिए पूर्वानुमान अंतराल को हल करने के लिए एक विधि ढूंढ रहा हूं। मैंने बड़े पैमाने पर खोज की है लेकिन केवल रैंडम फ़ॉरेस्ट के लिए पूर्वानुमान अंतराल खोजने के लिए कुछ विचारों के साथ आते हैं। कोई मदद / आर कोड बहुत सराहना की जाएगी!

जवाबों:


4

EDIT: जैसा कि नीचे दिए गए टिप्पणियों में बताया गया है कि भविष्यवाणियों के लिए आत्मविश्वास अंतराल देता है और भविष्यवाणी अंतरालों को कड़ाई से नहीं । मेरे जवाब से थोड़ा ट्रिगर खुश था और इसे कुछ अतिरिक्त विचार देना चाहिए था।

इस उत्तर को अनदेखा करने के लिए स्वतंत्र महसूस करें या भविष्यवाणी अंतराल प्राप्त करने के लिए कोड पर निर्माण करने का प्रयास करें।


मैंने कुछ समय के लिए भविष्यवाणी अंतराल बनाने के लिए सरल बूटस्ट्रैप का उपयोग किया है लेकिन अन्य (बेहतर) तरीके हो सकते हैं।

पैकेज oilमें डेटा पर विचार करें caretऔर मान लें कि हम आंशिक निर्भरता उत्पन्न करना चाहते हैं और पाल्मेटिक पर स्टियरिक के प्रभाव के लिए 95% अंतराल। नीचे एक सरल उदाहरण है, लेकिन आप अपनी आवश्यकताओं के अनुरूप इसके साथ खेल सकते हैं। सुनिश्चित करें कि तर्क में gbmअनुमति देने के लिए पैकेज अपडेट grid.pointsहैplot.gbm

library(caret)
data(oil)
#train the gbm using just the defaults.
tr <- train(Palmitic ~ ., method = "gbm" ,data = fattyAcids, verbose = FALSE)

#Points to be used for prediction. Use the quartiles here just for illustration
x.pt <- quantile(fattyAcids$Stearic, c(0.25, 0.5, 0.75))

#Generate the predictions, or in this case, the partial dependencies at the selected points. Substitute plot() for predict() to get predictions
p <- plot(tr$finalModel, "Stearic", grid.levels = x.pt, return.grid = TRUE)

#Bootstrap the process to get prediction intervals
library(boot)

bootfun <- function(data, indices) {
  data <- data[indices,]

  #As before, just the defaults in this example. Palmitic is the first variable, hence data[,1]
  tr <- train(data[,-1], data[,1], method = "gbm", verbose=FALSE)

  # ... other steps, e.g. using the oneSE rule etc ...
  #Return partial dependencies (or predictions)

  plot(tr$finalModel, "Stearic", grid.levels = x.pt, return.grid = TRUE)$y
  #or predict(tr$finalModel, data = ...)
}

#Perform the bootstrap, this can be very time consuming. Just 99 replicates here but we usually want to do more, e.g. 500. Consider using the parallel option
b <- boot(data = fattyAcids, statistic = bootfun, R = 99)

#Get the 95% intervals from the boot object as the 2.5th and 97.5th percentiles
lims <- t(apply(b$t, 2, FUN = function(x) quantile(x, c(0.025, 0.975))))

यह ऐसा करने का एक तरीका है जो कम से कम gbm को ट्यूनिंग से उत्पन्न अनिश्चितताओं के लिए खाते में लाने की कोशिश करता है। Http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract में एक समान दृष्टिकोण का उपयोग किया गया है

कभी-कभी बिंदु अनुमान अंतराल के बाहर होता है, लेकिन ट्यूनिंग ग्रिड को संशोधित करना (यानी, पेड़ों की संख्या और / या गहराई को बढ़ाना) आमतौर पर हल करता है।

उम्मीद है की यह मदद करेगा!


1
अगर मैं आपके कोड को सही तरह से समझ पाऊं, तो आपके पास जो भविष्यवाणी है उसके लिए 95% विश्वास अंतराल है। यह एक 95% भविष्यवाणी अंतराल के समान नहीं है , जो अवशिष्ट (यादृच्छिक) त्रुटि जोड़ता है।
होंग ओईई

डी 'ओह! तुम सही हो। जवाब देने में थोड़ा तेज था। धन्यवाद, मैं अपना उत्तर संपादित करूंगा।
एरिकेल

मदद के लिए शुक्रिया! मैं बूटस्ट्रैप फ़ंक्शन के साथ एक समस्या है। मैंने उस मुद्दे को आँकड़े.स्टैकएक्सचेंज . com / questions / 117329 / पर पोस्ट किया है । मैं ठीक से निश्चित नहीं हूं कि अपने डेटासेट के साथ बूटस्ट्रैप फ़ंक्शन को ठीक से कैसे सेट किया जाए।
कूपरबकेई ०५

1
मैं इस बिंदु पर अनुमान लगाता हूं कि यह वह नहीं है जिसकी मुझे तलाश है, इसलिए मैं अभी भी उत्तर की तलाश में हूं!
कूपरबैके ०५
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.