环境准备:
windows10
python3.7
pip install shap ## 安装python
报错1:
解决1: 将python切换为python3.6即可(可重建一个python3.6的虚拟环境)
import xgboost
import shap
# 训练一个XGBoost 模型
X, y = shap.datasets.boston()
model = xgboost.train({"learning_rate": 0.1, "silent": 1},
xgboost.DMatrix(X, label=y), 100)
# 对模型文件model进行解释
explainer = shap.TreeExplainer(model)
报错2: 上述代码块中最后一步报错:‘UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x96 in position 34: invalid start byte’
解决2: 卸载xgboost,重装xgboost1.1.0版本即可。具体原因
pip install xgboost==1.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple ## xgboost重装
# 可视化第一个样本预测的解释
shap.force_plot(explainer.expected_value,
shap_values[0,:],
X.iloc[0,:], matplotlib=True)
# 所有样本Shap图
shap.force_plot(explainer.expected_value, shap_values, X)
# 计算所有特征的影响
shap.summary_plot(shap_values, X)
# 特征重要性
shap.summary_plot(shap_values, X, plot_type="bar")
报错3:“AssertionError: IPython must be installed to use this visualizer! Run pip install ipython
and then…”
解决3: 根据提示安装ipython
pip3 install ipython
ipython安装成功,但是在命令行输入ipython启动时,出现:
报错4:“ImportError: cannot import name ‘AsyncGenerator’”
解决4:
pip install prompt-toolkit==2.0.10
此时直接在命令行输入"ipython"时,可以发现ipython已安装成功:
继续在IDE中运行完整代码,没有报错
import xgboost
import shap
# 训练一个XGBoost 模型
X, y = shap.datasets.boston()
model = xgboost.train({"learning_rate": 0.1, "silent": 1},
xgboost.DMatrix(X, label=y), 100)
# 对模型文件model进行解释
explainer = shap.TreeExplainer(model)
# 传入特征矩阵X,计算SHAP值
shap_values = explainer.shap_values(X)
print(shap_values.shape)
# 可视化第一个样本预测的解释
shap.force_plot(explainer.expected_value,
shap_values[0,:],
X.iloc[0,:], matplotlib=True)
# 所有样本Shap图
shap.force_plot(explainer.expected_value, shap_values, X)
# 计算所有特征的影响
shap.summary_plot(shap_values, X)
# 特征重要性
shap.summary_plot(shap_values, X, plot_type="bar")
附: shap Github地址