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

如何基于含缺失值的xgboost.DMatrix绘制shap.plots.scatter散点图

如何基于含缺失值的xgboost.DMatrix绘制shap.plots.scatter散点图

嘿,我太懂你这种困惑了——XGBoost本身对缺失值(NaN)的处理很丝滑,训练的时候直接用DMatrix就行,但轮到用SHAP做解释画散点图时,到底传DMatrix还是原始数组就犯嘀咕了。我来结合你的代码例子给你拆解清楚:

首先,先明确两种调用方式的核心差异:

  • 当你用explanation = explainer(dmat)然后画散点图时,SHAP是直接复用了XGBoost DMatrix内部的缺失值处理逻辑——毕竟XGBoost训练时就是把缺失值当作单独的分支来处理的,SHAP用DMatrix的话,完全对齐了模型训练时的输入规则,计算出的SHAP值是和模型行为100%匹配的,对应的散点图自然能准确反映缺失值对预测的影响。
  • 但如果你用explanation = explainer(X,y),这里的X是原始numpy数组(带NaN),SHAP会把它当作普通的输入数组来处理,没办法复用XGBoost对缺失值的原生优化逻辑,这时候算出来的SHAP值可能和模型实际预测的逻辑脱节,散点图的结果也就没那么可靠了。

那正确的做法是什么呢?其实一句话就能说清:始终用训练时的DMatrix作为SHAP Explainer的输入,具体到你的代码里,只需要保留第一套调用逻辑就行:

explanation = explainer(dmat)
shap.plots.scatter(explanation)

这样生成的散点图会正确展示那些X0为NaN的样本对应的SHAP值,完全贴合XGBoost对缺失值的处理方式。

另外再给你提个小细节:如果你后续想更深入分析缺失值的影响,比如用shap.dependence_plot这类工具,也记得传入DMatrix,确保SHAP的计算逻辑和模型训练完全同步,避免出现结果偏差。

备注:内容来源于stack exchange,提问作者LudvigH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:39:33