在xgboost模型中计算SHAP值时出错 - 特征名称不同?

问题描述 投票:0回答:1

我已经使用插入符训练了 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() 的交集,它是完整的。

r xgboost predict caret shap
1个回答
0
投票

我发现错误了! xgboost 函数在内部更改了我的数据集中的一列名称,这就是我收到错误的原因。 这是我用来寻找它的代码:

caret.xgb$coefnames %>% as_tibble() %>% filter(!value %in% to_select)
© www.soinside.com 2019 - 2024. All rights reserved.