基于速度、复杂性等因素比较KernelSHAP和TreeSHAP

KernelSHAP 和 TreeSHAP 都用于近似 Shapley 值。TreeSHAP 的速度很快,但是它只能用于基于树的算法,如随机森林和 xgboost。而KernelSHAP 与模型无关。这意味着它可以与任何机器学习算法一起使用。我们将比较这两种近似方法。

本文中的实验,将展示 TreeSHAP 实际上有多快。另外还探索树算法的参数如何影响时间复杂度,这些包括树的数量、深度和特征的数量等。在使用 TreeSHAP 进行数据探索时,这些知识非常有用。最后我们还将讨论其他因素(如特性依赖关系)的一些影响。

本文假设你了解 SHAP,可以参考我们以前发布的其他文章。

每样本的时间

对于第一个实验,我们看看这些方法计算 SHAP 值需要多少时间。我们不会详细介绍用于代码,因为本文的最后会提供完整代码的GitHub 地址。从模拟回归数据开始。这有 10000 个样本、10 个特征和 1 个连续目标变量。使用这些数据,我们训练了一个随机森林,该模型有 100 棵树,最大深度为 4。

现在可以使用这个模型来计算 SHAP 值。同时使用 KernelSHAP 和 TreeSHAP 方法,对于每种方法计算 10、100、1000、2000、5000 和 10000 个 SHAP 值。记录每个值计算所花费的时间,并且我重复此过程 3 次,然后将平均值作为最终时间。

可以在图 1 中看到结果。TreeSHAP 明显更快。对于 10,000 个 SHAP 值,该方法耗时 1.44 秒。相比之下,KernelSHAP 耗时 13 分 40.56 秒。这是 570 倍的时间。当然这些计算的速度将取决于设备,但差异不会太大。

上面的 TreeSHAP 线看起来很平。这是因为 KernelSHAP的值太大了。在下图 2 中,我们单独绘制 TreeSHAP 。可以看到它也随着观察次数的增加而线性增加。这告诉我们每个 SHAP 值都需要相似的时间来计算。我们将在下一节探讨原因。

完整文章:

https://avoid.overfit.cn/post/74f491a38a874b5e8dd9d17d9da4bfbb

posted @ 2022-07-23 10:56  deephub  阅读(224)  评论(0编辑  收藏  举报