赞
踩
shap(SHapley Additive exPlanation)作为基于python开发的一个可解释模型包,具有封装优良,可视化方便,易上手等优点。
但是作为一个更新速度赶不上debug速度的python包,shap配置的环境极其娇气,导致我在配置的过程中踩了一堆坑,经历了整整两天纯环境配置的精神折磨。
写下这篇文章记录下自己的踩坑过程,配置shap环境过程中,使用了两台电脑控制变量法不断尝试,并结合了另一个同学的配置过程和经验,总结了一些自己的环境配置建议以及会遇到的问题的原因,希望能提供一些参考,但愿芸芸众生以后科研路上都不会受到配环境的折磨。
该篇笔记写为2023/09/28 参考建议的时候请考虑你的tensorflow是否已经更新到了4.0,该篇文章已经没有了参考价值(doge)
shap 配置环境下一般冲突,无非就是tensorflow,keras,pytorch,pandas,numpy等环境配置会有冲突,这里强烈建议不要怕麻烦,安装conda 之后专门创建一个shap的conda 环境,这里建议不要python版本过高,如并不是很稳定的3.12,不然后面tensorflow等会有冲突,我一开始就是python版本过高,以至于后面numpy一直冲突搞不定。
conda create -n shap python=3.9
这里有个小技巧,如果你使用的是pycharm的话,可以通过Files 中的选项中的Settings中 load 你的shap环境,然后通过你的
顶部找到你的shap相关的python文件然后选择Edit Configurations 单独为这个python文件选择你的shap 环境,这样并不会影响整个项目的其他python文件使用你原本的base等环境。
我用的是tensorflow,同学有用pytorch的,在使用过程中基本没有遇到问题,这里就只讨论tensorflow这个该死的东西会遇到的问题(恨)。
tensorflow 2.10.0
keras 2.10.0
shap 0.42.0
pandas 2.0.3
numpy 1.25.2
尽量使用conda 安装你需要的包
因为 pandas/numpy/keras/tensorflow 这几个包基本上就像互相看不顺眼的各个山头大王,一个不小心就会发生版本冲突,有的时候用pip随便安装一个版本,看着好像这些大王没有什么冲突,下面的wrapt啊,tensorbroad啊,这些小兵不知道怎么就不对付,一跑程序就会报错,使用conda安装报错的几率会小一些,安装完上述"大王"们后,再运行你的py程序,根据它的报错,重新安装它报错提示的包就好了。
可以通过pip 或者conda 安装 [shap](GitHub - shap/shap: A game theoretic approach to explain the output of any machine learning model.)
pip install shap
or
conda install -c conda-forge shap
shap 目前github最新是0.42.0版本,不建议使用0.3的版本,第一是shap本身更新很快,用惯了0.3 后面再改会很麻烦。 第二是我曾经尝试降低我的shap版本至很多issue说work的0.35的时候,必须要不停地更新Microsoft Visual C++ Build Tool, 感觉是另外一个坑,所以不如与时俱进一些直接安装shap==0.42.0/0.41.0,也方便copy网上的代码作为应用。
这个几乎是我shap安装过程中遇到的最大的一个问题,我到第二天才反应过来,shap冲突到底冲突在哪里,就是冲突在numpy版本。
上述已经提到,shap建议安装最近的0.4x,这里有一个问题就是0.4x的shap将会自动更新numpy至1.24 以上的版本,如果你的tensorflow 版本过低,如0.26等,他们匹配的numpy版本基本都是1.19.5等1.1X的numpy,那么当你安装0.26的tensorflow之后(numpy~=1.19.5),再去安装shap(自动更新至numpy=1.24),就会发生numpy的版本冲突,就会出现类似如下的错误
raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'object'.
`np.object` was a deprecated alias for the builtin `object`. To avoid this error in existing code, use `object` by itself. Doing this will not modify any behavior and is safe.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
或者是说你的np.bool 出现类似上面的错误,如果你遇到了类似报错,请检查一下你的numpy版本是否和你的tensorflow & shap 有版本冲突。
我这里曾经试图改了源码,就是把调用np.bool的代码直接改成bool,但是后面还是会有其他报错,所以这里建议不要修改shap或者tensorflow的代码,直接检查版本冲突,一劳永逸。
我在以上所有问题都解决之后,又遇到了一个问题,就是pytorch的ddl无法调用。
OSError: [WinError 126] 找不到指定的模块。 Error loading “D:\Anaconda\envs\tensorflow\lib\site-packages\torch\lib\asmjit.dll” or one of its dependencies.
如果你遇到以上错误,说明你的pytorch安装有一部分ddl包无法正常调用,而一般都是你的原本的base环境的torch包某一部分的动态链接出了问题,这里就体现了上述重新建一个shap环境的重要性,请在你的shap环境下重新安装一个pytorch,就可以解决。
当你解决以上问题,基本上就可以愉快的调用你的shap解释你的模型了~(乐)
Again,希望芸芸众生不再受配环境的折磨!(摔)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。