shap.GradientExplainer
- class shap.GradientExplainer(model, data, session=None, batch_size=50, local_smoothing=0)[源代码]
使用预期梯度(集成梯度的一种扩展)解释模型。
预期梯度是综合梯度方法(Sundararajan 等人,2017)的扩展,这是一种为基于将Shapley值扩展到无限玩家游戏(Aumann-Shapley值)的可微分模型设计的特征归因方法。综合梯度值与SHAP值略有不同,并且需要一个单一的参考值来进行积分。为了使它们近似于SHAP值,预期梯度将积分重新表述为期望,并将该期望与从背景数据集中采样的参考值相结合。这导致了一个单一的梯度期望组合,该组合收敛到总和为预期模型输出与当前输出之间差异的归因。
示例
参见 梯度解释器示例
- __init__(model, data, session=None, batch_size=50, local_smoothing=0)[源代码]
使用给定背景数据集的可微分模型的解释器对象。
- 参数:
- 模型tf.keras.Model, (输入)[tf.Tensor], 输出tf.Tensor), torch.nn.Module, 或一个元组
(模型, 层), 其中两者都是 torch.nn.Module 对象
对于 TensorFlow,这可以是一个模型对象,或者是一对 TensorFlow 张量(或一个列表和一个张量),用于指定要解释的模型的输入和输出。请注意,对于 TensowFlow 2,您必须传递一个 tensorflow 函数,而不是输入/输出张量的元组。
对于 PyTorch,这可以是一个 nn.Module 对象(模型),或者是一个元组(模型,层),其中两者都是 nn.Module 对象。模型是一个 nn.Module 对象,它以形状为数据的张量(或张量列表)作为输入,并返回一个单维输出。如果输入是一个元组,返回的形状值将是层参数输入的形状。层必须是模型中的一个层,例如 model.conv2。
- 数据[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)。
这是一个抽象方法,旨在由每个子类实现。
- 返回:
- 元组
一个元组 (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)
从给定的文件流中加载一个解释器。
- 参数:
- 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列表,
如果框架是 ‘tensorflow’:np.array,或者如果是 ‘pytorch’:torch.tensor。一个张量(或张量列表)的样本(其中 X.shape[0] == 样本数),用于解释模型的输出。
- ranked_outputs无或整数
如果 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” 包含一个输出节点的列表。
- rseed无或整数
在shap值计算中播种随机性(背景示例选择,当前示例与背景示例之间的插值,平滑处理)。
- 返回:
- np.array 或 list
估计的 SHAP 值,通常形状为
(# 样本 x # 特征)
。返回数组的形状取决于模型输出的数量:
一个输入,一个输出:形状为
(#num_样本, *X.shape[1:])
的数组。一个输入,多个输出:形状为
(#样本数量, *X.shape[1:], #输出数量)
的数组多个输入:具有相应形状的数组列表。
如果 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)
确定此解释器是否可以处理给定的模型。
这是一个抽象静态方法,旨在由每个子类实现。