可视化与解读决策树
摘要:TensorFlow最新教程展示了如何使用dtreeviz库可视化决策树,该库已成为最受欢迎的决策树可视化工具。决策树通过二叉树结构学习数据特征与目标值的关系,每个节点根据特征阈值进行分割。dtreeviz不仅能展示树结构、特征分割方式,还能可视化预测路径和叶节点样本分布,帮助解读模型决策过程。教程以企鹅和鲍鱼数据集为例,演示了分类树和回归树的可视化方法,包括特征检测路径、样本分布等关键信息,为模型解释提供了直观工具。
目录
可视化与解读决策树
决策树是梯度提升树和随机森林的基础组成单元,而这两种模型是处理表格数据最常用的机器学习模型。想要理解决策树的工作原理并解读模型,可视化是必不可少的手段。
TensorFlow 近期发布了全新教程,演示如何使用顶尖的可视化库 dtreeviz,对 TensorFlow 决策森林中的决策树进行可视化与解读。
dtreeviz 库于 2018 年首次发布,如今已成为最受欢迎的决策树可视化库。该库持续更新优化,拥有庞大的用户社区,能为使用者提供技术支持和问题解答。关于 dtreeviz 的设计思路,网上有相关的实用视频和文章可供参考。
接下来,我们将演示如何通过 dtreeviz 解读决策树的预测过程。
从基础层面来说,决策树是一种机器学习模型,它通过分析并提炼训练数据,将其转化为二叉树结构,从而学习观测数据与目标值之间的关联。决策树的每个叶节点都负责输出一个特定的预测结果:回归树的预测结果为连续数值(如价格),分类树的预测结果则为目标类别(如癌症确诊 / 未确诊)。
从决策树的根节点到任意一个负责预测的叶节点,所有路径都要经过一系列内部决策节点。每个决策节点都会将单个特征的取值,与模型训练过程中学习到的特定分割阈值进行比较。模型做出预测的过程,就是从根节点向下遍历树结构,依次对比特征取值,直至抵达叶节点的过程。举个简单的例子,我们构建一棵决策树,依据 “腿的数量” 和 “眼睛的数量” 两个特征对动物进行分类。
简易决策树分类示例
通过腿的数量(大于或等于 4 条)和眼睛的数量(大于或等于 3 只)对动物分类:
- 腿的数量不足 4 条→判定为企鹅
- 腿的数量≥4 条时,若眼睛数量≥3 只→判定为蜘蛛;若眼睛数量<3 只→判定为狗

假设待分类的测试动物有 4 条腿、2 只眼睛,我们从决策树根节点开始分类:首先将其腿的数量与 4 对比,因等于 4 条,向左分支;接着将其眼睛数量与 3 对比,因仅有 2 只,向右分支,最终抵达叶节点,得到 “狗” 的预测结果。想要深入学习相关知识,可参考这门决策树专项课程。
借助 dtreeviz,我们能可视化决策树中每个节点对特征取值范围的分割方式,同时展示每个叶节点中训练样本的分布情况,以此解读决策树的预测逻辑。例如,下图是基于企鹅数据集训练的随机森林模型中,某棵分类树的前几层结构:

企鹅数据集分类树(前几层)
对一只测试企鹅进行物种预测时,这棵决策树会首先检测 “鳍肢长度(毫米)” 特征:若该数值小于 206,向左分支并继续检测 “栖息岛屿” 特征;若鳍肢长度大于或等于 206,则向右分支并检测 “鸟喙长度(毫米)” 特征。(各可视化元素的详细解读可参考官方教程。)
生成该决策树可视化结果的代码十分简洁。假设我们有一个名为 cmodel 的分类模型,只需整合封装数据和模型的所有信息,即可调用 dtreeviz 实现可视化:
penguin_features = [f.name for f in cmodel.make_inspector().features()] penguin_label = "species" # 分类任务的目标标签名 viz_cmodel = dtreeviz.model(cmodel, tree_index=3, # 从随机森林中选取第3棵树 X_train=train_ds_pd[penguin_features], y_train=train_ds_pd[penguin_label], feature_names=penguin_features, target_name=penguin_label, class_names=classes) viz_cmodel.view() 下图则是基于鲍鱼数据集训练的随机森林模型中,某棵回归树的前几层结构:
鲍鱼数据集回归树(前几层)

另一个实用的模型解读手段,是可视化单个测试样本的特征向量从根节点到叶节点的遍历路径。通过观察决策树对某一样本的预测路径,我们能明确模型做出该预测的原因,知晓模型检测了哪些特征、以及对应的特征取值范围。这一应用场景十分贴近生活,比如申请银行贷款被拒时,通过决策树的可视化结果,就能精准得知拒贷原因(如信用评分过低、债务收入比过高等)。
以下是企鹅数据集中某一样本的决策树预测路径示例:橙色方框标注出了具体的遍历路径,左下角展示了该测试样本的各项特征取值。

企鹅样本决策树预测路径(橙色标注)
调用viz_cmodel.ctree_leaf_distributions()函数,还能查看叶节点的样本分布信息。例如,下图为企鹅数据集的叶节点编号与各类别样本数量的柱状图:

企鹅数据集:叶节点编号 VS 各类别样本数(柱状图)
对于回归树,叶节点可视化图会展示每个叶节点中样本的目标预测值分布情况,以下是鲍鱼数据集决策树的可视化结果示例:

鲍鱼数据集决策树叶节点预测值分布(散点图)
该图中每一行代表一个叶节点,蓝色散点则表示训练过程中分配至该叶节点的样本,其 “鲍鱼环数” 这一预测值的分布情况。
dtreeviz 库的功能远不止于此,上述内容只是冰山一角。你可以先查看官方教程,再尝试将该库应用到自己的决策树模型中。若想深入探究决策树的构建原理,以及其如何划分特征空间以实现预测,可观看相关 视频或阅读 dtreeviz 设计的专题文章。