lightgbm保存模型参数
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保存模型参数相关推荐
- 【待更新】GPU 保存模型参数,GPU 加载模型参数
GPU 保存模型参数,GPU 加载模型参数 保存 # 模型 device = torch.device('cuda') net = KGCN(num_user, num_entity, num_rel ...
- transformers库中使用DataParallel保存模型参数时遇到的问题记录
pytorch中使用DataParallel保存模型参数时遇到的问题记录 之前使用Transformers库中的Bert模型在自己的文本分类任务上使用Transformers库里的Trainer方式进 ...
- lightgbm 保存模型 过大_一个例子读懂LightGBM的模型文件
机器学习模型的可解释性是个让人头痛的问题.在使用LightGBM模型的肯定对生成的GBDT的结构是好奇的,我也好奇,所以就解析一个LightGBM的模型文件看看,通过这个解析,你可以看懂GBDT的结构 ...
- lightgbm 保存模型 过大_机器学习之12—Lightgbm
Lightgbm模型和GBDT以及XGboost一样,都是基于决策树的boosting集成模型: Lightgbm是一个快速高效.低内存占用.高准确度.支持并行和大规模数据处理的数据科学工具. 关于G ...
- 08_04基于手写数据集_mat保存模型参数
import os import numpy as np import tensorflow as tf from scipy import io from tensorflow.examples.t ...
- pytorch保存模型参数
1.代码 有保存路径 PATH='my_model.pth' torch.save(model.state_dict(),PATH) 新模型 new_model=model GPU上运行 new_mo ...
- tensorflow保存模型参数文件pb查看
查看pb文件的节点参数: with tf.Session() as sess: with open(model, 'rb') as model_file: graph_def = tf.GraphDe ...
- lightgbm 保存模型 过大_LightGBM如何进行在线学习工作中每天都会有数据更新以及增量数据,重新训练开销显然太大如何解决?...
lightGBM 和 xgboost 都是 gbdt 的实现,下面以 xgboost 为例说明算法原理和增量学习的利弊. 首先,xgboost 的标准实现是每一棵数的构建都对全量数据进行拟合,而增量学 ...
- Sklearn——保存模型参数(picklejoblib)
文章目录 1.前言 2.pickle 保存 3.pickle 保存 1.前言 我们训练好了一个Model 以后总需要保存和再次预测, 所以保存和读取我们的sklearn model也是同样重要的一步. ...
最新文章
- android 写字体投影,android之字体阴影效果
- fedora25安装virtualbox虚拟机
- 在MFC框架下使用osg报内存泄露的解决办法
- 清华大学镜像_国内开源镜像站信息盘点
- BootstrapTable冻结表头(一)
- ASP人事工资管理系统毕设
- 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义。
- 已安装jre1.7的情况下安装jdk1.6
- PHP实现当前文件夹下所有文件和文件夹的遍历
- 数学与计算机学院女生节标语,3.7女生节标语
- msvcr71.dll文件丢失——解决办法
- win10的计算机是哪个版本,Win10七大版本哪个好 Windows10系统各版本功能区别详解...
- U盘打不开的常见原因有哪些?
- VMWare 卡顿优化详解
- 谷歌浏览器崩溃解决办法
- Thinkpad T440p安装Linux的种种问题(by quqi99)
- 通过JAVA从高德地图URL连接获取json数据 解析并存入数据库的程序举例
- 微星 MPG B460I GAMING EDGE WIFI +i5-10400电脑 Hackintosh 黑苹果efi引导文件
- stormzhang的自我介绍
- 小心被钓鱼!移动物联卡怎么购买才安全!