SHAP可视化

文章目录

    • 安装
      • 问题1:numpy版本冲突
    • 解释器
    • 条形图
    • 蜂群图
    • 依赖图
      • 问题1:绘图错误
    • 参考文章

备注:每个条目如果没有遇到问题就可以直接跳过啦

安装

pip install shap 装完没问题可以直接进下一步
以下运行基于的环境及版本如下:
SHAP可视化_第1张图片

问题1:numpy版本冲突

问题大概是:安装SHAP之后numpy变成1.21.6,结果其他就没法使用了,升级numpy,不用SHAP,其原代码可以运行,但SHAP不行,以下是探索过程

我的win10在安装之后出现了一些报错,
numpy为1.21.6,但是无法使用,我尝试升级到最新版本之后
在这里插入图片描述
这里出现了两个版本冲突,之前的scikit-learn是用xgb还是什么出现报错,在github官网上找到了相关问题之后发现不能用1.0,所以降低了版本,我注意到其实并没有使用imbalanced-learn这个包,所以打算把这个卸载了
SHAP可视化_第2张图片
numpy版本问题,按提示限定一下pip install "numpy>=1.18, <1.22"
SHAP可视化_第3张图片
额,又装回来了1.21.6,然后还是运行报错
SHAP可视化_第4张图片
我注释掉SHAP之后还是这样报错,记得在下载SHAP之前它也给我重新安装了numpy,所以可能这个版本符合SHAP但不符合其它包
用依赖树查看一下, 有点无语,这个imblearn
SHAP可视化_第5张图片
我卸载了imblearn,结果还是没有用,虽然显示没有冲突了
再看一下那些依赖numpy的包,要哪些版本
pipdeptree -p numpy -r

从结果来看1.21.6应该是符合要求的,真的不解了
SHAP可视化_第6张图片

麻了,我上官网看了下numpy版本https://pypi.org/simple/numpy/ 1.21.6不支持python310,而我用的3.10,哈哈哈哈,绝了绝了,居然是跟python版本冲突,忽略了这茬
SHAP可视化_第7张图片

然后发现自己很久没试过安装老版本的python了,官网选择对应的操作系统
SHAP可视化_第8张图片
SHAP可视化_第9张图片
记得注意勾选添加环境变量,这样就不用自己添加了
SHAP可视化_第10张图片

多个python版本所以重命名一下避免冲突
SHAP可视化_第11张图片
发现没法运行,查看环境变量发现,跟系统的一个变量冲突了(很久以前用过一个python,后来卸载了)
这也告诉我们不要随便把添加系统环境变量,而是写到用户环境变量
SHAP可视化_第12张图片
删掉之后在echo看一下发现没有改变,也就是环境变量没有生效,重启系统试试看
ok, 解决了,接下来就可以用3.8了
在这里插入图片描述
然后包也要重新装,我真的会流泪,一个非常惨痛的教训,少用最新版,真的很多问题以及其他依赖包跟不上
另外,我这里安装包时直接改下载源还是慢,有时候就是这么无语

python38 -m pip install pandas xgboost matplotlib shap -i https://pypi.tuna.tsinghua.edu.cn/simple

解释器

SHAP官方文档,有啥问题,细细看
反正我现在挺爱官方文档的,详细,好用,就是得耐心,看英文

现在很多机器学习模型都是黑盒,所以需要一些手段来对模型进行解释,SHAP就是其中一种手段,其来源是SHapley Additive exPlanation 夏普利加法解释算法(自己翻译的,术语不知),对于不同的模型,SHAP有不同的解释器: 各解释器用法可见文档

  1. Explainer:适用于任何机器模型
  2. linear:适用于特征独立不相关的线性模型
  3. tree:适用于树模型和基于树模型的集成算法
  4. deep:用于计算深度学习模型,基于DeepLIFT算法
  5. gradient:用于深度学习模型,综合了SHAP、集成梯度、和SmoothGrad等思想,形成单一期望值方程
  6. kernel:模型无关,适用于任何模型
  7. sampling :基于特征独立性假设,当你想使用的后台数据集很大时,kernel的一个很好的替代方案

大致了解之后就可以愉快地开始画图了

shap_values = explainer(X_train) #输出shap.Explanation对象
shap_values2 = explainer.shap_values(X_train) #输出numpy.array数组

条形图

model.fit(X_train, y_train)
explainer = shap.Explainer(model)
shap_values = explainer(X_train)
shap.plots.bar(shap_values, max_display=20)

这个画出来如下,但是是红色的,没找到设置颜色的参数,看起来有点,额,太亮了
SHAP可视化_第13张图片

另一个官方文档,感觉接口有简化
SHAP可视化_第14张图片

蜂群图

shap.plots.beeswarm(shap_values) 总感觉我的这个图没有渲染完,中间都断掉了,旁边的high low也没显示完全(画依赖图降级matplotlib之后该问题也解决了)

SHAP可视化_第15张图片

依赖图

依赖图接口说明
shap.dependence_plot('age', shap_values2, X_train)
这个年龄图怎么看起来丝毫没有用的样子,都是对半开,在0附近
SHAP可视化_第16张图片

问题1:绘图错误

ValueError: Passing parameters norm and vmin/vmax simultaneously is not supported. Please pass vmin/vmax directly to the norm when creating it.
解决方案
我把matplotlib从3.5.1降级到3.4.0解决了此问题

参考文章

用 SHAP 可视化解释机器学习模型的输出实用指南
可解释性算法总结文档

你可能感兴趣的:(python,SHAP)