R-xgb.cv之后的重要性

时间:2019-04-10 13:16:46

标签: r cross-validation xgboost

在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()吗?

0 个答案:

没有答案