数据标准化以后,怎么画SHAP图

SHAP图,是一种根据博弈论方法来解释机器学习模型的方法
具体可以参考:https://zhuanlan.zhihu.com/p/441302127

一直都是用的未标准化的数据去训练模型,并且画dependence plot这些。
但是今天用了标准化后的数据训练模型,然后画dependence plot的时候,得到了下图这种图,显然是不对的。于是简单研究了shap返回结果
在这里插入图片描述

#x_trains_M是x_train数据标准化后的结果
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(x_trains_M)  # 传入特征矩阵X,计算SHAP值
shap_interaction_values = explainer.shap_interaction_values(x_trains_M)
y_base = explainer.expected_value
fig = shap.summary_plot(shap_values, x_trains_M, max_display = 30, show = False)

类似summary_plot,不会太受标准化的影响,但是dependence plot是在反映特征值对结果影响,因此特征值被标准化后,会导致横轴发生变化。打开上述代码生成的shap_values 和shap_interaction_values ,会发现其实每一列y是与特征对应的,每一行x也是与输入特征对应的,因此[x, y]对应着训练集中的一个特征的值。
在这里插入图片描述
所以要用标准化前的数据与标准化后得到的shap_values,进行散点图绘图,即可得到dependence plot。此处sofa代表第一个特征,x_trains是标准化前的数据

plt.figure()
plt.scatter(x_trains["sofa"], shap_values[:,0])
plt.axhline(y=0, color="red",linestyle='-')
在R语言中,使用xgboost的`xgb.ggplot.shap.summary`函数SHAP热力(Heatmap)通常是在`xgboost`的生态系统外,由第三方包如`xgboost.plotting`提供。对于`xgb.ggplot.shap.summary`这个特定函数,假设它存在于某个包中,你可以按照以下步骤操作: ```r library(xgboost.plotting) # 如果没有安装,可能需要安装这个包 # 假设你已经有了名为X.train的数据集和已训练的心脏疾病模型Heart.xgb heatmap_shap <- xgb.ggplot.shap.summary(X.train, model = Heart.xgb, top_n = 100, subsample = 1) # 然后可以使用`ggplot2`或者其他绘库进一步定制 heatmap_shap %>% ggplot() + geom_tile(aes(x = Var, y = Row, fill = Val)) + scale_fill_gradient(low = "white", high = "red", name = "SHAP Values") + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 8), axis.title.y = element_blank()) + labs(x = "", y = "") + coord_fixed() ``` 这段代码会创建一个基于SHAP值的热力,颜色越红,表明该特征对该样本的影响越大。 至于SHAP箭头,`xgb.ggplot.shap.summary`可能不会直接提供箭头功能,但你可以手动通过`shap::summary_plot`或类似`ggforce`的`geom_linerange`来创建,就像之前提到的那样,只是这里的代码可能会有所不同,因为可能需要手动绘制箭头。 ```r library(shap) library(ggforce) # 获取SHAPshap_values <- explain(Heart.xgb, X.train, type = "tree") # 创建箭头 ggplot(shap_values, aes(x = feature, y = shap)) + geom_linerange(aes(ymin = shap - importance, ymax = shap + importance, color = variable), size = .7) + theme_minimal() + labs(title = "SHAP Values and Feature Importance", x = "Feature", y = "SHAP Value", color = "Variable") + guides(color = guide_legend(override.aes = list(size = unit(0, "npc")))) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值