shap.SamplingExplainer

class shap.SamplingExplainer(model: Any, data: ndarray[Any, dtype[Any]] | DataFrame, **kwargs: Any)

使用 Shapley 采样值解释方法(也称为 IME)的扩展来计算 SHAP 值。

SamplingExplainer 在特征独立性的假设下计算 SHAP 值,它是“使用博弈论对个体分类进行高效解释”中提出的算法的扩展,Erik Strumbelj, Igor Kononenko, JMLR 2010。当您想使用大型背景集时(例如,而不是单个参考值),它是 KernelExplainer 的一个很好的替代品。

参数:
model函数

用户提供的函数,该函数接收一个样本矩阵(# 样本数 x # 特征数)并为这些样本计算模型输出。输出可以是一个向量(# 样本数)或一个矩阵(# 样本数 x # 模型输出数)。

datanumpy.array 或 pandas.DataFrame

用于整合特征的背景数据集。为了确定特征的影响,将该特征设置为“缺失”并观察模型输出的变化。由于大多数模型在测试时并未设计用于处理任意缺失数据,因此我们通过将特征替换为背景数据集中取用的值来模拟“缺失”。因此,如果背景数据集是一个全零的简单样本,那么我们将通过将其设置为零来近似缺失特征。与 KernelExplainer 不同,该数据可以是整个训练集,即使它是一个大型集合。这是因为 SamplingExplainer 仅从该背景数据集进行采样。

__init__(model: Any, data: ndarray[Any, dtype[Any]] | DataFrame, **kwargs: Any) None

为传递的模型构建一个新的解释器。

参数:
model对象或函数

用户提供的函数或模型对象,它接受一个样本数据集并计算这些样本的模型输出。

masker函数、numpy.array、pandas.DataFrame、分词器、None 或针对每个模型输入的这些类型的列表

用于“掩盖”隐藏特征的函数,形式为 masked_args = masker(*model_args, mask=mask)。它接受与模型相同形式的输入,但只针对单个样本和二进制掩码,然后返回一个可迭代的掩盖样本。这些掩盖样本将使用模型函数进行评估,并对输出进行平均。作为 SHAP 标准掩盖方法的快捷方式,您可以传递一个背景数据矩阵而不是一个函数,该矩阵将用于掩盖。shap 中提供了特定领域的掩盖函数,例如用于图像的 shap.ImageMasker 和用于文本的 shap.TokenMasker。除了确定如何替换隐藏特征外,掩码器还可以约束用于解释模型的合作博弈规则。例如,shap.TabularMasker(data, hclustering=”correlation”) 将对博弈的联盟强制执行层次聚类(在这种特殊情况下,归因值被称为欧文值)。

link函数

用于在模型输出单元和 SHAP 值单元之间进行映射的链接函数。默认情况下,它是 shap.links.identity,但 shap.links.logit 也很有用,这样期望值可以在概率单位中计算,而解释则保留在(更自然的加性)对数几率单位中。有关链接函数工作原理的更多详细信息,请参阅任何关于广义线性模型链接函数的概述。

algorithm“auto”、“permutation”、“partition”、“tree”或“linear”

用于估计 Shapley 值的算法。有许多不同的算法可用于估计 Shapley 值(以及约束博弈的相关值),每种算法都有各种权衡,在不同情况下各有优劣。默认情况下,“auto”选项会尝试根据传递的模型和掩码器做出最佳选择,但始终可以通过传递特定算法的名称来覆盖此选择。所用算法的类型将决定此构造函数返回的子类对象的类型,如果您喜欢或需要更精细地控制其选项,也可以直接构建这些子类。

output_namesNone 或字符串列表

模型输出的名称。例如,如果模型是图像分类器,则 output_names 将是所有输出类别的名称。此参数是可选的。当 output_names 为 None 时,此解释器生成的 Explanation 对象将没有任何 output_names,这可能会影响下游的绘图。

seed: None 或 int

用于可复现性的种子

方法

__init__(模型, 数据, **kwargs)

为传递的模型构建一个新的解释器。

addsample(x, m, w)

分配()

explain(传入实例, **kwargs)

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

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

load(in_file[, 模型加载器, mask加载器, ...])

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

not_equal(i, j)

运行()

sampling_estimate(j, f, x, X[, nsamples])

save(out_file[, 模型保存器, mask保存器])

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

shap_values(X, **kwargs)

为一组样本估计 SHAP 值。

solve(fraction_evaluated, dim)

supports_model_with_masker(model, masker)

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

varying_groups(x)

属性

data_feature_names

link

keep_index

keep_index_ordered

model

数据

N

P

linkfv

nsamplesAdded

nsamplesRun

fnull

expected_value

vector_out

D

varyingInds

varyingFeatureGroups

M

fx

l1_reg

nsamples

max_samples

synth_data

maskMatrix

kernelWeights

y

ey

lastMask

synth_data_index

masker

output_names

feature_names

linearize_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: ndarray[Any, dtype[Any]] | DataFrame | Series | spmatrix, **kwargs: Any) ndarray[Any, dtype[Any]]

为一组样本估计 SHAP 值。

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

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

nsamples“auto” 或 int

解释每个预测时重新评估模型的次数。样本越多,SHAP 值的方差估计越低。“auto”设置使用 nsamples = 2 * X.shape[1] + 2048

l1_reg“num_features(int)”, “aic”, “bic” 或 float

用于特征选择的 l1 正则化。估计过程基于去偏 Lasso。

  • “num_features(int)”选择固定数量的顶部特征。

  • “aic”和“bic”选项使用 AIC 和 BIC 规则进行正则化。

  • 直接传递浮点数会设置用于特征选择的 sklearn.linear_model.Lasso 模型的“alpha”参数。

  • “auto”(已弃用):当枚举的可能样本空间少于 20% 时使用“aic”,否则不使用正则化。

0.47.0 版中已更改:默认值从 "auto" 更改为 "num_features(10)"

silent: bool

如果为 True,则隐藏 tqdm 进度条。默认为 False。

gc_collectbool

每次解释轮次后运行垃圾回收。有时对于内存密集型解释是必需的(默认为 False)。

返回:
np.array 或 list

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

每一行的总和等于该样本的模型输出与模型输出期望值(存储为解释器的 expected_value 属性)之间的差值。

返回值的类型和形状取决于模型输入和输出的数量

  • 单个输入,单个输出:形状为 (#num_samples, *X.shape[1:]) 的数组。

  • 单个输入,多个输出:形状为 (#num_samples, *X.shape[1:], #num_outputs) 的数组

  • 多个输入:上述相应形状的数组列表。

在 0.45.0 版本发生变更:对于具有多个输出和单个输入的模型,返回类型从 list 更改为 np.ndarray。

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

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

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