shap.LinearExplainer
- class shap.LinearExplainer(model, masker, link=CPUDispatcher(<function identity>), nsamples=1000, feature_perturbation=None, **kwargs)[源代码]
计算线性模型的SHAP值,可选择考虑特征间的相关性。
这计算了线性模型的SHAP值,并可以考虑输入特征之间的相关性。假设特征是独立的会导致干预性SHAP值,对于线性模型来说,第i个特征的SHAP值为
coef[i] * (x[i] - X.mean(0)[i])
。如果我们考虑相关性,那么我们可以防止由于共线性引起的问题,并在相关特征之间共享信用。考虑相关性在计算上可能具有挑战性,但LinearExplainer
使用采样来估计一个变换,然后可以应用于解释模型的任何预测。- 参数:
- 模型(系数, 截距) 或 sklearn.linear_model.*
用户提供的线性模型,可以是参数对或sklearn对象。
- 掩码器函数, numpy.数组, pandas.数据框, (均值, 协方差) 的元组, shap.掩码器.掩码器
一个可调用的Python对象,用于“掩盖”表单
masker(binary_mask, x)
中的隐藏特征。它接受一个输入样本和一个二进制掩码,并返回一个掩码样本矩阵。这些掩码样本使用模型函数进行评估,然后对输出进行平均。作为使用SHAP进行标准掩码的快捷方式,您可以传递一个背景数据矩阵而不是函数,该矩阵将用于掩码。
你也可以提供一个
(均值, 协方差)
的元组,或者直接传入一个用于表格数据的掩码器(即maskers.Independent
、maskers.Impute
或maskers.Partition
)。- 数据(均值, 协方差), numpy.array, pandas.DataFrame, iml.DenseData 或 scipy.csr_matrix
用于计算条件期望的背景数据集。请注意,仅使用数据集的均值和协方差。这意味着传递原始数据矩阵只是传递均值和协方差的一种便捷替代方法。
- nsamples整数
在估计用于考虑特征相关性的变换矩阵时使用的样本数量。
- feature_perturbation“interventional”(默认)或“correlation_dependent”
我们可能有两种方式来计算SHAP值,即完全条件SHAP值或干预SHAP值。
对于干预性 SHAP 值,我们打破了模型中特征之间的任何依赖结构,从而揭示了如果我们干预并改变一些输入,模型将如何表现。对于完全条件性 SHAP 值,我们尊重输入特征之间的相关性,因此如果模型依赖于一个输入,但该输入与另一个输入相关,那么两者都会因模型的行为而获得一些信用。干预性选项保持“忠于模型”,意味着它只会将信用归于模型实际使用的特征,而相关性选项保持“忠于数据”,因为它只考虑在尊重输入数据中的相关性时模型将如何表现。对于稀疏情况,仅支持干预性选项。
请注意,
feature_perturbation
选项已被弃用,并将在未来的版本中移除。建议使用适当的表格masker
代替。
示例
参见 线性解释器示例
- __init__(model, masker, link=CPUDispatcher(<function identity>), nsamples=1000, feature_perturbation=None, **kwargs)[源代码]
为传递的模型构建一个新的解释器。
- 参数:
- 模型对象或函数
用户提供的函数或模型对象,该对象接受样本数据集并计算模型对这些样本的输出。
- 掩码器函数, numpy.array, pandas.DataFrame, 分词器, None, 或每个模型输入的这些列表
用于“掩码”表单中隐藏特征的函数 masked_args = masker(*model_args, mask=mask)。它以与模型相同的格式接收输入,但对于仅包含二进制掩码的单个样本,然后返回掩码样本的可迭代对象。这些掩码样本随后将使用模型函数进行评估,并平均输出。作为SHAP标准掩码使用的快捷方式,您可以传递一个背景数据矩阵而不是函数,该矩阵将用于掩码。特定领域的掩码函数在shap中可用,例如用于图像的shap.ImageMasker和用于文本的shap.TokenMasker。除了确定如何替换隐藏特征外,掩码器还可以约束用于解释模型的合作游戏的规则。例如,shap.TabularMasker(data, hclustering=”correlation”) 将强制游戏的联盟进行层次聚类(在这种情况下,归因被称为Owen值)。
- 链接函数
链接函数用于在模型的输出单元和SHAP值单元之间进行映射。默认情况下,它是shap.links.identity,但shap.links.logit可能很有用,这样期望值以概率单位计算,而解释则保持在(更自然地可加的)对数几率单位。有关链接函数如何工作的更多详细信息,请参阅广义线性模型的链接函数概述。
- 算法“auto”, “permutation”, “partition”, “tree”, 或 “linear”
用于估计Shapley值的算法。有许多不同的算法可以用来估计Shapley值(以及受限游戏的相应值),每种算法都有不同的权衡,并且在不同情况下更可取。默认情况下,“auto”选项会根据传入的模型和掩码器尝试做出最佳选择,但这个选择总是可以通过传递特定算法的名称来覆盖。所使用的算法类型将决定此构造函数返回的子类对象类型,如果您更喜欢或需要对其选项进行更精细的控制,您也可以直接构建这些子类。
- 输出名称无或字符串列表
模型输出的名称。例如,如果模型是一个图像分类器,那么 output_names 将是所有输出类的名称。此参数是可选的。当 output_names 为 None 时,此解释器生成的 Explanation 对象将没有任何 output_names,这可能会影响下游图表。
- 种子: 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)确定我们是否可以解析给定的模型。
- explain_row(*row_args, max_evals, main_effects, error_bounds, batch_size, outputs, 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')
将解释器写入给定的文件流。
- shap_values(X)[源代码]
估计一组样本的SHAP值。
- 参数:
- Xnumpy.array, pandas.DataFrame 或 scipy.csr_matrix
一个样本矩阵(样本数量 x 特征数量),用于解释模型的输出。
- 返回:
- np.array
估计的 SHAP 值,通常形状为
(# 样本 x # 特征)
。每一行的总和等于该样本的模型输出与模型输出的期望值之间的差异(该期望值存储为解释器的
expected_value
属性)。返回数组的形状取决于模型输出的数量:
一个输出:形状为
(#样本数量, *X.shape[1:])
的数组。多个输出:形状为
(#样本数量, *X.shape[1:], #输出数量)
的数组。
在 0.45.0 版本发生变更: 具有多个输出的模型的返回类型已从列表更改为 np.ndarray。