R中xgboost回归的置信区间

问题描述 投票:4回答:2

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

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

如何计算预测的置信区间?我找到了this answer to a classification problem,但我不理解它。有人可以更深入地解释我的问题吗?

r machine-learning regression xgboost confidence-interval
2个回答
1
投票

据我所知,没有直接的方法来使用xgboost包来计算它。

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

如果将上述变量设置为小于1,则会有一个带随机元素的模型。如果您在不同的时间运行此模型,每次使用不同的种子值,您最终将获得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)

}

0
投票

这篇博客文章描述了从xgboost回归中获取分位数的一个很好的选择。我相信这是一个比链接问题(回归)中其他方法更优雅的解决方案。

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

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

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

然后建议以下解决方案:

一个有趣的解决方案是通过向Gradient添加随机化来强制拆分。当观察x_i和分区内的旧分位数估计q之间的差异很大时,该随机化将迫使该体积的随机分裂。

© www.soinside.com 2019 - 2024. All rights reserved.