shap.GPUTreeExplainer
- class shap.GPUTreeExplainer(model, data=None, model_output='raw', feature_perturbation='auto', feature_names=None, approximate=<object object>, link=None, linearize_link=None)
- TreeExplainer 的实验性 GPU 加速版本。目前需要从源码构建,且 CUDA 可用并定义了 ‘CUDA_PATH’ 环境变量。 - 示例 - __init__(model, data=None, model_output='raw', feature_perturbation='auto', feature_names=None, approximate=<object object>, link=None, linearize_link=None)
- 为传入的模型构建一个新的 Tree 解释器。 - 参数:
- model模型对象
- 我们想要解释的基于树的机器学习模型。支持 XGBoost、LightGBM、CatBoost、Pyspark 和大多数基于树的 scikit-learn 模型。 
- datanumpy.array 或 pandas.DataFrame
- 用于积分消除特征的背景数据集。 - 当 - feature_perturbation="tree_path_dependent"时,此参数是可选的,因为在这种情况下,我们可以使用沿每条树路径的训练样本数量作为我们的背景数据集(这记录在- model对象中)。
- feature_perturbation“auto”(默认)、“interventional” 或 “tree_path_dependent”
- 由于 SHAP 值依赖于条件期望,我们需要决定如何处理相关(或其他依赖)的输入特征。 - 如果为 - "interventional",则需要一个背景数据集- data。特征之间的依赖关系根据因果推断的规则进行处理 [1]。运行时间与您使用的背景数据集的大小成线性关系:使用 100 到 1000 个随机背景样本是比较合适的规模。
- 如果为 - "tree_path_dependent",则不需要背景数据集,该方法仅遵循树的路径,并使用进入每个叶节点的训练样本数量来表示背景分布。
- 如果为 - "auto",当提供了背景数据集时,将使用“interventional”方法,否则将使用“tree_path_dependent”方法。
 - 0.47 版本新增: 添加了 “auto” 选项。 - 0.47 版本变更: 默认行为将在 0.47 版本中从 “interventional” 更改为 “auto”。将来,在不提供背景数据集的情况下传递 feature_pertubation=”interventional” 将会引发错误。 
- model_output“raw”、“probability”、“log_loss”或模型方法名称
- 应该解释模型的哪个输出。 - 如果为 “raw”,那么我们解释树的原始输出,这因模型而异。对于回归模型,“raw” 是标准输出。对于 XGBoost 中的二元分类,这是对数几率比。 
- 如果为 “probability”,那么我们解释转换到概率空间的模型输出(请注意,这意味着 SHAP 值的总和现在等于模型的概率输出)。 
- 如果为 “log_loss”,那么我们解释模型损失函数的自然对数,这样 SHAP 值的总和就等于每个样本的模型的对数损失。这有助于按特征分解模型性能。 
- 如果 - model_output是- model对象上支持的预测方法的名称,那么我们解释该模型方法名称的输出。例如,- model_output="predict_proba"解释调用- model.predict_proba的结果。
 - 目前,“probability” 和 “log_loss” 选项仅在 - feature_perturbation="interventional"时支持。
- approximatebool
- 已弃用,将在 v0.47.0 版本中弃用,并在 v0.49.0 版本中移除。请改用 - shap_values()或- __call__方法中的- approximate参数。
 
 - 参考文献 [1]- Janzing, Dominik, Lenon Minorics, and Patrick Blöbaum. “Feature relevance quantification in explainable AI: A causal problem.” International Conference on artificial intelligence and statistics. PMLR, 2020. 
 - 方法 - __init__(model[, data, model_output, ...])- 为传入的模型构建一个新的 Tree 解释器。 - assert_additivity(phi, model_output)- explain_row(*row_args, max_evals, ...)- 解释单行数据并返回元组 (row_values, row_expected_values, row_mask_shapes, main_effects)。 - load(in_file[, model_loader, masker_loader, ...])- 从给定的文件流加载一个解释器。 - save(out_file[, model_saver, masker_saver])- 将解释器写入给定的文件流。 - shap_interaction_values(X[, y, tree_limit])- 估算一组样本的 SHAP 交互值。 - shap_values(X[, y, tree_limit, approximate, ...])- 为一组样本估计 SHAP 值。 - supports_model_with_masker(model, masker)- 判断此解释器是否能处理给定的模型。 - explain_row(*row_args, max_evals, main_effects, error_bounds, outputs, silent, **kwargs)
