当前位置: 首页 > news >正文

[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预览功能

效果 代码&#xff1a; 插件地址&#xff1a; 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是一个探索机器学习系统长期影响的工具。可以用于评估机器学习系统的公平性和评估静态数据集上针对各种输入的误差度量的差异。开源网站&#xff1a;GitHub - google/ml-fairness-gym 2、安装ML-fairness-gym&#xff08;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(三)| 最简单的实例升级

编译工具&#xff1a;CMake&#xff08;三&#xff09;| 最简单的实例升级 前言过程语法解释ADD_SUBDIRECTORY 指令 如何安装目标文件的安装普通文件的安装&#xff1a;非目标文件的可执行程序安装(比如脚本之类)目录的安装 修改 Helloworld 支持安装测试 前言 本篇博客的任务…...

20天学会rust(四)常见系统库的使用

前面已经学习了rust的基础知识&#xff0c;今天我们来学习rust强大的系统库&#xff0c;从此coding事半功倍。 集合 数组&可变长数组 在 Rust 中&#xff0c;有两种主要的数组类型&#xff1a;固定长度数组&#xff08;Fixed-size Arrays&#xff09;和可变长度数组&…...

drawio----输出pdf为图片大小无空白(图片插入论文)

自己在写论文插入图片时为了让论文图片放大不模糊&#xff0c;啥方法都试了&#xff0c;最后摸索出来这个。 自己手动画图的时候导出pdf总会出现自己的图片很小&#xff0c;pdf的白边很大如下如所示&#xff0c;插入论文的时候后虽然放大不会模糊&#xff0c;但是白边很大会显…...

2021年09月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;字符统计 给定一个由a-z这26个字符组成的字符串&#xff0c;统计其中哪个字符出现的次数最多。 输入 输入包含一行&#xff0c;一个字符串&#xff0c;长度不超过1000。 输出 输出一行&#xff0c;包括出现次数最多的字符和该字符出现的次数&#xff0c;中间以…...

HCIP VRRP技术

一、VRRP概述 VRRP&#xff08;Virtual Router Pedundancy Protocol&#xff09;虚拟路由器冗余协议&#xff0c;既能够实现网关的备份&#xff0c;又能够解决多个网关之间互相冲突的问题&#xff0c;从而提高网络可靠性。 局域网中的用户的终端通常采用配置一个默认网关的形…...

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开发中&#xff0c;经常会在子线程中进行一些耗时操作&#xff0c;当操作完毕后会通过handler发送一些数据给主线程&#xff0c;通知主线程做相应的操作。 其中&#xff1a;子线程、handler、主线程&#xff0c;其实构成了线程模型中经典的…...

list

目录 迭代器 介绍 种类 本质 介绍 模拟实现 注意点 代码 迭代器 介绍 在C中&#xff0c;迭代器&#xff08;Iterators&#xff09;是一种用于遍历容器&#xff08;如数组、vector、list等&#xff09;中元素的工具 无论容器的具体实现细节如何,访问容器中的元素的方…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...