shap.PermutationExplainer

class shap.PermutationExplainer(model: ~typing.Any, masker: ~typing.Any, link: ~typing.Any = CPUDispatcher(<function identity>), feature_names: list[str] | None = None, linearize_link: bool = True, seed: int | None = None, **call_args: ~typing.Any)

此方法通过迭代输入排列来近似 Shapley 值。

这是一种模型无关的解释器,通过在正向和反向(对偶抽样)完全迭代特征的整个排列来保证局部准确性(可加性)。如果我们这样做一次,那么我们将获得具有高达二阶交互效应的模型的精确 SHAP 值。我们可以多次迭代许多随机排列,以获得具有高阶交互效应的模型的更好 SHAP 值估计。这种顺序排序公式还允许轻松重用模型评估,并能够高效地避免在特征的背景值与当前输入值相同时评估模型。我们还可以考虑具有分区树的层次数据结构,这是 KernalExplainer 或 SamplingExplainer 目前尚未实现的功能。

__init__(model: ~typing.Any, masker: ~typing.Any, link: ~typing.Any = CPUDispatcher(<function identity>), feature_names: list[str] | None = None, linearize_link: bool = True, seed: int | None = None, **call_args: ~typing.Any) None

使用给定的 masker 对象为给定模型构建一个 explainers.Permutation 对象。

参数:
model函数

一个可调用的 Python 对象,它接收一组输入数据样本并执行模型。

masker函数或 numpy.array 或 pandas.DataFrame

一个可调用的 Python 对象,用于“遮蔽”隐藏特征,形式为 masker(binary_mask, x)。它接受一个单一的输入样本和一个二进制掩码,并返回一个被遮蔽样本的矩阵。这些被遮蔽样本使用模型函数进行评估,然后将输出进行平均。作为 SHAP 使用的标准遮蔽的快捷方式,您可以传递一个背景数据矩阵而不是一个函数,该矩阵将用于遮蔽。要使用聚类博弈结构,您可以传递一个 shap.maskers.Tabular(data, clustering="correlation") 对象。

seed: None 或 int

用于复现性的种子

**call_args__call__ 方法的有效参数

这些参数被保存并传递给 __call__ 方法作为这些参数的新默认值。

方法

__init__(模型, 遮罩器[, 链接, ...])

使用给定的 masker 对象为给定模型构建一个 explainers.Permutation 对象。

explain_row(*行参数, max_evals, ...)

解释单行并返回元组 (row_values, row_expected_values, row_mask_shapes)。

load(in_file[, model_loader, masker_loader, ...])

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

save(out_file[, model_saver, masker_saver])

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

shap_values(X[, npermutations, ...])

用于估计一组样本的 SHAP 值的旧接口。

supports_model_with_masker(模型, 遮罩器)

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

属性

model

masker

output_names

feature_names

link

linearize_link

explain_row(*row_args: Any, max_evals: int | Literal['auto'], main_effects: bool, error_bounds: bool, batch_size: int | Literal['auto'], outputs: Any, silent: bool, **kwargs: Any) dict[str, Any]

解释单行并返回元组 (row_values, row_expected_values, row_mask_shapes)。

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, npermutations: int = 10, main_effects: bool = False, error_bounds: bool = False, batch_evals: bool = True, silent: bool = False) Any

用于估计一组样本的 SHAP 值的旧接口。

参数:
Xnumpy.array 或 pandas.DataFrame 或任何 scipy.sparse 矩阵

一个样本矩阵(# 样本数 x # 特征数),用于解释模型的输出。

npermutationsint

循环遍历所有特征的次数,并在每一步重新评估模型。每个循环在包含 (# 背景数据样本) 行的数据矩阵上评估模型函数 2 * (特征数 + 1) 次。唯一的例外是当 PermutationExplainer 可以避免评估模型,因为特征的值在 X 和背景数据集中是相同的(例如,对于稀疏特征,这很常见)。

返回:
数组或列表

对于单输出模型,这会返回一个 SHAP 值矩阵(# 样本 x # 特征)。每行 SHAP 值之和等于该样本的模型输出与模型输出预期值(存储为解释器的 expected_value 属性)之间的差值。对于向量输出模型,这会返回一个此类矩阵的列表,每个输出一个。

static supports_model_with_masker(model: Any, masker: Any) bool

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

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