20210205

params = {'task': 'train',  # 执行的任务类型'boosting_type': 'gbrt',  # 基学习器'objective': 'lambdarank',  # 排序任务(目标函数)'metric': 'ndcg',  # 度量的指标(评估函数)'max_position': 10,  # @NDCG 位置优化    这里是指对top10进行查看?'metric_freq': 1,  # 每隔多少次输出一次度量结果'train_metric': True,  # 训练时就输出度量结果'ndcg_at': [10],'max_bin': 255,  # 一个整数,表示最大的桶的数量。默认值为 255。lightgbm 会根据它来自动压缩内存。如max_bin=255 时,则lightgbm 将使用uint8 来表示特征的每一个值。'num_iterations': 200,  # 迭代次数,即生成的树的棵数'learning_rate': 0.01,  # 学习率'num_leaves': 31,  # 叶子数# 'max_depth':6,'tree_learner': 'serial',  # 用于并行学习,‘serial’: 单台机器的tree learner'min_data_in_leaf': 30,  # 一个叶子节点上包含的最少样本数量'verbose': 2  # 显示训练时的信息}

min_data_in_leaf:一个叶子上数据的最小数量. 可以用来处理过拟合
num_leaves:叶子节点数,数模型复杂度。 对于单棵树而言

两个的区别是 一个是叶子节点数 一个是每个叶子节点
最少的数据量

20201216
1.看叶子节点样本数量来调整
2.每个棵树所采用的特征数量
3.各个叶子节点的预测值? 有什么用

机器学习模型的可解释性是个让人头痛的问题。在使用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

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

lightgbm保存模型参数相关推荐

  1. 【待更新】GPU 保存模型参数,GPU 加载模型参数

    GPU 保存模型参数,GPU 加载模型参数 保存 # 模型 device = torch.device('cuda') net = KGCN(num_user, num_entity, num_rel ...

  2. transformers库中使用DataParallel保存模型参数时遇到的问题记录

    pytorch中使用DataParallel保存模型参数时遇到的问题记录 之前使用Transformers库中的Bert模型在自己的文本分类任务上使用Transformers库里的Trainer方式进 ...

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

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

  4. lightgbm 保存模型 过大_机器学习之12—Lightgbm

    Lightgbm模型和GBDT以及XGboost一样,都是基于决策树的boosting集成模型: Lightgbm是一个快速高效.低内存占用.高准确度.支持并行和大规模数据处理的数据科学工具. 关于G ...

  5. 08_04基于手写数据集_mat保存模型参数

    import os import numpy as np import tensorflow as tf from scipy import io from tensorflow.examples.t ...

  6. pytorch保存模型参数

    1.代码 有保存路径 PATH='my_model.pth' torch.save(model.state_dict(),PATH) 新模型 new_model=model GPU上运行 new_mo ...

  7. tensorflow保存模型参数文件pb查看

    查看pb文件的节点参数: with tf.Session() as sess: with open(model, 'rb') as model_file: graph_def = tf.GraphDe ...

  8. lightgbm 保存模型 过大_LightGBM如何进行在线学习工作中每天都会有数据更新以及增量数据,重新训练开销显然太大如何解决?...

    lightGBM 和 xgboost 都是 gbdt 的实现,下面以 xgboost 为例说明算法原理和增量学习的利弊. 首先,xgboost 的标准实现是每一棵数的构建都对全量数据进行拟合,而增量学 ...

  9. Sklearn——保存模型参数(picklejoblib)

    文章目录 1.前言 2.pickle 保存 3.pickle 保存 1.前言 我们训练好了一个Model 以后总需要保存和再次预测, 所以保存和读取我们的sklearn model也是同样重要的一步. ...

最新文章

  1. android 写字体投影,android之字体阴影效果
  2. fedora25安装virtualbox虚拟机
  3. 在MFC框架下使用osg报内存泄露的解决办法
  4. 清华大学镜像_国内开源镜像站信息盘点
  5. BootstrapTable冻结表头(一)
  6. ASP人事工资管理系统毕设
  7. 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义。
  8. 已安装jre1.7的情况下安装jdk1.6
  9. PHP实现当前文件夹下所有文件和文件夹的遍历
  10. 数学与计算机学院女生节标语,3.7女生节标语
  11. msvcr71.dll文件丢失——解决办法
  12. win10的计算机是哪个版本,Win10七大版本哪个好 Windows10系统各版本功能区别详解...
  13. U盘打不开的常见原因有哪些?
  14. VMWare 卡顿优化详解
  15. 谷歌浏览器崩溃解决办法
  16. Thinkpad T440p安装Linux的种种问题(by quqi99)
  17. 通过JAVA从高德地图URL连接获取json数据 解析并存入数据库的程序举例
  18. 微星 MPG B460I GAMING EDGE WIFI +i5-10400电脑 Hackintosh 黑苹果efi引导文件
  19. stormzhang的自我介绍
  20. 小心被钓鱼!移动物联卡怎么购买才安全!

热门文章

  1. Texlive安装与环境变量配置
  2. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...
  3. Mysql创建数据库用户
  4. dbeaver数据库工具
  5. Levenshtein distance 编辑距离算法
  6. 机器学习PAL基本概念
  7. SOLOv 2:实例分割(动态、更快、更强)
  8. Android中View如何刷新
  9. 在React Hook里使用history.push跳转
  10. linux创建一个交换分区,如何创建linux交换分区