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 explainer。
- 参数:
- 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
的结果。
目前,仅当
feature_perturbation="interventional"
时,才支持 “probability” 和 “log_loss” 选项。- 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 explainer。
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, ...])从给定的文件流加载 Explainer。
save
(out_file[, model_saver, masker_saver])将 explainer 写入给定的文件流。
shap_interaction_values
(X[, y, tree_limit])估计一组样本的 SHAP 交互值。
shap_values
(X[, y, tree_limit, approximate, ...])估计一组样本的 SHAP 值。
supports_model_with_masker
(model, masker)确定此 explainer 是否可以处理给定的模型。
- explain_row(*row_args, max_evals, main_effects, error_bounds, outputs, silent, **kwargs)
解释单行并返回元组 (row_values, row_expected_values, row_mask_shapes, main_effects)。
这是一个抽象方法,旨在由每个子类实现。
- 返回:
- 元组
元组 (row_values, row_expected_values, row_mask_shapes),其中 row_values 是每个样本的归因值数组,row_expected_values 是表示每个样本模型预期值的数组(或单个值)(除非存在固定输入,否则所有样本都相同,例如解释损失时的标签),row_mask_shapes 是所有输入形状的列表(因为 row_values 始终是扁平化的),
- classmethod load(in_file, model_loader=<bound method Model.load of <class 'shap.models._model.Model'>>, masker_loader=<bound method Serializable.load of <class 'shap.maskers._masker.Masker'>>, instantiate=True)
从给定的文件流加载 Explainer。
- 参数:
- in_file从中加载对象的文件流。
- save(out_file, model_saver='.save', masker_saver='.save')
将 explainer 写入给定的文件流。
- 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 # 特征)总和为该样本的模型输出与模型输出的期望值(存储在 explainer 的 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 # 特征)。每一行总和为该样本的模型输出与模型输出的期望值(当期望值恒定时,存储在 explainer 的 expected_value 属性中)之间的差异。对于具有向量输出的模型,这将返回此类矩阵的列表,每个输出一个。
- static supports_model_with_masker(model, masker)
确定此 explainer 是否可以处理给定的模型。
这是一个抽象静态方法,旨在由每个子类实现。