保存通过Bootstrap获得的Gradient Boosting Machine值

时间:2019-11-05 22:50:32

标签: r statistics-bootstrap gbm

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

但是我无法正确保存变量名及其在每次重新引导时计算出的重要性。

我正在使用一个函数来执行此操作,该函数在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

我希望将引导结果与变量名一起保存,但是我只能保存变量名而不用变量名的重要性。

1 个答案:

答案 0 :(得分:1)

使用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)
}