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)
- 判断此解释器是否能处理给定的模型。 - 这是一个抽象的静态方法,需要由每个子类实现。