擅长:python、mysql、java
<ol>
<li><p>对。根据原始文件中的数学公式,SHAP值是“特征对实际预测和平均预测之间差异的贡献”。平均预测(有时称为“基准值”或“预期模型输出”)与您提供的背景数据集相关</p>
</li>
<li><p>对。您可以使用一个示例的背景数据集。背景数据集的常见选择是训练数据、一个样本作为参考样本,甚至是一个全零的数据集。来自<a href="https://github.com/slundberg/shap/issues/23" rel="nofollow noreferrer">author</a>:“我建议使用单个背景数据点、真实背景的一个小随机子集,或者为了获得最佳性能,使用一组k-中值(根据每个中值所代表的训练点的数量加权)来简洁地代表背景。”</p>
</li>
</ol>
<p>下面是支持我对这两个问题的回答以及如何完成2的更多细节。那么,“预期模型输出”为什么依赖于背景数据集?为了回答这些问题,让我们来了解SHAP是如何完成的:</p>
<p><strong>步骤1</strong>:我们创建一个shap解释程序,提供两件事:一个经过训练的预测模型和一个背景数据集。shap从背景数据集创建一个联盟的人工数据集。每个联盟是一个二进制向量,表示特征组合的排列,1表示存在的特征,0表示不存在的特征。因此,有2^M个可能的组合用于M个特征</p>
<pre><code>explainer = shap.KernelExplainer(f, background_X)
</code></pre>
<p><strong>步骤2</strong>:我们提供样品我们要为其计算SHAP值。SHAP填充此人工数据集的值,以便当前特征采用该样本的原始值,缺失特征用背景数据集的值填充。然后为该联盟生成预测。如果背景数据集有n行,则缺失特征为filled n次,n个预测的平均值用作此联盟的预测。如果背景数据集只有一个样本,则缺少的特征将用该样本的值填充</p>
<pre><code>shap_values = explainer.shap_values(test_X)
</code></pre>
<p>因此,SHAP值相对于背景数据集的平均预测</p>