繁体   English   中英

R中xgboost回归的置信区间

[英]Confidence interval for xgboost regression in R

我目前正在处理一个包含4个分类输入变量和一个数字输出的数据集。

我使用R中的xgboost包创建了一个模型。但是我找不到计算CI的方法。

如何计算预测的置信区间? 我找到了解决分类问题的答案 ,但是我对它的理解不正确。 有人可以为我的问题做更深入的解释吗?

据我所知,没有直接的方法可以使用xgboost软件包进行计算。

您提供的链接文章为如何实现提供了框架。 它引用执行“装袋”,这基本上意味着多次创建相同的模型(其中具有随机性)。 对于xgboost,如果将colsample_bytree(每棵树中要使用的列的随机选择)设置为<1,并将subsample(每棵树中要使用的行的随机百分比)设置为<1,则这将引入“随机元素”。

如果将上述变量设置为小于1,则将有一个带有随机元素的模型。 如果要对该模型运行100次不同的时间,每次使用不同的种子值,那么从技术上讲,您将最终获得100个唯一的xgboost模型,每个观察值具有100个不同的预测。 使用这100个预测,您可以使用100个预测的均值和标准差得出自定义的置信区间。

我不能保证这些自定义置信区间的有效性或可靠性,但是如果您想按照链接的文章中的示例进行操作,这将是他们在说什么的解释。

假设您有500次观察,下面是一些执行此操作的示例代码:

##make an empty data frame with a column per bagging run
predictions <- data.frame(matrix(0,500,100))

library(xgboost)

##come up with 100 unique seed values that you can reproduce
set.seed(123)
seeds <- runif(100,1,100000)

for (i in 1:ncol(predictions){

set.seed(seeds[i])
xgb_model <- xgboost(data = train,
                     label = y,
                     objective = "reg:linear",
                     eval_metric = "rmse",
                     subsample = .8,
                     colsample_bytree = .8
                     )

predictions[,i] <- predict(xgb_model,newdata = test)

}

在此博客文章中介绍了一种从xgboost回归中获取分位数的好方法。 我相信这是比链接的问题(用于回归)中建议的其他方法更为优雅的解决方案。

https://www.bigdatarepublic.nl/regression-prediction-intervals-with-xgboost/

基本上,您的问题可以描述如下(来自博客):

在分位数值q与分区内的观测值相距较远的情况下,由于Gradient和Hessian对于大差异x_i-q都是恒定的,因此分数保持为零,并且不会发生分裂。

然后提出以下解决方案:

一个有趣的解决方案是通过在Gradient中添加随机化来强制分割。 当观测值x_i与分区内的旧分位数估计q之间的差异较大时,此随机化将强制对此体积进行随机分割。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM