Сохранить значения градиентной машины, полученные с помощью Bootstrap - PullRequest
1 голос
/ 06 ноября 2019

Я рассчитываю повышающий градиент, чтобы определить важность переменных в модели, однако я выполняю повторные выборки, чтобы определить, как ведет себя важность каждой переменной.

Но я не могу правильно сохранить имя переменнойс его важностью, рассчитанной в каждой начальной загрузке.

Я делаю это с помощью функции, которая вызывается в команде пакета начальной загрузки 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 Ответ

1 голос
/ 06 ноября 2019

с summary.gbm, по умолчанию это порядок переменных в соответствии с важностью. вам нужно установить его в ЛОЖЬ, а также не строить. Тогда значение возвращаемой переменной будет таким же, как порядок переменных в подгонке.

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)
}
...