首页 > 解决方案 > R - xgb.cv 之后的 xgb.importance

问题描述

我曾经在使用 R 构建 xgboost 模型后查看变量的重要性xgb.train()。这是数据集的示例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-folds 并防止过度拟合。但是该功能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()需要再次运行?

标签: rcross-validationxgboost

解决方案


推荐阅读