shap.ExactExplainer

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

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

这对于标准Shapley值掩码器在每个样本中特征数量少于约15个且特征与背景不同的模型效果良好。对于每个样本中特征数量少于约100个且特征与背景不同的h聚类结构掩码器的Owen值,效果也很好。该解释器通过排序掩码集以最小化顺序差异来最小化所需的功能评估次数。对于标准Shapley值,这是通过使用格雷码完成的,而对于h聚类结构掩码器,则是通过贪心排序方法完成的。

__init__(model, masker, link=CPUDispatcher(<function identity>), linearize_link=True, feature_names=None)[源代码]

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

参数:
模型函数

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

掩码器函数 或 numpy.array 或 pandas.DataFrame

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

链接函数

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

linearize_link布尔

如果我们使用非线性链接函数来取期望值,那么对于单个背景样本而言,在该链接函数下是加性的模型在使用包含多个样本的背景掩码器时将不再具有加性。例如,这意味着线性逻辑回归模型将产生由期望平均值的非线性变化引起的交互效应。为了在仍然尊重链接函数的同时保留模型的加性,我们默认线性化链接函数。

方法

__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=<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')

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

static supports_model_with_masker(model, masker)

确定此解释器是否可以处理给定的模型。

这是一个抽象静态方法,旨在由每个子类实现。