在R中使用xgb.train()
建立一个xgboost模型之后,我经常查看变量的重要性。这是一个数据集mtcars
的示例。
library(xgboost)
library(tidyverse)
xgb_mtcars <- xgb.DMatrix(
data = mtcars[,-1] %>% as.matrix(),
label = mtcars$mpg
)
xgb_Param <- list(
booster = 'gbtree',
tree_method = 'hist',
eta = .3
)
xgb_mod_1 <- xgb.train(
data = xgb_mtcars,
params = xgb_Param,
nround = 50
)
xgb.importance(dimnames(xgb_mtcars)[[2]], model = xgb_mod_1) %>% head()
# Feature Gain Cover Frequency
# 1: cyl 0.43871401 0.01712283 0.03266788
# 2: wt 0.30334298 0.11487124 0.13611615
# 3: disp 0.18704847 0.40043144 0.34482759
# 4: hp 0.04358683 0.11298369 0.12522686
# 5: qsec 0.01397431 0.19091277 0.20689655
# 6: drat 0.01082511 0.08520965 0.10344828
今天,我尝试使用xgb.cv()
,以便与数据集进行k折并防止过度拟合。但是函数xgb.importance()
不再起作用。
在此功能的帮助下,它说该模型需要来自xgb.train()。
xgb_mod_2 <- xgb.cv(
data = xgb_mtcars,
params = xgb_Param,
nfold = 3,
nround = 50
)
xgb.importance(dimnames(xgb_mtcars)[[2]], model = xgb_mod_2) %>% head()
# Error in xgb.importance(dimnames(xgb_mtcars)[[2]], model = xgb_mod_2) :
# model: must be an object of class xgb.Booster
问题:在xgb.cv()
之后,有没有一种方法可以计算变量的重要性?或者也许只将这种重要性提高一倍。
我在互联网上找不到任何东西。这是否意味着xgb.cv()
仅用于调整参数,然后,在固定“最佳”参数时,需要再次运行xgb.train()
吗?