可视化与解读决策树
决策树是梯度提升树和随机森林的基础组成单元,而这两种模型是处理表格数据最常用的机器学习模型。想要理解决策树的工作原理并解读模型,可视化是必不可少的手段。
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()
下图则是基于鲍鱼数据集训练的随机森林模型中,某棵回归树的前几层结构:






