shap.ExactExplainer
- class shap.ExactExplainer(model: ~typing.Any, masker: ~typing.Any, link: ~typing.Any = CPUDispatcher(<function identity>), linearize_link: bool = True, feature_names: ~typing.Any = None)
通过优化的精确枚举计算 SHAP 值。
这对于具有少于约 15 个特征且每个样本与背景不同的模型的标准 Shapley 值遮罩器效果很好。当每个样本与背景不同的特征少于约 100 个时,它对于来自 hclusering 结构化遮罩器的 Owen 值也有效。此解释器通过对遮罩集进行排序以最小化顺序差异来最小化所需的函数评估次数。这对于标准 Shapley 值使用格雷码完成,对于 hclustering 结构化遮罩器使用贪婪排序方法完成。
- __init__(model: ~typing.Any, masker: ~typing.Any, link: ~typing.Any = CPUDispatcher(<function identity>), linearize_link: bool = True, feature_names: ~typing.Any = None) 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__(模型, 遮罩器[, 链接, ...])使用给定的遮罩器对象为给定模型构建一个 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(模型, 遮罩器)判断此解释器是否能处理给定的模型。
属性
modelmaskeroutput_namesfeature_nameslinklinearize_link- explain_row(*row_args: Any, max_evals: int | Literal['auto'], main_effects: bool, error_bounds: bool, batch_size: int | Literal['auto'], outputs: Any, interactions: bool | int, silent: bool) 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
将解释器写入给定的文件流。
- static supports_model_with_masker(model: Any, masker: Any) bool
判断此解释器是否能处理给定的模型。
这是一个抽象的静态方法,需要由每个子类实现。