lightgbm 保存模型 过大_一个例子读懂LightGBM的模型文件

机器学习模型的可解释性是个让人头痛的问题。在使用LightGBM模型的肯定对生成的GBDT的结构是好奇的,我也好奇,所以就解析一个LightGBM的模型文件看看,通过这个解析,你可以看懂GBDT的结构。

另外,了解模型文件,能够在此基础上做模型的监控、评估。

训练配置:

6307410个样本做训练集

num_trees = 2 // 树的棵树

categorical_feature=1,2,3,5,6,8,299 //类别特征编号

num_leaves = 6 // 每棵树的叶子数

max_depth = 3 // 树的深度

learning_rate = 0.1 // 学习率

bagging_fraction = 0.8 // 样本采样比例

训练出的LightGBM模型文件及其含义解析:

tree // 模型中子模型的名字,gbdt的子模型是tree

num_class=1 // 类别数量,二分类问题变成了概率问题

label_index=0 // lable所在列

max_feature_idx=1365 //最大的特征index, 0~1365,LightGBM认为特征从0开始编码

objective=binary //学习目标

sigmoid=1 //结果输出时sigmoid的参数 output[0] = 1.0f / (1.0f + std::exp(-sigmoid_ * input[0]));,越大sigmoid越陡峭

feature_names=Column_0 Column_1 Column_2 ... Column_1363 Column_1364 Column_1365 // 特征名字,就是”Column_” + 数据中特征index

feature_infos=none 0:1 [0:10742] 1487112:0 [0:3999191] ...

// 没有“[]”的是category 特征的bin中的特征取值

// 有“[]”是数值特征的bin中的最小、最大值

// none表示此特征没有使用

// 第1棵树

Tree=0 // 树的编号,从0开始

num_leaves=6 // 树中叶子的数量

split_feature=150 197 381 63 197 //6个叶子,分裂5次,有5个内部节点和分裂特征,这个特征编号是在原样本中的特征编号

split_gain=579239.62681873201 101591.49813184602 78186.521895228478 75276.734034747526 57589.418844881991 // 每次分裂的增益

threshold=0.028499999999999998 0.016500000000000001 554.04549999999995 3.1340000000000003 0.043499999999999997 // 分裂特征的特征值分界点

decision_type=0 0 0 0 0 //5个内部节点的判定类型值,判定类型值是int8_t,以bit形式,第一低位存储是否是category特征,第二低位存储是否使用左子节点作为默认去向,第三、第四低位存储是None(0)、Zero(1)、NaN(2)中的哪种

left_child=1 3 -2 -1 -4

right_child=2 -3 4 -5 -6

leaf_parent=3 2 1 4 3 4

// 树的结构

// 有5个内部节点,默认编号是:0、1、2、3、4

// 有6个叶子节点,编号分别是:-1、-2、-3、-4、-5、-6

// left_child表示这5个内部节点的左子节点,正值表示内部节点的节点编号,负值表示叶子节点的节点编号

// right_child表示这5个内部节点的左子节点

// leaf_parent 表示-1、-2、-3、-4、-5、-6这6个叶子节点的父节点编号

// 于是这个树的结构就是这样

leaf_value=0.013151525839652695 -0.0031140914212769983 -0.017382907119786403 0.038475160439658297 -0.10110187665371873 0.091299535945193661 //各个叶子节点的预测值

leaf_count=171831 511580 1078379 893167 1432378 958588 // 各个叶子节点的样本数量,这里总共有5045923个

internal_value=0 -0.55733646225250466 0.54728595683818304 -0.85735596237957235 0.67893796844992116 // 各个中间节点的预测值

internal_count=5045923 2682588 2363335 1604209 1851755 // 各个中间节点的样本数,1604209[中间节点3的样本数] = 171831 [叶子节点-1的样本数] + 1432378[叶子节点-5的样本数]

//可以看出这棵树的训练只用了5045923个样本,而实际训练集样本有6307410个,这是因为在模型配置文件中设置了采样比例为0.8

shrinkage=0.1 // 设定的学习率

// 第二棵树,含义参考第一棵树

Tree=1

num_leaves=6

split_feature=145 161 198 11 381

split_gain=474253.30131810816 93455.112333323515 62969.704987476958 55878.668231101008 32961.303899061735

threshold=0.026500000000000003 0.018500000000000003 0.043499999999999997 8.4154999999999998 663.125

decision_type=0 0 0 0 0

left_child=1 3 4 -1 -2

right_child=2 -3 -4 -5 -6

leaf_parent=3 4 1 2 3 4

leaf_value=0.010494795842311992 -0.024170274578830017 -0.010405728632592726 0.075110240965977765 -0.08865782202254327 0.038228215007066219

leaf_count=167445 301508 975432 1063548 1556038 981952

internal_value=0 -0.50125289035240339 0.49837677764421778 -0.76617891719378095 0.25393645325883307

internal_count=5045923 2698915 2347008 1723483 1283460

shrinkage=0.1

// 特征重要性

feature importances:

Column_197=2 // 特征197,重要性排最高,重要性值为2,表示在所有树中有两次作为中间节点的分裂特征

Column_381=2 // 所有树中有两次作为中间节点的分裂特征

Column_11=1 // 所有树中有一次作为中间节点的分裂特征

Column_63=1

Column_145=1

Column_150=1

Column_161=1

Column_198=1

// 重要性值是统计特征在所有树中作为中间节点(分裂节点)的分裂特征且分裂增益为正的次数,可以理解成是对分裂作用越大的特征越重要

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle Sql 胡乱记

