shap.ExactExplainer

class shap.ExactExplainer(model, masker, link=CPUDispatcher(<function identity>), linearize_link=True, feature_names=None)

通过优化的精确枚举计算 SHAP 值。

对于每个样本中与背景不同的特征少于约 15 个的模型,此方法对标准的 Shapley 值掩码器(masker)效果很好。对于来自 hclustering 结构化掩码器的 Owen 值,当每个样本中与背景不同的特征少于约 100 个时,此方法也效果很好。该解释器通过对掩码集进行排序以最小化序列差异,从而减少所需的函数评估次数。对于标准的 Shapley 值,这是通过格雷码(gray code)实现的;对于 hclustering 结构化掩码器,则是通过贪婪排序方法实现的。

__init__(model, masker, link=CPUDispatcher(<function identity>), linearize_link=True, feature_names=None)

为给定的模型和掩码器对象构建一个 explainers.Exact 对象。

参数:
model函数

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

masker函数或 numpy.array 或 pandas.DataFrame

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

link函数

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

linearize_linkbool

如果我们使用非线性链接函数来计算期望,那么对于单个背景样本在该链接函数下是加性的模型,在使用包含多个样本的背景掩码器时将不再是加性的。例如,这意味着线性逻辑回归模型会因为期望平均过程中的非线性变化而产生交互效应。为了在尊重链接函数的同时保留模型的加性,我们默认对链接函数进行线性化处理。

方法

__init__(model, masker[, link, ...])

为给定的模型和掩码器对象构建一个 explainers.Exact 对象。

explain_row(*row_args, max_evals, ...)

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

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

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

save(out_file[, model_saver, masker_saver])

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

supports_model_with_masker(model, masker)

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

explain_row(*row_args, max_evals, main_effects, error_bounds, batch_size, outputs, interactions, silent)

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

classmethod load(in_file, model_loader=None, masker_loader=None, instantiate=True)

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

参数:
in_file用于加载对象的文件流。
save(out_file, model_saver='.save', masker_saver='.save')

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

static supports_model_with_masker(model, masker)

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

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