shap.GradientExplainer
- class shap.GradientExplainer(model: Any, data: ndarray[Any, dtype[Any]] | DataFrame | list[Any], session: Any = None, batch_size: int = 50, local_smoothing: float = 0)
使用预期梯度(集成梯度的扩展)解释模型。
预期梯度是集成梯度方法 (Sundararajan et al. 2017) 的扩展,这是一种基于 Shapley 值对无限玩家博弈(Aumann-Shapley 值)的扩展而设计的、用于可微分模型的特征归因方法。集成梯度值与 SHAP 值略有不同,需要一个单一的参考值进行积分。为了使其近似 SHAP 值,预期梯度将积分重新表述为期望,并将该期望与从背景数据集中采样参考值相结合。这导致了一个单一的梯度期望组合,该期望收敛到归因,这些归因之和等于预期模型输出与当前输出之间的差值。
示例
参见 梯度解释器示例
- __init__(model: Any, data: ndarray[Any, dtype[Any]] | DataFrame | list[Any], session: Any = None, batch_size: int = 50, local_smoothing: float = 0) None
一个用于可微分模型的解释器对象,使用给定的背景数据集。
- 参数:
- modeltf.keras.Model, (input[tf.Tensor], outputtf.Tensor), torch.nn.Module, 或一个元组
(model, layer),两者都是 torch.nn.Module 对象
对于 TensorFlow,这可以是一个模型对象,或一对 TensorFlow 张量(或一个列表和一个张量),它们指定要解释的模型的输入和输出。请注意,对于 TensorFlow 2,您必须传递一个 TensorFlow 函数,而不是输入/输出张量的元组。
对于 PyTorch,这可以是一个 nn.Module 对象(模型),或一个元组(模型,层),两者都是 nn.Module 对象。模型是一个 nn.Module 对象,它接受形状为数据的张量(或张量列表)作为输入,并返回一个一维输出。如果输入是一个元组,则返回的 shap 值将用于层参数的输入。层必须是模型中的一个层,即 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)判断此解释器是否能处理给定的模型。
属性
特征解释器modelmaskeroutput_namesfeature_nameslinklinearize_link- explain_row(*row_args: Any, max_evals: int | Literal['auto'], main_effects: bool, error_bounds: bool, outputs: Any, silent: bool, **kwargs: Any) dict[str, Any]
解释单行数据并返回元组 (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: Any, model_loader: Callable[..., Any] | None = None, masker_loader: Callable[..., Any] | None = None, instantiate: bool = True) Explainer | dict[str, Any]
从给定的文件流加载一个解释器。
- 参数:
- in_file用于加载对象的文件流。
- save(out_file: Any, model_saver: str | Callable[..., Any] = '.save', masker_saver: str | Callable[..., Any] = '.save') None
将解释器写入给定的文件流。
- shap_values(X: Any, nsamples: int = 200, ranked_outputs: int | list[int] | None = None, output_rank_order: Literal['max', 'min', 'max_abs', 'custom'] = 'max', rseed: int | None = None, return_variances: bool = False) ndarray[Any, dtype[Any]] | list[ndarray[Any, dtype[Any]]] | tuple[Any, ...]
返回应用于 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: Any, masker: Any) bool
判断此解释器是否能处理给定的模型。
这是一个抽象的静态方法,需要由每个子类实现。