shap.KernelExplainer
- class shap.KernelExplainer(model, data, feature_names=None, link='identity', **kwargs)
- 使用 Kernel SHAP 方法来解释任何函数的输出。 - Kernel SHAP 是一种使用特殊的加权线性回归来计算每个特征重要性的方法。计算出的重要性值是博弈论中的 Shapley 值,也是局部线性回归的系数。 - 参数:
- modelfunction 或 iml.Model
- 用户提供的函数,该函数接收一个样本矩阵(# 样本数 x # 特征数)并为这些样本计算模型输出。输出可以是一个向量(# 样本数)或一个矩阵(# 样本数 x # 模型输出数)。 
- datanumpy.array 或 pandas.DataFrame 或 shap.common.DenseData 或任何 scipy.sparse 矩阵
- 用于积分掉特征的背景数据集。为了确定一个特征的影响,该特征被设置为“缺失”,并观察模型输出的变化。由于大多数模型在测试时并非设计用来处理任意的缺失数据,我们通过将特征替换为它在背景数据集中的值来模拟“缺失”。因此,如果背景数据集是一个简单的全零样本,那么我们将通过把特征设置为零来近似其缺失状态。对于小问题,这个背景数据集可以是整个训练集,但对于大问题,可以考虑使用单个参考值或使用 - kmeans函数来总结数据集。注意:对于稀疏情况,我们接受任何稀疏矩阵,但会为了性能将其转换为 lil 格式。
- feature_nameslist
- 背景数据集中特征的名称。如果背景数据集是作为 pandas.DataFrame 提供的,那么 - feature_names可以设置为- None(默认值),特征名称将取自 DataFrame 的列名。
- link“identity” 或 “logit”
- 一个广义线性模型链接函数,用于将特征重要性值与模型输出连接起来。由于特征重要性值 phi 的总和等于模型输出,因此通常使用一个链接函数将它们与输出连接起来,即 link(output) = sum(phi)。默认为 "identity"(无操作)。如果模型输出是概率,则可以使用 "logit" 将 SHAP 值转换为对数几率单位。 
 
 - 示例 - 请参阅 Kernel Explainer 示例。 - __init__(model, data, feature_names=None, link='identity', **kwargs)
- 为传递的模型构建一个新的解释器。 - 参数:
- 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, data[, feature_names, link])- 为传递的模型构建一个新的解释器。 - addsample(x, m, w)- allocate()- explain(incoming_instance, **kwargs)- explain_row(*row_args, max_evals, ...)- 解释单行数据并返回元组 (row_values, row_expected_values, row_mask_shapes, main_effects)。 - load(in_file[, model_loader, masker_loader, ...])- 从给定的文件流加载一个解释器。 - not_equal(i, j)- run()- save(out_file[, model_saver, masker_saver])- 将解释器写入给定的文件流。 - shap_values(X, **kwargs)- 为一组样本估计 SHAP 值。 - solve(fraction_evaluated, dim)- supports_model_with_masker(model, masker)- 判断此解释器是否能处理给定的模型。 - varying_groups(x)- explain_row(*row_args, max_evals, main_effects, error_bounds, outputs, silent, **kwargs)
- 解释单行数据并返回元组 (row_values, row_expected_values, row_mask_shapes, main_effects)。 - 这是一个抽象方法,需要由每个子类实现。 - 返回:
- tuple
- 一个元组 (row_values, row_expected_values, row_mask_shapes),其中 row_values 是每个样本的归因值数组,row_expected_values 是表示每个样本的模型期望值的数组(或单个值)(除非存在固定的输入,例如解释损失时的标签,否则所有样本的期望值都相同),而 row_mask_shapes 是所有输入形状的列表(因为 row_values 总是被展平的)。 
 
 
 - classmethod load(in_file, model_loader=None, masker_loader=None, instantiate=True)
- 从给定的文件流加载一个解释器。 - 参数:
- in_file用于加载对象的文件流。
 
 
 - save(out_file, model_saver='.save', masker_saver='.save')
- 将解释器写入给定的文件流。 
 - shap_values(X, **kwargs)
- 为一组样本估计 SHAP 值。 - 参数:
- Xnumpy.array 或 pandas.DataFrame 或任何 scipy.sparse 矩阵
- 一个样本矩阵(# 样本数 x # 特征数),用于解释模型的输出。 
- nsamples“auto” 或 int
- 在解释每个预测时重新评估模型的次数。更多的样本会导致对 SHAP 值的方差估计更低。“auto” 设置使用 nsamples = 2 * X.shape[1] + 2048。 
- l1_reg“num_features(int)”、“aic”、“bic” 或 float
- 用于特征选择的 l1 正则化。估计过程基于去偏置的 lasso。 - “num_features(int)” 选择固定数量的最重要特征。 
- “aic” 和 “bic” 选项使用 AIC 和 BIC 规则进行正则化。 
- 直接传递一个浮点数会设置用于特征选择的 - sklearn.linear_model.Lasso模型的 “alpha” 参数。
- “auto”(已弃用):当枚举的可能样本空间少于 20% 时使用 “aic”,否则不使用正则化。 
 - 版本 0.47.0 中的变更: 默认值从 - "auto"更改为- "num_features(10)"。
- silent: bool
- 如果为 True,则隐藏 tqdm 进度条。默认为 False。 
- gc_collectbool
- 在每轮解释后运行垃圾回收。对于内存密集型的解释有时是必要的(默认为 False)。 
 
- 返回:
- np.array 或 list
- 估计的 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, masker)
- 判断此解释器是否能处理给定的模型。 - 这是一个抽象的静态方法,需要由每个子类实现。