캐럿 패키지를 사용하여 GBM 모델로 작업하고 있으며 예측 데이터의 예측 간격을 해결하는 방법을 찾고 있습니다. 나는 광범위하게 검색했지만 Random Forest의 예측 간격을 찾기위한 몇 가지 아이디어 만 제시했습니다. 어떤 도움 / R 코드라도 대단히 감사하겠습니다!
캐럿 패키지를 사용하여 GBM 모델로 작업하고 있으며 예측 데이터의 예측 간격을 해결하는 방법을 찾고 있습니다. 나는 광범위하게 검색했지만 Random Forest의 예측 간격을 찾기위한 몇 가지 아이디어 만 제시했습니다. 어떤 도움 / R 코드라도 대단히 감사하겠습니다!
답변:
편집 : 아래 주석에서 지적했듯이 예측 간격이 아니라 예측에 대한 신뢰 구간을 제공합니다 . 내 답장에 약간의 만족감을 주었으며 추가로 생각해야했습니다.
이 답변을 무시하거나 예측 간격을 얻기 위해 코드를 작성하십시오.
예측 간격을 몇 번 만드는 데 간단한 부트 스트랩을 사용했지만 다른 (더 나은) 방법이있을 수 있습니다.
패키지 의 oil
데이터를 고려하여 caret
Stearic이 Palmitic에 미치는 영향에 대해 부분 종속성과 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 에서도 비슷한 방법이 사용되었습니다.
때로는 포인트 추정치가 구간을 벗어나지 만 튜닝 그리드를 수정하면 (즉, 트리 수 및 / 또는 깊이 증가) 일반적으로 해결됩니다.
도움이 되었기를 바랍니다!