XGBoost xgbTree中的caret varImp包是否使用XGBoost Gain?

5
使用XGBoost xgb.importance 可以打印出重要性矩阵,显示变量的重要性值,作为分类(通过Gain、Cover和Frequency等指标)的度量。Gain是建议使用的变量重要性指标。 使用caret重新采样(repeatedcv,number=10,repeats =5),一个特定的调整网格和train method = "xgbTree", caret varImp()函数显示从0-100%缩放的k-fold特征重要性估计。
我的问题是,caret varImp(xgbMod)包装函数是否使用Gain或所有Gain,Cover和Frequency的某种组合?
1个回答

5

一个小澄清:

caret中的varImp()函数显示了从0-100%缩放的k-fold特征重要性估计。

caret基于拟合的最终模型来估计特征重要性,而不是基于交叉验证。交叉验证告诉您最佳超参数(例如gamma等)以对模型进行拟合。

这是增益,文档不多,我使用示例进行了检查:

library(caret)
data = MASS::Pima.tr
set.seed(111)
mdl = train(type ~ .,data=data,method="xgbTree",tuneLength=3,
trControl=trainControl(method="cv"))

你需要将scale=FALSE设为原始值:

varImp(mdl,scale=FALSE)
xgbTree variable importance

      Overall
glu   0.37953
age   0.19184
ped   0.16418
bmi   0.13755
npreg 0.06450
skin  0.04526
bp    0.01713

与xgb.importance相比:

xgboost::xgb.importance(mdl$finalModel$feature_names,model=mdl$finalModel)
   Feature       Gain      Cover Frequency
1:     glu 0.37953480 0.17966683      0.16
2:     age 0.19183994 0.17190387      0.17
3:     ped 0.16417775 0.26768973      0.28
4:     bmi 0.13755463 0.09755036      0.09
5:   npreg 0.06450183 0.10811269      0.11
6:    skin 0.04526090 0.11229235      0.12
7:      bp 0.01713014 0.06278416      0.07

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接