可视化与解读决策树

可视化与解读决策树
摘要:TensorFlow最新教程展示了如何使用dtreeviz库可视化决策树,该库已成为最受欢迎的决策树可视化工具。决策树通过二叉树结构学习数据特征与目标值的关系,每个节点根据特征阈值进行分割。dtreeviz不仅能展示树结构、特征分割方式,还能可视化预测路径和叶节点样本分布,帮助解读模型决策过程。教程以企鹅和鲍鱼数据集为例,演示了分类树和回归树的可视化方法,包括特征检测路径、样本分布等关键信息,为模型解释提供了直观工具。

目录

可视化与解读决策树

简易决策树分类示例

企鹅数据集分类树(前几层)

鲍鱼数据集回归树(前几层)

企鹅样本决策树预测路径(橙色标注)

企鹅数据集:叶节点编号 VS 各类别样本数(柱状图)

鲍鱼数据集决策树叶节点预测值分布(散点图)


可视化与解读决策树

决策树是梯度提升树和随机森林的基础组成单元,而这两种模型是处理表格数据最常用的机器学习模型。想要理解决策树的工作原理并解读模型,可视化是必不可少的手段。

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 设计的专题文章。

Read more

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用 Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用,大家好,我是 xcLeigh。现在国产化数据库越来越普及,金仓数据库(KingbaseES)作为一款超实用的企业级关系型数据库,在政府、金融、能源这些关键领域用得特别多。今天我就带大家从零开始,一步步学会用Python操作金仓数据库,从环境准备、连接数据库,到CRUD核心操作、事务处理,再到常见问题排查,内容全是干货,代码拿过去就能用,就算是新手也能很快上手! 前言     中电科金仓(北京)科技股份有限公司(以下简称“电科金仓”)成立于1999年,是成立最早的拥有自主知识产权的国产数据库企业,也是中国电子科技集团(CETC)成员企业。电科金仓以“提供卓越的数据库产品助力企业级应用高质量发展”为使命,致力于“成为世界卓越的数据库产品与服务提供商”。     电科金仓自成立起始终坚持自主创新,专注数据库领域二十余载,具备出色的数据库产品研发及服务能力,核心产品金仓数据库管理系统KingbaseES(简称“KES”

By Ne0inhk
Python 多线程日志错乱:logging.Handler 的并发问题

Python 多线程日志错乱:logging.Handler 的并发问题

Python 多线程日志错乱:logging.Handler 的并发问题 🌟 Hello,我是摘星! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一个特性都是我放飞的蝴蝶。 🔬 每一次代码审查都是我的显微镜观察,每一次重构都是我的化学实验。 🎵 在编程的交响乐中,我既是指挥家也是演奏者。让我们一起,在技术的音乐厅里,奏响属于程序员的华美乐章。 目录 Python 多线程日志错乱:logging.Handler 的并发问题 摘要 1. 问题现象与复现 1.1 典型的日志错乱场景 2. logging模块的线程安全机制分析 2.1 Handler级别的线程安全 2.2 锁竞争的性能影响分析 3. 深入源码:竞态条件的根本原因 3.1 Handler.emit()方法的竞态分析 3.2 I/O操作的原子性问题

By Ne0inhk
【C++高并发内存池篇】ThreadCache 极速引擎:C++ 高并发内存池的纳秒级无锁革命!

【C++高并发内存池篇】ThreadCache 极速引擎:C++ 高并发内存池的纳秒级无锁革命!

📌本篇摘要 📝本篇为高并发内存池项目的正式开篇,通过把项目拆成一部分一部分去实现,这里会分成ThreadCache,CentralCache,PageCache等三部分去分部实现内存池,这里就通过一步步分析来简单实现ThreadCache这步(可能会不完整,后续继续补充),欢迎阅读! 🏠欢迎拜访🏠:点击进入博主主页 📌本篇主题📌:ThreadCache框架部分简单实现 📅制作日期📅:2025.08.25 🧭隶属专栏🧭:点击进入所属C++高并发内存池项目专栏 一· 💡concurrent memory pool整体轮廓分析 分为三部分: * 线程缓存(ThreadCache):每个线程独有,用于分配小于 256KB 的内存,申请内存无需加锁,独享特性使并发线程池高效。 * 中心缓存(CentralCache):所有线程共享,ThreadCache 能按需从其获取对象,CentralCache也负责回收ThreadCache 对象以均衡内存分配,因存在竞争,取内存对象需加桶锁,但竞争不激烈。 页缓存(PageCache):位于 CentralC

By Ne0inhk

Python 全面语法指南

前言 1. 什么是编程? 编程就像是教电脑做事的过程。想象你有一个非常听话但很笨的助手,你需要用它能理解的语言(编程语言)一步一步地告诉它该做什么。 * 你 = 程序员(下达指令的人) * Python = 你和电脑沟通的语言 * 电脑 = 执行指令的助手 2. Python 的特点 Python 之所以适合初学者,是因为它: 1. 像英语一样易读 - 代码看起来像自然语言 2. 简洁明了 - 用很少的代码完成很多功能 3. 功能强大 - 从简单计算到人工智能都能做 4. 免费开源 - 任何人都可以免费使用 3. 程序的基本结构 一个 Python 程序就像做菜的食谱: 1. 准备材料(定义变量) 2. 处理材料(执行操作) 3. 呈现结果(

By Ne0inhk