shap.GradientExplainer

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

使用期望梯度(集成梯度的扩展)来解释模型。

期望梯度是集成梯度方法(Sundararajan et al. 2017)的扩展,这是一种为可微模型设计的特征归因方法,基于沙普利值在无限参与者博弈(Aumann-Shapley 值)中的扩展。集成梯度值与 SHAP 值略有不同,需要一个单一的参考值进行积分。为了使其近似于 SHAP 值,期望梯度将积分重新表述为期望,并将该期望与从背景数据集中采样参考值相结合。这产生了一个单一的组合梯度期望,其收敛的归因值总和等于模型的期望输出与当前输出之间的差值。

示例

请参阅梯度解释器示例

__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, layer),其中两者都是 nn.Module 对象。模型是一个 nn.Module 对象,它接受一个形状为 `data` 的张量(或张量列表)作为输入,并返回一个一维输出。如果输入是一个元组,返回的 shap 值将是针对 `layer` 参数的输入。`layer` 必须是模型中的一个层,例如 `model.conv2`。

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

用于积分消除特征的背景数据集。梯度解释器在这些样本上进行积分。这里传递的数据必须与第一个参数中给出的输入张量相匹配。只包含单个元素的列表可以不加包装直接传递。

方法

__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, ...])

从给定的文件流加载一个解释器。

save(out_file[, model_saver, masker_saver])

将解释器写入给定的文件流。

shap_values(X[, nsamples, ranked_outputs, ...])

返回模型应用于 X 的值。

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_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 或 list

估计的 SHAP 值,通常形状为 (# 样本数 x # 特征数)

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

  • 单个输入,单个输出:形状为 (#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 版本发生变更:对于具有多个输出和单个输入的模型,返回类型从 list 更改为 np.ndarray。

static supports_model_with_masker(model, masker)

判断此解释器是否能处理给定的模型。

这是一个抽象的静态方法,需要由每个子类实现。