保存使用 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)
}
我正在计算提升梯度以确定模型中变量的重要性,但是我正在执行重采样以确定每个变量的重要性如何表现。
但我无法正确保存变量名及其在每个 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)
}