数据标准化以后,怎么画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='-')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值