GPUTree 解释器

本笔记本演示了如何在某些简单数据集上使用 GPUTree 解释器。与 Tree 解释器类似,GPUTree 解释器专门为基于树的机器学习模型设计,但它旨在使用 NVIDIA GPU 加速计算。

请注意,要使用 GPUTree 解释器,您需要拥有 NVIDIA GPU,并且 SHAP 需要编译以支持您系统上的当前 GPU 库。在最近的 Ubuntu 服务器上,实现这一点的步骤将是:

  1. 通过从终端运行 nvcc 命令(CUDA 编译器)来检查是否已安装 NVIDIA CUDA 工具包。如果找不到此命令,则需要使用类似 sudo apt install nvidia-cuda-toolkit 的方式进行安装。

  2. 安装 NVIDIA CUDA Toolkit 后,您需要设置 CUDA_PATH 环境变量。如果 which nvcc 输出 /usr/bin/nvcc,那么您可以运行 export CUDA_PATH=/usr

  3. 通过使用 git clone https://github.com/shap/shap.git 克隆 shap 仓库,然后运行 python setup.py install --user 来构建支持 CUDA 的 SHAP。

如果在执行上述指令时遇到问题,请确保在开始新安装之前,通过确保 import shap 失败来检查是否仍有旧版本的 SHAP。

下面我们演示如何在一个简单的成人收入分类数据集和模型上使用 GPUTree 解释器。

[1]:
import xgboost

import shap

# get a dataset on income prediction
X, y = shap.datasets.adult()

# train an XGBoost model (but any other model type would also work)
model = xgboost.XGBClassifier()
model.fit(X, y)
[1]:
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
              colsample_bynode=1, colsample_bytree=1, gamma=0, gpu_id=-1,
              importance_type='gain', interaction_constraints='',
              learning_rate=0.300000012, max_delta_step=0, max_depth=6,
              min_child_weight=1, missing=nan, monotone_constraints='()',
              n_estimators=100, n_jobs=0, num_parallel_tree=1, random_state=0,
              reg_alpha=0, reg_lambda=1, scale_pos_weight=1, subsample=1,
              tree_method='exact', validate_parameters=1, verbosity=None)

带有独立(Shapley 值)掩码的表格数据

[2]:
# build a Permutation explainer and explain the model predictions on the given dataset
explainer = shap.explainers.GPUTree(model, X)
shap_values = explainer(X)

# get just the explanations for the positive class
shap_values = shap_values

绘制全球概览

[3]:
shap.plots.bar(shap_values)
../../../_images/example_notebooks_api_examples_explainers_GPUTree_5_0.png

绘制单个实例

[4]:
shap.plots.waterfall(shap_values[0])
../../../_images/example_notebooks_api_examples_explainers_GPUTree_7_0.png

交互值

GPUTree 支持 Shapley Taylor 交互值(这是对 Tree explainer 原有所提供的改进)。

[5]:
explainer2 = shap.explainers.GPUTree(model, feature_perturbation="tree_path_dependent")
interaction_shap_values = explainer2(X[:100], interactions=True)
[6]:
shap.plots.scatter(interaction_shap_values[:, :, 0])
../../../_images/example_notebooks_api_examples_explainers_GPUTree_10_0.png

有更多有用示例的想法吗?我们鼓励提交增加此文档笔记本的拉取请求!