GBM Tahmin Aralığı nasıl bulunur?


12

Caret paketini kullanarak ve tahmin edilen verilerim için tahmin aralıklarını çözmek için bir yöntem bulmak için GBM modelleri ile çalışıyorum. Çok araştırdım ama Rastgele Orman için tahmin aralıkları bulmak için sadece birkaç fikir buldum. Herhangi bir yardım / R kodu büyük mutluluk duyacağız!

Yanıtlar:


4

DÜZENLEME: Aşağıdaki yorumlarda belirtildiği gibi, bu kesinlikle tahmin aralıkları değil tahminler için güven aralıkları verir . Benim cevap ile biraz tetik mutlu oldu ve bu bazı ekstra düşünce vermeliydi.

Bu yanıtı göz ardı etmekten çekinmeyin veya tahmin aralıklarını almak için kodu oluşturmaya çalışın.


Birkaç kez tahmin aralığı oluşturmak için basit önyükleme kullandım ama başka (daha iyi) yollar olabilir.

Paketteki oilverileri göz önünde bulundurun ve caretStearic'in Palmitic üzerindeki etkisi için kısmi bağımlılıklar ve% 95 aralıklar oluşturmak istediğimizi varsayalım. Aşağıda basit bir örnek var, ancak ihtiyaçlarınızı karşılamak için onunla oynayabilirsiniz. gbmBağımsız grid.pointsdeğişkene izin vermek için paketin güncel olduğundan emin olunplot.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))))

Bunu yapmanın bir yolu, en azından gbm'yi ayarlamaktan kaynaklanan belirsizlikleri hesaba katmaya çalışmaktır. Benzer bir yaklaşım http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract ' da kullanılmıştır.

Bazen nokta tahmini aralığın dışındadır, ancak ayarlama ızgarasını değiştirmek (yani, ağaç sayısını ve / veya derinliği artırmak) genellikle bunu çözer.

Bu yardımcı olur umarım!


1
Kodunuzu doğru anlarsam, sahip olduğunuz tahminler için % 95 güven aralığı vardır. Bu,% 95 tahmin aralığıyla aynı değildir , bu da artık (rastgele) hatayı ekler.
Hong Ooi

D'oh! Haklısın. Cevap biraz fazla hızlı oldu. Teşekkürler, cevabımı düzenleyeceğim.
ErikL

yardım için teşekkürler! Bootstrap işlevi ile ilgili bir sorun yaşıyorum. Bu sorunu stats.stackexchange.com/questions/117329/… adresinde yayınladım . Veri setimle bootstrap işlevinin nasıl ayarlanacağından tam olarak emin değilim.
CooperBuckeye05

1
Sanırım bu noktada aradığım şey bu değil, bu yüzden hala bir cevap arıyorum!
CooperBuckeye05
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.