- 解释单行数据并返回元组 (row_values, row_expected_values, row_mask_shapes, main_effects)。 - 这是一个抽象方法,需要由每个子类实现。 - 返回:
- tuple
- 一个元组 (row_values, row_expected_values, row_mask_shapes),其中 row_values 是每个样本的归因值数组,row_expected_values 是表示每个样本的模型期望值的数组(或单个值)(除非存在固定的输入,例如解释损失时的标签,否则所有样本的期望值都相同),而 row_mask_shapes 是所有输入形状的列表(因为 row_values 总是被展平的)。 
 
 
 - classmethod load(in_file, model_loader=None, masker_loader=None, instantiate=True)
- 从给定的文件流加载一个解释器。 - 参数:
- in_file用于加载对象的文件流。
 
 
 - save(out_file, model_saver='.save', masker_saver='.save')
- 将解释器写入给定的文件流。 
 - shap_interaction_values(X, y=None, tree_limit=None)
- 估算一组样本的 SHAP 交互值。 - 参数:
- Xnumpy.array、pandas.DataFrame 或 catboost.Pool(用于 catboost)
- 一个样本矩阵(# 样本数 x # 特征数),用于解释模型的输出。 
- ynumpy.array
- 一个包含每个样本标签值的数组。在解释损失函数时使用(尚不支持)。 
- tree_limitNone(默认)或 int
- 限制模型使用的树的数量。默认情况下,None 表示使用原始模型的限制,-1 表示没有限制。 
 
- 返回:
- 数组或列表
- 对于具有单个输出的模型,这会返回一个 SHAP 值的张量(# 样本数 x # 特征数 x # 特征数)。每个样本的矩阵(# 特征数 x # 特征数)的总和等于该样本的模型输出与模型输出期望值(存储在解释器的 expected_value 属性中)之间的差值。该矩阵的每一行之和等于该样本该特征的 SHAP 值。矩阵的对角线项表示该特征对预测的“主效应”,对称的非对角线项表示该样本所有特征对之间的交互效应。对于具有向量输出的模型,这会返回一个张量列表,每个输出对应一个张量。 
 
 
 - shap_values(X, y=None, tree_limit=None, approximate=False, check_additivity=True, from_call=False)
- 为一组样本估计 SHAP 值。 - 参数:
- Xnumpy.array、pandas.DataFrame 或 catboost.Pool(用于 catboost)
- 一个样本矩阵(# 样本数 x # 特征数),用于解释模型的输出。 
- ynumpy.array
- 一个包含每个样本标签值的数组。在解释损失函数时使用。 
- tree_limitNone(默认)或 int
- 限制模型使用的树的数量。默认情况下,None 表示使用原始模型的限制,-1 表示没有限制。 
- approximatebool
- 不支持。 
- check_additivitybool
- 运行一个验证检查,确保 SHAP 值的总和等于模型的输出。这个检查只花费少量时间,并且会捕获潜在的未预见错误。请注意,此检查目前仅在解释模型的边际输出时运行。 
 
- 返回:
- 数组或列表
- 对于具有单个输出的模型,这会返回一个 SHAP 值的矩阵(# 样本数 x # 特征数)。每一行的总和等于该样本的模型输出与模型输出期望值(当其为常数时,存储在解释器的 expected_value 属性中)之间的差值。对于具有向量输出的模型,这会返回一个此类矩阵的列表,每个输出对应一个。 
 
 
 - static supports_model_with_masker(model, masker)
- 判断此解释器是否能处理给定的模型。 - 这是一个抽象的静态方法,需要由每个子类实现。