dtreeviz : 决策树可视化
描述
一个用于决策树可视化和模型解释的Python库。决策树是梯度提升机和随机森林(tm)的基本构建块,这两者可能是结构化数据最受欢迎的两种机器学习模型。在学习这些模型如何工作以及解释模型时,可视化决策树是一个巨大的帮助。这些可视化的灵感来自R2D3的一个教育动画;机器学习的可视化介绍。关于我们的决策树可视化库和我们所做的视觉设计决策的深入讨论,请参阅如何可视化决策树。
目前dtreeviz支持:scikit-learn、XGBoost、Spark MLlib、LightGBM和Tensorflow。查看安装说明。
作者
- Terence Parr,Google的技术负责人,直到2022年一直是旧金山大学的数据科学/计算机科学教授,他是2012年旧金山大学数据科学硕士项目的创始主任。
- Tudor Lapusan
- Prince Grover
主要的代码和可视化清理贡献由Matthew Epland (@mepland)完成。
可视化示例
树可视化
<表格内容略>
预测路径解释
<表格内容略>
叶节点信息
<表格内容略>
特征空间探索
回归
分类
分类边界
作为一个实用函数,dtreeviz提供了dtreeviz.decision_boundaries()
,它可以展示分类器的一维和二维特征空间,包括表示概率的颜色、决策边界和错误分类的实体。顺便说一下,这个方法不局限于树模型,它应该可以适用于任何具有predict_proba()
方法的模型。这意味着scikit-learn中的任何模型都应该可以使用(但我们也使其适用于定义了predict()
的Keras模型)。(由于它不专门用于树,该函数不使用从dtreeviz.model()
获得的适配器。)详见classifier-decision-boundaries.ipynb。
有时,查看改变某些超参数的动画会很有帮助。如果你查看classifier-boundary-animations.ipynb笔记本,你会看到生成以下动画的代码(动画png文件):
快速入门
请参阅安装说明,然后查看你正在使用的支持的机器学习库的特定笔记本:
- 基于sklearn的示例
- 基于LightGBM的示例
- 基于Spark的示例
- 基于TensorFlow的示例 另请参阅tensorflow.org上的博客 使用dtreeviz可视化TensorFlow决策森林树
- 基于XGBoost的示例
- 任何scikit-learn模型的分类器决策边界.ipynb (colab)
- 更改颜色的笔记本
为了与这些不同的库进行互操作,dtreeviz使用从函数dtreeviz.model()
获得的适配器对象来提取可视化所需的模型信息。给定这样的适配器对象,所有dtreeviz功能都可以使用相同的程序员接口。基本的dtreeviz使用方法是:
- 导入dtreeviz和您的决策树库
- 获取并将数据加载到内存中
- 使用您的决策树库训练分类器或回归器模型
- 使用以下命令获取dtreeviz适配器模型
viz_model = dtreeviz.model(your_trained_model,...)
- 调用dtreeviz函数,例如
viz_model.view()
或viz_model.explain_prediction_path(sample_x)
示例
这里是一个完整的Python文件示例,它在弹出窗口中显示以下树:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
import dtreeviz
iris = load_iris()
X = iris.data
y = iris.target
clf = DecisionTreeClassifier(max_depth=4)
clf.fit(X, y)
viz_model = dtreeviz.model(clf,
X_train=X, y_train=y,
feature_names=iris.feature_names,
target_name='iris',
class_names=iris.target_names)
v = viz_model.view() # 将SVG渲染为内部对象
v.show() # 弹出窗口
v.save("/tmp/iris.svg") # 可选择保存为svg
在笔记本中,您可以内联渲染而无需调用show()
。只需调用view()
:
viz_model.view() # 在笔记本中,内联显示
安装
如果尚未安装,请在您的系统上安装anaconda3。
您可能需要验证您没有安装conda版本的graphviz相关包,因为dtreeviz需要pip版本;您可以通过以下方式从conda空间中删除它们:
conda uninstall python-graphviz
conda uninstall graphviz
要安装(仅限Python >=3.6),请执行以下操作(在Windows上从Anaconda Prompt执行!):
pip install dtreeviz # 安装dtreeviz(用于sklearn)
pip install dtreeviz[xgboost] # 安装XGBoost相关依赖
pip install dtreeviz[pyspark] # 安装pyspark相关依赖
pip install dtreeviz[lightgbm] # 安装LightGBM相关依赖
pip install dtreeviz[tensorflow_decision_forests] # 安装tensorflow_decision_forests相关依赖
pip install dtreeviz[all] # 安装所有相关依赖
这还应该引入 graphviz
Python 库(>=0.9),我们正在使用它来处理特定平台的事务。
限制。 目前只能生成 svg 文件,这减少了依赖项并大大简化了安装过程。
如果您有任何关于如何让 dtreeviz 在其他平台上(更好地)工作的有用建议,请发送电子邮件给 Terence。谢谢!
关于您的特定平台,请参阅以下小节。
Mac
确保安装了最新的 XCode 和命令行工具。如果已安装 XCode,可以从命令行运行 xcode-select --install
来安装命令行工具。您还需要签署 XCode 许可协议,可以通过命令行运行 sudo xcodebuild -license
来完成。接下来的 brew 安装需要编译 graphviz,所以您需要正确设置 XCode。
您需要 dot
的 graphviz 二进制文件。确保您有最新版本(在 10.13、10.14 上验证过):
brew reinstall graphviz
为了以防万一,请从任何 anaconda 安装中删除 dot
,例如:
rm ~/anaconda3/bin/dot
从命令行,这个命令
dot -Tsvg
应该可以工作,它会停在那里等待输入,不会报错。您可以按 Ctrl+C 返回到 shell。确保您使用的是 brew 安装的正确 dot
:
$ which dot
/usr/local/bin/dot
$ ls -l $(which dot)
lrwxr-xr-x 1 parrt wheel 33 May 26 11:04 /usr/local/bin/dot@ -> ../Cellar/graphviz/2.40.1/bin/dot
$
限制。 Jupyter notebook 有一个 bug,无法正确显示 .svg 文件,但 Jupyter Lab 没有问题。
Linux(Ubuntu 18.04)
要获取 dot
二进制文件,请执行:
sudo apt install graphviz
限制。 view()
方法可以弹出新窗口,图像可以在 jupyter notebook 中内联显示,但在 jupyter lab 中不行(解析 SVG XML 时会出错)。notebook 中的图像也会将我们使用的 Arial 字体替换,导致一些文本重叠。在此平台上只能生成 .svg 文件。
Windows 10
(确保 pip install graphviz
,这对所有平台都是通用的,在 Windows 上请确保从 Anaconda Prompt 执行此操作!)
下载 graphviz-2.38.msi 并更新您的 Path
环境变量。将 C:\Program Files (x86)\Graphviz2.38\bin
添加到用户路径,将 C:\Program Files (x86)\Graphviz2.38\bin\dot.exe
添加到系统路径。这是 Windows,所以更新环境变量后可能需要重启。您应该在 Anaconda Prompt 中看到以下内容:
(base) C:\Users\Terence Parr>where dot
C:\Program Files (x86)\Graphviz2.38\bin\dot.exe
(不要使用 conda install -c conda-forge python-graphviz
,因为您会得到旧版本的 graphviz
Python 库。)
从 Anaconda Prompt 验证以下命令是否有效(使用大写 -V
而不是小写 -v
):
dot -V
如果不起作用,那么您的 Path
有问题。我发现以下测试程序很有用。第一个程序检查 Python 是否能找到 dot
:
import os
import subprocess
proc = subprocess.Popen(['dot','-V'])
print( os.getenv('Path') )
下面的版本做同样的事情,只是使用 graphviz
Python 库的后端支持实用程序,这是我们在 dtreeviz 中使用的:
import graphviz.backend as be
cmd = ["dot", "-V"]
stdout, stderr = be.run(cmd, capture_output=True, check=True, quiet=False)
print( stderr )
如果您在运行命令时遇到问题,可以尝试从以下位置复制文件:https://github.com/xflr6/graphviz/tree/master/graphviz。
将它们放在 AppData\Local\Continuum\anaconda3\Lib\site-packages\graphviz 文件夹中。
也清理 pycache 目录。
对于 graphviz windows 安装 8.0.5 和 python 接口 v0.18+ :
import graphviz.backend as be
cmd = ["dot", "-V"]
stdout = be.execute.run_check(cmd, capture_output=True, check=True, quiet=False)
print( stdout )
Jupyter Lab 和 Jupyter notebook 都能很好地显示内联 .svg 图像。
验证 graphviz 安装
尝试创建一个内容为 digraph T { A -> B }
的文本文件 t.dot
(例如,将其粘贴到文本编辑器中),然后从命令行运行以下命令:
dot -Tsvg -o t.svg t.dot
这应该会生成一个简单的 t.svg
文件,可以正常打开。如果 dot
命令报错,则无法在 dtreeviz Python 代码中使用。如果找不到 dot
命令,那么你可能没有更新 PATH
环境变量,或者 graphviz
安装存在其他问题。
局限性
最后,不要使用 IE 浏览器查看 .svg 文件。请使用 Edge 浏览器,因为显示效果会更好。我怀疑 IE 是将它们显示为光栅图像而非矢量图像。在此平台上只能生成 .svg 文件。
本地安装 dtreeviz
请务必遵循上述安装指南。
为了运行测试,你需要使用 [dev]
额外选项安装库:
pip install dtreeviz[dev] # 安装开发依赖
在开发过程中,要将 dtreeviz
库推送到本地 egg 缓存(强制更新),请执行以下操作(在 Windows 上使用 Anaconda 命令提示符):
python setup.py install -f
例如,在 Terence 的电脑上,它会添加 /Users/parrt/anaconda3/lib/python3.6/site-packages/dtreeviz-2.2.2-py3.6.egg
。
反馈
我们欢迎用户通过电子邮件(发送给 parrt) 或提交 issue 的方式告诉我们他们如何使用 dtreeviz,希望添加哪些功能等信息。
有用的资源
- 如何可视化决策树
- 如何解释梯度提升
- 机器学习的机制
- R2D3 制作的动画
- 机器学习的可视化入门
- fast.ai 的面向程序员的机器学习入门 MOOC
- Stef van den Elzen 的决策树的交互式构建、分析和可视化
- SIGKDD 2000 论文:实现用户和计算机在分类任务中的有效合作 中的一些类似特征空间可视化
- 美丽的决策:深入了解 BigML 的决策树
- "SunBurst" 树可视化方法:用于描述层次结构的空间填充信息可视化评估
许可证
本项目根据 MIT 许可证的条款授权,详见 LICENSE。