R 中 xgboost 回归的置信区间

Luk*_*ren 5 regression r machine-learning confidence-interval xgboost

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

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

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

Nat*_*son 3

据我所知,没有直接的方法可以使用 xgboost 包来计算这个值。

您提供的链接文章提供了如何进行此操作的框架。它引用了“bagging”,这基本上意味着多次创建相同的模型(其中具有随机性)。对于 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)

}
Run Code Online (Sandbox Code Playgroud)