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

如何在caret中切换XGBoost模型的结果变量因子水平?

在Caret(xgbTree)中切换XGBoost模型的目标因子水平

要解决SHAP结果与领域知识倒置的问题,核心是让模型将「Yes(癌症存在)」作为目标类别,以下是两种可行方法:

方法1:调整结果变量的因子水平顺序

Caret默认将因子的第二个水平视为正类(模型会输出该类的预测概率)。只需把「Yes」设为因子的第二个水平即可:

# 重新定义结果变量的因子水平,No在前,Yes在后
data$cancer <- factor(data$cancer, levels = c("No", "Yes"))

重新训练模型后,XGBoost会以「Yes」为目标类别,特征与癌症的关联关系会符合预期。

方法2:在训练控制参数中指定正类

如果不想修改原始数据的因子顺序,可在trainControl中通过positive参数直接指定正类:

# 配置训练控制参数,指定正类为"Yes"
ctrl <- trainControl(
  method = "cv", # 替换为你实际使用的验证方法
  positive = "Yes"
)

# 训练模型时传入控制参数
xgb_model <- train(
  x = your_predictors, # 你的特征数据集
  y = data$cancer, # 原始结果因子变量
  method = "xgbTree",
  trControl = ctrl,
  # 其他调参参数如tuneGrid等按需设置
)

验证调整效果

训练完成后,可通过输出预测概率确认是否生效:

# 输出测试集的类别概率
pred_probs <- predict(xgb_model, newdata = test_data, type = "prob")
head(pred_probs)

若「Yes」列的概率随年龄增加而上升,说明调整成功。此时重新计算SHAP值,绘制的蜂群图、依赖图就会与领域知识一致。

注意:调整后必须重新训练模型,基于旧模型的SHAP结果不会自动更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:01:00