调整颜色和图形大小,并为 SHAP 图添加标题和标签
SHAP(SHapley Additive exPlanations)是一种流行的模型可解释性方法。SHAP
Python 包可让你快速创建各种不同的开箱即用图表。其独特的蓝色和洋红色使图表可以立即识别为 SHAP 图表。
不幸的是,Python 包默认调色板既不适合色盲,也不适合复印。因此,你可能想要更改 SHAP 图的颜色。或者你可能只想根据公司身份调整颜色。或者你可能只想添加标题。
对于某些 SHAP 图,自定义比其他图更容易。一些绘图函数已经提供了此类参数,但对于某些绘图类型,你必须精打细算。
对于某些 SHAP 图来说,定制比其他图更容易。
在本文中,我们将讨论如何
1. 自定义图形和轴对象的属性,例如调整图形大小、添加标题和标签以及使用子图。
2. 自定义摘要图、瀑布图、条形图和力图的颜色。如果你需要有关如何使用 SHAP 包的介绍或复习,可以查看这篇文章:《[[Python 中的 SHAP 简介]]》
确保已安装 SHAP 0.41.0 版本。否则,你将遇到本文代码片段的错误 。
如果没有,请按如下方式升级软件包:
在开始着色之前,我们先来了解一下基础知识。在本节中,我们将讨论如何自定义图形和轴对象的属性。
为了能够修改 SHAP 图,你需要将show
参数设置为False
。
show
:返回之前是否调用matplotlib.pyplot.show()
。将其设置为 False 允许在创建绘图后进一步自定义绘图。[^2]
不幸的是,当你想要调整 SHAP 图的图形大小时,调整 figsize
参数并没有太大帮助。相反,你需要设置 show = False
,然后才能调整图形的大小,如下所示:
设置完成后show = False
,你可以像往常一样自由调整图形的属性。下面你可以看到如何更改 title、x-label 和 x-limit 的示例。
如果想要在图中显示多个子图,可以使用方法.add_subplot()
。
在我们了解如何自定义图表的颜色之前,让我们先稍微绕道一下,了解一下为什么 SHAP 默认调色板不合适。
最近,我写了一篇文章,强调色盲安全数据可视化的重要性。《[[为什么你的数据可视化应该适合色盲人士]]》
不幸的是,SHAP 默认调色板既不适合色盲,也不适合复印,如下图所示。顶部可以看到 SHAP 图的默认颜色条从蓝色变为洋红色。下方可以看到红绿色盲和影印模拟。两者都表明默认调色板并不理想
虽然边缘颜色 — — 洋红色 (#ff0051) 和蓝色 (#008bfb) — — 对色盲来说是安全的,但由于它们具有相似的色调,因此它们并不适用于复印。
此外,渐变色调色板并不适合色盲患者,因为对于红绿色盲患者来说,中间范围的紫色色调与低范围的蓝色色调无法区分。
注意:对于本节,你必须至少安装了 SHAP 版本 0.40.0 [1] 。
对于摘要图,更改调色板是小菜一碟。从版本 0.40.0 开始,你只需使用cmap
参数 [^1]。
注意:对于本节,你必须至少安装 SHAP 版本 0.41.0 [^3]。
由于我们没有可用于瀑布图的参数,因此我们需要采取一些巧妙的方法。
首先,你需要将show
参数设置为False
能够修改绘图 [^2]。对于瀑布图,我们需要调整 FancyArrow 和 Text 对象的颜色。
对于条形图,我们需要采用与瀑布图类似的方法。
再次,你需要将show
参数设置为False
才能修改绘图 [^2]。对于条形图,我们需要调整矩形和文本对象的颜色。
幸运的是,对于力图,我们可以简单地使用plot_cmap
参数。
你可以手动指定颜色:
或者使用预定义的调色板:
本文展示了如何快速自定义 SHAP 图。虽然有些图很容易,但对于其他图,我们必须巧妙一些。
一般来说,你需要使用 show = False
参数来调整 SHAP 图。
然后,你可以轻松自定义图形和轴对象的属性,如图形大小、标题和标签,或者可以添加子图。
自定义颜色
• **对于某些绘图类型,我们可以直接使用可用的参数。**例如,对于摘要绘图,我们可以使用cmap
参数;对于强制绘图,我们可以使用plot_cmap
参数。
• 对于某些绘图类型,我们没有可用的参数来更改颜色。因此,对于瀑布图和条形图等绘图,我们需要逐一更改艺术家的颜色。
如果你在使用本文的代码片段时遇到问题,请务必检查你是否至少安装了 SHAP 版本 0.41.0。
希望这篇文章对你有所帮助!你还可以阅读我的其他文章,或者查看有关企业 AI 实战项目的教程,相信会让你拥有更多收获。
[^1] C. S. “Changing the gradient color of shap.summary_plot()
to specific 2 or 3 RGB gradient palette Colors”. stackoverflow.com. https://stackoverflow.com/questions/60153036/changing-the-gradient-color-of-shap-summary-plot-to-specific-2-or-3-rgb-grad
[^2] “SHAP”, “Welcome to the SHAP documentation”. shap.readthedocs.io. https://shap.readthedocs.io/en/latest/index.html
[^3] J. Stevenson, “Fix bug in waterfall with show=False”. github.com. https://github.com/slundberg/shap/pull/2342