我已经使用插入符训练了 XGBoost 模型,现在,我使用 SHAPforxgboost 包计算每个预测变量的平均 SHAP 值,使用以下代码:
library(SHAPforxgboost)
to_select <- names(caret.xgb$trainingData)[-1] #variables to select in the training set,
#the first one is the outcome, needs to be removed
shap_values <- shap.values(xgb_model = caret.xgb$finalModel,
X_train =data_train %>%
select(all_of(to_select)) %>% as.matrix()
)
shap_long <- shap.prep(shap_contrib = shap_values$shap_score,
X_train = data_train %>%
select(all_of(to_select)) %>% as.matrix()
)
但是,我收到以下错误:
Error in predict.xgb.Booster(xgb_model, (X_train), predcontrib = TRUE) :
Feature names stored in `object` and `newdata` are different!
但是我已经选择了与模型训练集中相同的特征,并且当我使用相同的函数时,输出为 TRUE。
谢谢!
我尝试选择与模型训练集中相同的特征,以防变量的顺序不同,但错误仍然相同。我还查看了每个数据集的 colnames() 的交集,它是完整的。
我发现错误了! xgboost 函数在内部更改了我的数据集中的一列名称,这就是我收到错误的原因。 这是我用来寻找它的代码:
caret.xgb$coefnames %>% as_tibble() %>% filter(!value %in% to_select)