GBM 예측 간격을 찾는 방법


12

캐럿 패키지를 사용하여 GBM 모델로 작업하고 있으며 예측 데이터의 예측 간격을 해결하는 방법을 찾고 있습니다. 나는 광범위하게 검색했지만 Random Forest의 예측 간격을 찾기위한 몇 가지 아이디어 만 제시했습니다. 어떤 도움 / R 코드라도 대단히 감사하겠습니다!

답변:


4

편집 : 아래 주석에서 지적했듯이 예측 간격이 아니라 예측에 대한 신뢰 구간을 제공합니다 . 내 답장에 약간의 만족감을 주었으며 추가로 생각해야했습니다.

이 답변을 무시하거나 예측 간격을 얻기 위해 코드를 작성하십시오.


예측 간격을 몇 번 만드는 데 간단한 부트 스트랩을 사용했지만 다른 (더 나은) 방법이있을 수 있습니다.

패키지 의 oil데이터를 고려하여 caretStearic이 Palmitic에 미치는 영향에 대해 부분 종속성과 95 % 간격을 생성한다고 가정합니다. 아래는 간단한 예일 뿐이지 만 필요에 따라 사용할 수 있습니다. 인수 gbm를 허용하도록 패키지가 업데이트 되었는지 확인하십시오.grid.pointsplot.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 % 예측 간격 과 동일하지 않습니다 .
Hong Ooi

도! 당신이 올바른지. 답장이 너무 빨랐습니다. 감사합니다. 답변을 수정하겠습니다.
ErikL

도와 줘서 고마워! 부트 스트랩 기능에 문제가 있습니다. 나는이 문제를 stats.stackexchange.com/questions/117329/…에 게시했습니다 . 내 데이터 세트로 부트 스트랩 기능을 올바르게 설정하는 방법을 정확히 모르겠습니다.
CooperBuckeye05

1
나는이 시점에서 이것이 내가 찾고있는 것이 아니라고 생각하므로 여전히 답을 찾고 있습니다!
CooperBuckeye05
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.