You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XGBoost多分类模型计算SHAP值时出现‘colnames’错误求助

解决XGBoost多分类模型计算SHAP值的维度错误问题

错误根源

你用multi:softmax作为目标函数时,XGBoost输出的是单维度的类别标签(每个样本对应一个类别序号),但SHAPforxgboost::shap.values要求模型输出的是每个类别的概率分布(二维矩阵,每行对应一个样本的所有类别概率),维度不匹配就触发了报错。

解决方案

把目标函数换成multi:softprob,同时修正代码里的语法小错误,具体调整如下:

修正后的完整代码

# 处理训练数据
X_train <- as.matrix(train_data[, !names(train_data) %in% c("min_column")])
Y_train <- train_data$min_column
Y_train <- as.integer(as.factor(Y_train)) - 1
Y_train <- as.matrix(Y_train)
# 补上缺失的闭合括号
num_class <- length(unique(Y_train))

# 修改目标函数为multi:softprob
params <- list(booster = "gbtree", 
               objective = "multi:softprob",  # 关键修改点
               eta=0.01, 
               gamma=0.01, 
               max_depth=2, 
               subsample=1, 
               num_class=num_class)

# 训练模型
xgb1 <- xgb.train(data = X_train, label = Y_train, verbose = FALSE, params = params, nrounds = 10)

# 计算SHAP值
shap_values <- SHAPforxgboost::shap.values(xgb_model = xgb1, X_train = X_train)

补充说明

  • multi:softprob是多分类任务的标准目标函数之一,它会输出每个样本在所有类别上的概率,完全符合多分类任务的要求,不用担心模型不按多分类逻辑执行。
  • 修正后的代码同时补上了num_class定义时缺失的闭合括号,避免了额外的语法错误。

内容的提问来源于stack exchange,提问作者Shunrei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:15:01