[xgb] plot tree
xgboost plot tree debug
- problem1
- solutions
- reference
- problem2
- solution
- reference
- problem3
- solution
- reference
- supplementary explanation
- plot_tree参数介绍
- num_trees=model.get_booster().best_iteration
- 图中信息介绍
- 缺失值
- 叶子的值
- 训练的XGB模型里有多少棵树
problem1
用xgboost的plot_tree(booster)画图,出来只有一个叶子节点,没有整棵树。

solutions
plot_tree(model, num_trees=model.get_booster().best_iteration)
在plot_tree中添加num_trees=model.get_booster().best_iteration。
原因:
XGB是一种基于集成原理的技术,因此XGB创建多棵树,有些树只能以一片叶子结束。
用于绘制export_graphviz / plot_tree 的函数将第一棵树绘制为默认值,而不是最佳交互。为此,需要设置参数num_trees
plot_tree中对于参数的介绍:
num_trees : int, default 0
Specify the ordinal number of target tree 指定目标树的序号
所以必须找到目标树的序数。幸运的是,有两个函数为我们设置了:.get_booster().best_iteration。
参考下面的代码来绘制具有最佳交互的树。
from xgboost import plot_treeplot_tree(model, ax=ax, num_trees=model.get_booster().best_iteration)
reference
https://stackoom.com/question/4K9uw
problem2
画出来的图看不清

solution
from xgboost import plot_tree
import matplotlib.pyplot as pltplot_tree(model, num_trees=reg_a.get_booster().best_iteration)
fig=plt.gcf()
fig.set_size_inches(150,100)
fig.savefig('../pics/tree.png')
这样存下来是一个1.9MB大小的png文件。
reference
https://blog.csdn.net/anshuai_aw1/article/details/82988494
problem3
到这里,我输出的png已经是以特征名画出来的图了。但是看网上说,有的图画出来不是特征名,而是0123,这里网上给出了以下解决方法。
solution
def ceate_feature_map(features):outfile = open('xgb.fmap', 'w')i = 0for feat in features:outfile.write('{0}\t{1}\tq\n'.format(i, feat))i = i + 1outfile.close()
'''
X_train.columns在第一段代码中也已经设置过了。
特别需要注意:列名字中不能有空格。
'''
ceate_feature_map(X_train.columns)
reference
https://zhuanlan.zhihu.com/p/28324798
supplementary explanation
plot_tree参数介绍
Parameters----------booster : Booster, XGBModelBooster or XGBModel instance 提升器或者XGB模型fmap: str (optional)The name of feature map file特征名称的映射关系的文件,主要是为了画图显示的是特征名,而不是012.num_trees : int, default 0Specify the ordinal number of target tree指定目标树的序数, 画的第几课树rankdir : str, default "TB"Passed to graphiz via graph_attr通过graph_attr传给graphiz,'LR'=from left to right; 'TB'/'UT'=from top to bottom.ax : matplotlib Axes, default NoneTarget axes instance. If None, new figure and axes will be created.kwargs :Other keywords passed to to_graphvizReturns
-------ax : matplotlib Axes
num_trees=model.get_booster().best_iteration
get_booster
获取此模型的底层xgboost Booster。
best_iteration
通过提前停止获得的最佳迭代。该属性是基于0的,
例如,如果最佳迭代是第一轮,则best_iteration为0。
图中信息介绍
缺失值
在画出来的树模型图中可以看到有一条蓝色的线,上面写着“yes,missing”,这表示只要是缺失值就跟着蓝色线走。这是XGBoost对缺失值的处理方法。
那这个蓝色的线又是如何生成的呢?
这个算法实际上做的是一件非常简单的事情。对于第k个特征,我们首先将样本中第k个特征的特征值为缺失值的样本全部剔除。然后我们正常进行样本划分。最后,我们做两个假设,一个是缺失值全部摆左子结点,一个是摆右子节点。哪一个得到的增益大,就代表这个特征最好的划分。总结一下,就是缺失值都摆一起,选最好的情况
注意:对于加权分位法中对于特征值的排序,缺失值不参与。也就是说缺失值不会作为分裂点。gblinear将缺失值视为0。
reference:
原文链接:https://blog.csdn.net/zzoo2200/article/details/126786630
叶子的值
leaf_value实际上是这个节点的交叉熵值: 1 / (1 + np.exp(-x))

