shap.GradientExplainer

class shap.GradientExplainer(model, data, session=None, batch_size=50, local_smoothing=0)

使用期望梯度(积分梯度的扩展)解释模型。

期望梯度是积分梯度方法(Sundararajan 等人,2017)的扩展,一种特征归因方法,专为基于 Shapley 值扩展到无限玩家博弈(Aumann-Shapley 值)的可微分模型而设计。积分梯度值与 SHAP 值略有不同,并且需要单个参考值来进行积分。为了使它们近似于 SHAP 值,期望梯度将积分重新表述为期望,并将该期望与从背景数据集中采样的参考值相结合。这导致梯度的单个组合期望收敛到归因,这些归因的总和等于预期模型输出与当前输出之间的差异。

示例

请参阅 Gradient Explainer 示例

__init__(model, data, session=None, batch_size=50, local_smoothing=0)

用于可微分模型的解释器对象,使用给定的背景数据集。

参数:
modeltf.keras.Model, (input[tf.Tensor], outputtf.Tensor), torch.nn.Module, 或一个元组

(model, layer),其中两者都是 torch.nn.Module 对象

对于 TensorFlow,这可以是模型对象,或一对 TensorFlow 张量(或列表和一个张量),用于指定要解释的模型的输入和输出。请注意,对于 TensorFlow 2,您必须传递 tensorflow 函数,而不是输入/输出张量的元组)。

对于 PyTorch,这可以是 nn.Module 对象 (model),或一个元组 (model, layer),其中两者都是 nn.Module 对象。模型是一个 nn.Module 对象,它将形状为 data 的张量(或张量列表)作为输入,并返回单维输出。如果输入是一个元组,则返回的 shap 值将用于 layer 参数的输入。layer 必须是模型中的一个层,例如 model.conv2。

data[np.array] 或 [pandas.DataFrame] 或 [torch.tensor]

用于积分消除特征的背景数据集。Gradient explainer 对这些样本进行积分。此处传递的数据必须与第一个参数中给出的输入张量匹配。可以传递解包的单元素列表。

方法

__init__(model, data[, session, batch_size, ...])

用于可微分模型的解释器对象,使用给定的背景数据集。

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_values(X[, nsamples, ranked_outputs, ...])

返回应用于 X 的模型的值。

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_values(X, nsamples=200, ranked_outputs=None, output_rank_order='max', rseed=None, return_variances=False)

返回应用于 X 的模型的值。

参数:
X列表,

如果 framework == ‘tensorflow’:np.array 或 pandas.DataFrame 如果 framework == ‘pytorch’:torch.tensor 一个样本张量(或张量列表)(其中 X.shape[0] == # 样本),用于解释模型的输出。

ranked_outputsNone 或 int

如果 ranked_outputs 为 None,则我们解释多输出模型中的所有输出。如果 ranked_outputs 是一个正整数,那么我们只解释那么多顶部模型输出(其中“顶部”由 output_rank_order 确定)。请注意,这会导致返回一对值 (shap_values, indexes),其中 shap_values 是每个输出等级的 numpy 数组列表,而 indexes 是一个矩阵,用于告知每个样本选择哪些输出索引作为“顶部”。

output_rank_order“max”、“min”、“max_abs”或“custom”

当使用 ranked_outputs 时,如何对模型输出进行排序,可以通过最大值、最小值或最大绝对值。如果为“custom”,则“ranked_outputs”包含输出节点列表。

rseedNone 或 int

为 shap 值计算中的随机性设定种子(背景示例选择、当前示例和背景示例之间的插值、平滑)。

返回值:
np.array 或列表

估计的 SHAP 值,通常形状为 (# samples x # features)

返回数组的形状取决于模型输出的数量

  • 单输入,单输出:形状为 (#num_samples, *X.shape[1:]) 的数组。

  • 单输入,多输出:形状为 (#num_samples, *X.shape[1:], #num_outputs) 的数组

  • 多输入:具有上述相应形状的数组列表。

如果 ranked_outputs 为 None,则此张量列表与模型输出的数量匹配。如果 ranked_outputs 是一个正整数,则返回一对 (shap_values, indexes),其中 shap_values 是长度为 ranked_outputs 的张量列表,而 indexes 是一个矩阵,用于告知每个样本选择哪些输出索引作为“顶部”。

在 0.45.0 版本中更改:具有多个输出和一个输入的模型的返回类型已从列表更改为 np.ndarray。

static supports_model_with_masker(model, masker)

确定此 explainer 是否可以处理给定的模型。

这是一个抽象静态方法,旨在由每个子类实现。