shap.LinearExplainer
- class shap.LinearExplainer(model: ~typing.Any, masker: ~typing.Any, link: ~collections.abc.Callable[[~typing.Any], ~typing.Any] = CPUDispatcher(<function identity>), nsamples: int = 1000, feature_perturbation: None | ~typing.Literal['interventional', 'correlation_dependent'] = None, **kwargs: ~typing.Any)
计算线性模型的 SHAP 值,可选地考虑特征间相关性。
此方法计算线性模型的 SHAP 值,并能考虑输入特征之间的相关性。假设特征是独立的,则导致干预性 SHAP 值,对于线性模型,第 i 个特征的 SHAP 值为
coef[i] * (x[i] - X.mean(0)[i])。如果考虑相关性,则可以避免共线性带来的问题,并在相关特征之间共享贡献。考虑相关性在计算上可能具有挑战性,但LinearExplainer使用采样来估计一个转换,该转换可以应用于解释模型的任何预测。- 参数:
- model(coef, intercept) or sklearn.linear_model.*
用户提供的线性模型,可以是参数对或 sklearn 对象。
- maskerfunction, numpy.array, pandas.DataFrame, tuple of (mean, cov), shap.maskers.Masker
一个可调用 Python 对象,用于“遮蔽”隐藏特征,形式为
masker(binary_mask, x)。它接受单个输入样本和二进制掩码,并返回一个掩码样本矩阵。这些掩码样本使用模型函数进行评估,然后对输出进行平均。作为 SHAP 标准掩码的快捷方式,您可以传入一个背景数据矩阵而不是函数,该矩阵将用于掩码。
您还可以提供一个
(mean, covariance)元组,或直接传入用于表格数据的掩码器(即maskers.Independent、maskers.Impute或maskers.Partition)。- data(mean, cov), numpy.array, pandas.DataFrame, iml.DenseData or scipy.csr_matrix
用于计算条件期望的背景数据集。请注意,只使用数据集的均值和协方差。这意味着传递原始数据矩阵只是直接传递均值和协方差的便捷替代方法。
- nsamplesint
估计用于考虑特征相关性的变换矩阵时使用的样本数量。
- feature_perturbationNone (默认), “interventional” 或 “correlation_dependent”
已弃用:此选项现已弃用,建议使用适当的表格掩码器,并将在未来版本中移除。
我们可能希望计算 SHAP 值的方式有两种,即完全条件 SHAP 值或干预性 SHAP 值。
对于干预性 SHAP 值,我们打破模型中特征之间的任何依赖结构,从而揭示如果我们干预并改变某些输入时模型的行为。此方法由 Independent 和 Partition 掩码器使用。
对于完全条件 SHAP 值,我们尊重输入特征之间的相关性,因此如果模型依赖于一个输入,但该输入与另一个输入相关,那么两者都对模型的行为做出一些贡献。此方法由 Impute 掩码器使用。
干预性选项“忠于模型”,这意味着它只会将贡献归因于模型实际使用的特征,而相关性选项则“忠于数据”,因为它只考虑模型在尊重输入数据相关性时的行为。对于稀疏情况,只支持干预性选项。
示例
参见 线性解释器示例
- __init__(model: ~typing.Any, masker: ~typing.Any, link: ~collections.abc.Callable[[~typing.Any], ~typing.Any] = CPUDispatcher(<function identity>), nsamples: int = 1000, feature_perturbation: None | ~typing.Literal['interventional', 'correlation_dependent'] = None, **kwargs: ~typing.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__(model, masker[, link, nsamples, ...])为传递的模型构建一个新的解释器。
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])将解释器写入给定的文件流。
shap_values(X)为一组样本估计 SHAP 值。
supports_model_with_masker(model, masker)确定我们是否可以解析给定的模型。
属性
feature_perturbationnsamplescoefinterceptmeancovexpected_valueMvalid_indsavg_projmean_transformedx_transformmodelmaskeroutput_namesfeature_nameslinklinearize_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)。
- 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[floating[Any]]] | DataFrame | Series) ndarray[Any, dtype[floating[Any]]]
为一组样本估计 SHAP 值。
- 参数:
- Xnumpy.array, pandas.DataFrame 或 scipy.csr_matrix
一个样本矩阵(# 样本数 x # 特征数),用于解释模型的输出。
- 返回:
- np.array
估计的 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
确定我们是否可以解析给定的模型。