LightGBM:Focus on Parameters | lgb提升树参数

lgb中bin的理解与调整

LightGBM相关了解

LightGBM好文分享

  • 基于预排序的算法
    针对每个特征,所有数据根据 在该特征下的特征值 进行排序; 计算所有可能的分割点带来的分割增益,确定分割点;分为左右子树。

  • 直方图算法
    针对每个特征(连续型数值),使用直方图将数据 在该特征下的特征值 离散为 k个bin,并转化为bin的label; 计算k个bin分别作为分割点带来的分割增益,确定分割点;分为左右子树,只要确定了左子树所有特征对应直方图,用父节点直方图相减,即可得到右节点直方图。

  • 带有深度限制的按叶子生长 (leaf-wise) 算法
    Level-wise的决策树生长策略属于不假思索思维,认为每层的每个节点都要分割。
    Leaf-wise则是一种更为高效的策略,每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。Leaf-wise的缺点是可能会长出比较深的决策树,产生过拟合。因此LightGBM在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。


    按层生长 (level-wise)

    按叶子生长 (leaf-wise)

核心参数

参数 默认值 类型 说明
config "" string 配置文件路径
task train enum options={ train, predict, convert_model }
application regression enum options={ regression, regression_l1,......,binary, multiclass,......}
boosting gbdt enum options={ gbdt, rf, dart, goss},关注下dartDropouts meet Multiple Additive Regression Trees
data "" string 训练数据
valid "" multi-string 验证/测试 数据,支持多验证数据集, 以" , "分割
num_iterations 100 int boosting 的迭代次数
learning_rate 0.1 double 学习率
num_leaves 31 int 一棵树上的叶子数
tree_learner serial enum options={ serial, feature, data, voting } 特征/数据/投票并行
num_threads OpenMP_default int LightGBM 的线程数
device cpu options={ cpu, gpu }

学习控制参数

参数 默认值 类型 说明
max_depth -1 int 树的深度
min_data_in_leaf 20 int 一个叶子上数据的最小数量. 可以用来处理过拟合
min_sum_hessian_in_leaf 1e-3 double 一个叶子上的最小 hessian 和
feature_fraction 1.0 double 随机选择部分特征
feature_fraction_seed 2 int 随机数种子
bagging_fraction 1.0 double 在不进行重采样的情况下随机选择部分数据
bagging_freq 0 int bagging 的频率, 0 意味着禁用 bagging. k 意味着每 k 次迭代执行bagging
bagging_seed 3 int bagging 随机数种子
early_stopping_round 0 int 如果一个验证集的度量在 early_stopping_round 循环中没有提升, 将停止训练
lambda_l1 0 double L1 正则
lambda_l2 0 double L2 正则
min_split_gain 0 double 执行切分的最小增益

IO参数

参数 默认值 类型 说明
max_bin 255 int 连续值离散化时bin的最大个数
min_data_in_bin 3 int 单个bin含有的最小数, 使用此方法避免 one-data-one-bin(可能会过度学习)
output_model LightGBM_model.txt string 输出的模型文件名
input_model "" string 输入的模型文件名
output_result LightGBM_predict_result.txt string prediction 任务的预测结果文件名
model_format text multi-enum 可选项={ text, proto }, 保存和加载模型的格式
verbosity 1 int <0 = 致命的, =0 = 错误 (警告), >0 = 信息
header false bool 如果输入数据有标识头, 则在此处设置 true
save_binary false bool 如果设置为 true LightGBM 则将数据集(包括验证数据)保存到二进制文件中。 可以加快数据加载速度。
label "" string /int 指定标签列; 用于索引的数字, e.g. label=0 意味着 column_0 是标签列
weight "" string /int 列的指定; 用于索引的数字, e.g. weight=0 表示 column_0 是权重点
ignore_column "" string 在训练中指定一些忽略的列
categorical_feature "" string 指定分类特征; 用数字做索引, e.g. categorical_feature=0,1,2 意味着 column_0, column_1 和 column_2 是分类特征
bin_construct_sample_cnt 200000 int 用来构建直方图的数据的数量

目标参数:主要关于loss的参数

参数 默认值 类型 说明
sigmoid 1.0 double sigmoid 函数的参数. 将用于 binary 分类 和 lambdarank
gaussian_eta 1.0 double 控制高斯函数的宽度的参数. 将用于 regression_l1 和 huber losses
is_unbalance false bool 用于 binary 分类 ,如果培训数据不平衡 设置为 true
num_class 1 int 只用于 multiclass 分类

度量参数

参数 默认值 类型 说明
metric {l2 for regression}, {binary_logloss for binary classification}, … 适配各不同任务不同评价指标

GPU参数

参数 默认值 类型 说明
gpu_device_id -1 int
gpu_use_dp false bool 设置为 true 在GPU上使用双精度GPU (默认使用单精度)

参数优化

针对 Leaf-wise (最佳优先) 树的参数优化

参数 说明
num_leaves 理论上, 借鉴 depth-wise 树, 我们可以设置 num_leaves = 2^(max_depth),但是最好让其小于 2^(max_depth)。比如num_leaves 可以设置为 127 时, 127有可能会导致过拟合, 而将其设置为 70 或 80 时可能会得到比 depth-wise 树更高的准确率
min_data_in_leaf 这是处理 leaf-wise 树的过拟合问题中一个非常重要的参数. 它的值取决于训练数据的样本个树和 num_leaves. 将其设置的较大可以避免生成一个过深的树, 但有可能导致欠拟合. 实际应用中, 对于大数据集, 设置其为几百或几千就足够了.
max_depth 也可以利用 max_depth 来显式地限制树的深度.

针对更快的训练速度

说明
通过设置 bagging_fractionbagging_freq 参数来使用 bagging 方法
通过设置 feature_fraction 参数来使用特征的子抽样
使用较小的 max_bin
使用 save_binary 在未来的学习过程对数据加载进行加速
使用并行学习, 可参考 并行学习指南

针对更好的准确率

说明
使用较大的 max_bin (学习速度可能变慢)
使用较小的 learning_rate 和较大的 num_iterations
使用较大的 num_leaves (可能导致过拟合)
使用更大的训练数据
尝试 dart

处理过拟合

说明
使用较小的 max_bin
使用较小的 num_leaves
使用 min_data_in_leafmin_sum_hessian_in_leaf
通过设置 bagging_fractionbagging_freq 来使用 bagging
通过设置feature_fraction 来使用特征子抽样
使用更大的训练数据
使用 lambda_l1, lambda_l2min_gain_to_split 来使用正则
尝试 max_depth 来避免生成过深的树
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,941评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,397评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,345评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,851评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,868评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,688评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,414评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,319评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,775评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,945评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,096评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,789评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,437评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,993评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,107评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,308评论 3 372
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,037评论 2 355

推荐阅读更多精彩内容