以上面的树为例, 第二层的叶子节点
左节点预测概率1 / (1 + np.exp(0.2198)) = 0.445,
右节点的预测概率1 / (1 + np.exp(-0.217)) = 0.554
0.445 + 0.554 = 1
reference:
链接:https://www.jianshu.com/p/3b4575795146
训练的XGB模型里有多少棵树
使用dump model,xgboost会生成一个列表,其中每个元素都是单个树的字符串表示。然后计数list中有多少元素即可获得模型中树的数量。
# model is a XGBoost model fitted using the sklearn API
dump_list = model.get_booster().get_dump()
print(dump_list )
# ['0:leaf=6.07390785\n', '0:leaf=4.2559433\n', '0:leaf=2.98210931\n', '0:leaf=2.08954239\n', '0:leaf=1.46412754\n']
num_trees = len(dump_list)
print(num_trees )
# 5
reference:
https://stackoverflow.com/questions/50426248/how-to-know-the-number-of-tree-created-in-xgboost
相关文章:
[xgb] plot tree
xgboost plot tree debug problem1solutionsreference problem2solutionreference problem3solutionreference supplementary explanationplot_tree参数介绍num_treesmodel.get_booster().best_iteration图中信息介绍缺失值叶子的值 训练的XGB模型里有多少棵树 problem1 用xgb…...
【云原生】Kubernetes 概述
Kubernetes 概述 1.Kubernetes 简介 Kubernetes 是一个可移植的、可扩展的、用于管理容器化工作负载和服务的开源平台,它简化(促进)了声明式配置和自动化。它有一个庞大的、快速增长的生态系统。Kubernetes 的服务、支持和工具随处可见。 K…...
9.2.2Socket(TCP)
一.过程: 1.建立连接(不是握手),虽然内核中的连接有很多,但是在应用程序中,要一个一个处理. 2. 获取任务:使用ServerSocket.accept()方法,作用是把内核中的连接获取到应用程序中,这个过程类似于生产者消费者模型. 3. 使用缓冲的时候,注意全缓冲和行缓冲. 4.注意关闭文件资源…...
“解锁IDEA的潜力:高级Java Maven项目配置指南”
目录 前言:流程目录:1.确保Java和Maven已安装检查Java是否已正确安装并配置环境变量 2.创建一个新的Maven项目导航到要创建项目的目录配置Maven运行以下命令创建一个新的Maven项目 3.配置项目的pom.xml文件打开项目根目录下的pom.xml文件配置Web.xml 4.配…...
[足式机器人]Part5 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】
本文仅供学习使用 本文参考: 《机械设计》 王德伦 马雅丽课件与日常作业可登录网址 http://edu.bell-lab.com/manage/#/login,选择观摩登录,查看2023机械设计2。 机械设计-Ch00Ch01——绪论机器结构组成与连接 Ch00-绪论0.1 何为机械设计——…...
机器学习:隐马尔可夫模型(HMM)
后续会回来补充代码 1 隐马尔可夫模型 隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程。 1.1 数学定义 隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成…...
使用插件实现pdf,word预览功能
效果 代码: 插件地址: https://github.com/501351981/vue-office <a-modalv-model:visible"visible":title"title"ok"handleOk":bodyStyle"bodyStyle":width"1200":maskClosable"false"…...
yolov5模型构建源码详细解读(yaml、parse_model等内容)
文章目录 前言一、yolov5文件说明二、yolov5调用模型构建位置三、模型yaml文件解析1、 yaml的backbone解读Conv模块参数解读C3模块参数解读 2、yaml的head解读Concat模块参数解读Detect模块参数解读 四、模型构建整体解读五、构建模型parse_model源码解读 前言 本文章记录yolo…...
Monodepth2和Lite-Mono准备数据集
以KITTI为例下载解压后放在/home/lwd/tmp/2011_09_26 cd /home/lwd/tmp/2011_09_26 ls输出 2011_09_26_drive_0001_sync 2011_09_26_drive_0002_sync 2011_09_26_drive_0005_sync python txt.py txt.py import os, sysalos.listdir(.) al.sort() fopen(train.txt, w) for a in…...
ML-fairness-gym入门教学
1、ML-fairness-gym简介 ML-fairness-gym是一个探索机器学习系统长期影响的工具。可以用于评估机器学习系统的公平性和评估静态数据集上针对各种输入的误差度量的差异。开源网站:GitHub - google/ml-fairness-gym 2、安装ML-fairness-gym(Windows&…...
结构体指针变量的使用
1、结构体指针的引用 #include<iostream> using namespace std;struct Student {int num;char name[32]; }; int main() {struct Student stu {1,"张三"};struct Student* p &stu;system("pause"); return 0; } 2、通过结构体指针访问结构体…...
解决oracle的em访问提示“使用不受支持的协议。”的bug
1. 设置oracle唯一名称 执行emctl时需要设置一个唯一的名称 否则提示 “Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name. ”中文意思为“未定义环境变量ORACLE_UNQNAME。 请将ORACLE_UNQNAME设置为数据库唯一名称/服务…...
编译工具:CMake(三)| 最简单的实例升级
编译工具:CMake(三)| 最简单的实例升级 前言过程语法解释ADD_SUBDIRECTORY 指令 如何安装目标文件的安装普通文件的安装:非目标文件的可执行程序安装(比如脚本之类)目录的安装 修改 Helloworld 支持安装测试 前言 本篇博客的任务…...
20天学会rust(四)常见系统库的使用
前面已经学习了rust的基础知识,今天我们来学习rust强大的系统库,从此coding事半功倍。 集合 数组&可变长数组 在 Rust 中,有两种主要的数组类型:固定长度数组(Fixed-size Arrays)和可变长度数组&…...
drawio----输出pdf为图片大小无空白(图片插入论文)
自己在写论文插入图片时为了让论文图片放大不模糊,啥方法都试了,最后摸索出来这个。 自己手动画图的时候导出pdf总会出现自己的图片很小,pdf的白边很大如下如所示,插入论文的时候后虽然放大不会模糊,但是白边很大会显…...
2021年09月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
第1题:字符统计 给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。 输入 输入包含一行,一个字符串,长度不超过1000。 输出 输出一行,包括出现次数最多的字符和该字符出现的次数,中间以…...
HCIP VRRP技术
一、VRRP概述 VRRP(Virtual Router Pedundancy Protocol)虚拟路由器冗余协议,既能够实现网关的备份,又能够解决多个网关之间互相冲突的问题,从而提高网络可靠性。 局域网中的用户的终端通常采用配置一个默认网关的形…...
JAVA AES ECB/CBC 加解密
JAVA AES ECB/CBC 加解密 1. AES ECB2. AES CBC 1. AES ECB package org.apache.jmeter.functions;/*** author yuyang*/import org.apache.commons.lang3.StringUtils; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;/*** a…...
Android FrameWork 层 Handler源码解析
Handler生产者-消费者模型 在android开发中,经常会在子线程中进行一些耗时操作,当操作完毕后会通过handler发送一些数据给主线程,通知主线程做相应的操作。 其中:子线程、handler、主线程,其实构成了线程模型中经典的…...
list
目录 迭代器 介绍 种类 本质 介绍 模拟实现 注意点 代码 迭代器 介绍 在C中,迭代器(Iterators)是一种用于遍历容器(如数组、vector、list等)中元素的工具 无论容器的具体实现细节如何,访问容器中的元素的方…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
