保存使用 Bootstrap 获得的梯度提升机值

Save Gradient Boosting Machine values obtained with Bootstrap

我正在计算提升梯度以确定模型中变量的重要性,但是我正在执行重采样以确定每个变量的重要性如何表现。

但我无法正确保存变量名及其在每个 bootstrap 中计算的重要性。

我正在使用一个在 bootstrap 包中调用的函数来执行此操作 boost命令。

下面是一个适用于 AmesHousing 数据的最小可重现示例:

library(gbm)
library(boot)
library(AmesHousing)

df <- make_ames()

imp_gbm <- function(data, indices) {
  d <- data[indices,]
  gbm.fit <- gbm(
    formula = Sale_Price ~ .,
    distribution = "gaussian",
    data = d,
    n.trees = 100,
    interaction.depth = 5,
    shrinkage = 0.1,
    cv.folds = 5,
    n.cores = NULL,
    verbose = FALSE
  )

 return(summary(gbm.fit)[,2])
}

results_GBM <- boot(data = df,statistic = imp_gbm, R=100)

results_GBM$t0

我希望用变量名保存 bootstrap 结果,但我只能保存没有变量名的变量的重要性。

和summary.gbm,默认是按照重要性对变量进行排序。您需要将其设置为 FALSE,并且不绘制。那么返回的变量重要性与拟合中变量的顺序相同。

imp_gbm <- function(data, indices) {
  d <- data[indices,]
  # use gbmfit because gbm.fit is a function
  gbmfit <- gbm(
    formula = Sale_Price ~ .,
    distribution = "gaussian",
    data = d,
    n.trees = 100,
    interaction.depth = 5,
    shrinkage = 0.1,
    cv.folds = 5,
    n.cores = NULL,
    verbose = FALSE
  )
  o= summary(gbmfit,plotit=FALSE,order=FALSE)[,2]
  names(o) = gbmfit$var.names
  return(o)
}