/Oracle查询优化改写/ --1、coalesce 返回多个值中,第一个不为空的值 select coalesce(, , s) from dual; --2、order by -----dbms_random.value 生产随机数,利用随机数对查询结果进行随机排序 select * from emp order by dbms_random.value; --指定查询结果中的一…

leetcode752. 打开转盘锁(bfs)

你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位…

Object Pools 喷泉效果实现

摘录自:http://catlikecoding.com/unity/tutorials/object-pools/ 工程 效果图 工程里面有响应的注释 源码我就不单独放出来了

从头学习计算机网络_我如何通过从头开始构建网络爬虫来自动进行求职

从头学习计算机网络它是如何开始的故事 (The story of how it began) It was midnight on a Friday, my friends were out having a good time, and yet I was nailed to my computer screen typing away.星期五是午夜,我的朋友们出去玩得很开心,但我被钉…

php 动态生成文件,php动态程序生成静态文件示例

html>{title}{content}tmp.html是模板文件/** 说明:生成静态页面,tmp.html是模板文件,news.html是要生成的文件,**///1,先读取模板中内容$strfile_get_contents(tmp.html);//2,将指定的内容进行替换$title网站标题;…

网管的自我修养-网络系统

目录: 序章人际关系工具准备电脑维护网络系统弱电系统外设相关信息系统服务器相关机房建设其他网管网管,会管网络才算名副其实。管理一般中小企业的网络,具备CCNA及以上水平就可以了。 一、规划 首先要根据公司的人员工位数量、打印机传真等设…

thinkphp日志泄漏漏洞_ThinkPHP框架被爆任意代码执行漏洞

昨日ThinkPHP框架被爆出了一个php代码任意执行漏洞,黑客只需提交一段特殊的URL就可以在网站上执行恶意代码。ThinkPHP作为国内使用比较广泛的老牌PHP MVC框架,有不少创业公司或者项目都用了这个框架。不过大多数开发者和使用者并没有注意到本次漏洞的危害…

leetcode 113. 路径总和 II(Path Sum II)

目录 题目描述:示例:解法:题目描述: 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum 22&#x…

VMware下配置固定ip,于本机进行通信。

虚拟机装好后,会生成虚拟的网络信息。点开VMware下虚拟网络编辑器。选择net模式的记录会发现设定好的网关及dns。 我们只需要在虚拟机上配好对于的ip 输入 dns 和网关即可转载于:https://blog.51cto.com/thlovesky/1967929

leetcode417. 太平洋大西洋水流问题(bfs)

给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以…

为什么测试喜欢ie_为什么我现在喜欢测试,以及为什么您也应该如此。

为什么测试喜欢ieby Evelyn Chan通过伊芙琳陈 为什么我现在喜欢测试,以及为什么您也应该如此。 (Why I now appreciate testing, and why you should, too.) There’s a common misconception that writing tests slows down development speed. While the benefit…

java制作五子棋的论文,基于java的五子棋的设计与实现.docx

摘要:随着社会的不断发展,我们的科技也不断的进步,现在我们的计算机也与我们的生活息息相关,这个时候 Internet能够让我们快速的知道自己想了解的知识。根据计算机的发展过程我们发现如今计算机应用的现状还有现在的发展趋势&…

tomcat 控制台乱码 windows下

tomcat启动时控制台乱码。但是看日志又是正常编码,只是控制台是乱码。 找到 config/logging.properties java.util.logging.ConsoleHandler.encoding UTF-8 改成 java.util.logging.ConsoleHandler.encoding GBK! 转载于:https://www.cnblogs.com/wangge01/p/10786101.html…

python获取重定向url_python中检测url重定向到的地址的例子

2016年最长的假期也过了,这周连上7天班,之前还觉得挺恐怖,没想到这周真是要忙死的节凑,还真没觉得多漫长,一晃明天就周五了,干运维的就是突发的事情多,冷不丁的不知道哪里就冒出个问题&#xff…

本地模式运行spark streaming程序(win7安装nc命令通信)

2019独角兽企业重金招聘Python工程师标准>>> 首先在win7上安装nc命令 下载nc程序包,放在c盘目录下,cmd打开命令行,进入nc目录,执行:nc -l -L -p 8888开始监控。再打开一个命令行窗口进入nc目录,…

leetcode343. 整数拆分(dp)

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 class Solution {public int integerBreak(int n) {int[] dpnew int[n1];dp[1]1;for(int…

java验证码画布类型,【Java工具类】使用Kaptcha生成验证码写回页面中

1. 导入依赖导入kaptcha依赖:com.github.pengglekaptcha2.3.22. 编写配置类:Configurationpublic class KaptchaConfig {Beanpublic Producer kaptchaProducer() {Properties properties new Properties();properties.setProperty("kaptcha.image.width","100&…

如何用js获取浏览器URL中查询字符串的参数

首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主机名和当前的URL的端口号。本博客首页返回www.cnblogs.com hostname:设置或返回当前URL的主机名。本博客首页返…

测试无服务器应用程序的最佳方法

Serverless is more than a cloud computing execution model. It changes the way we plan, build, and deploy apps. But it also changes the way we test our apps.无服务器不仅仅是云计算执行模型。 它改变了我们计划,构建和部署应用程序的方式。 但这也改变了…

nginx反向代理打印日志_nginx启用TCP反向代理日志配置

Nginx使用TCP反向代理日志配置不同于http修改nginx配置文档/usr/local/nginx/conf/nginx.conf 设置日志格式stream {log_format proxy ‘$remote_addr [$time_local] ‘‘$protocol $status $bytes_sent $bytes_received ‘‘$session_time "$upstream_addr" ‘‘&qu…