LightGBM 原理

我们在 Boosting Trees 中介绍了 Gradient Boosting Decision Tree (GBDT) 的原理。Light GBM 是 GBDT 的一个衍生方法。相比其他的衍生方法(如 XGBoost),它最明显的优势就是训练速度快,这也是它被命名为 "light" 的原因。它在保持训练精度的前提下,将传统 GBDT 的训练速度提高了 20 倍。

1. 论文要点

LightGBM 的目的是缩短训练时间,而训练时间主要取决于样本数量和特征维度。

它使用了三种重要的优化:

  1. (非原创)在训练树的时候,使用直方图算法来寻找最佳划分节点
  2. (原创)使用基于梯度的单边采样(GOSS)降低样本数量
  3. (原创)使用互斥特征捆绑 (EFB)降低特征维度

1.1 直方图算法

在 GBDT 的训练中,每次迭代,我们都会拟合负梯度来生成一个决策树,这也是 GBDT 训练中最耗时的部分。其中,计算量最大的部分就是寻找最佳划分节点。

最简单直接的方法就是预排序法。即,先将所有样本以某个特征为比较对象排序,再依次遍历寻找最优划分点。这种虽然能找到最优点, 但是缺点很明显:

  1. 效率低下,时间复杂度是 O(\#data \times \#feature)
  2. 对噪声敏感

LightGBM 选择了直方图法。即,先将数据划分到多个 bin 中,用 bin 的值覆盖原始值进行训练。它的优势是:

  1. 将时间复杂度降低到了 O(\#bin \times \#feature)。由于 bin 的数量肯定远小于样本的数量,因此优化很明显
  2. 不需要对样本数据进行排序
  3. 增强了对数据噪声的鲁棒性

当然,它也有缺点,但是都可以接受:

  1. 找到的划分点不一定是最优的
  2. 由于相似的数据被划分到了一个 bin 中,忽略了一些细节特征
  3. bin 的数量选择过少可能导致欠拟合

直方图算法并不是 LightGBM 的原创:

Scikit-learn和gbm in R演变算法使用了pre-sorted algorithm算法,pGBRT算法是使用了histogram-based algorithm,而XGBoost两者都支持

直方图算法

1.2 基于梯度的单边采样

基于梯度的单边采样(Gradient-based One Side Sample, GOSS)是 LightGBM 论文中提出的一大创新点,用于减少训练样本,从而提高效率。

在 AdaBoost 中(见我之前的文章 ESL 10.1 Boosting Methods),每个样本都被赋予了权重,因此可以简单地丢弃掉权重小的样本。然而,GBDT 中的样本并没有权重这一概念。因此,文中提出了利用梯度来筛选样本的思路。如果一个样本的梯度较小,说明它已经是充分训练过的了,可以丢弃。

但是,这个方法的问题在于丢弃样本会改变数据的分布,影响模型精度。为了避免这个问题,LightGBM 保留所有梯度较大的样本,同时,对梯度较小的样本进行随机采样,因此称为“单边采样”。

GOSS 算法

其中输入:

  • a 是“较大梯度样本”的比例,top a 的样本都被全部选取
  • b 是“较小梯度样本”采样后的比例(相对于所有样本)

因此必然有 a + b < 1,且 \text{fact} = (1-a) / b > 1

核心思想是:

  1. 将样本梯度(残差)由高到低排序
  2. 选取前 a * 100 \% 的样本为集合 A
  3. 从后 (1-a) * 100 \% 的样本中选取 b * 100\% 的样本为集合 B
  4. 将被选取的样本(A + B)用于训练
  5. 在更新模型时,需要对集合 B 进行补偿,乘以 (1-a)/b

1.3 互斥特征捆绑

实际应用中的特征之间有时是存在互斥关系的,即,他们不会同时有值。我们可以将这一类特征“捆绑”成一个特征。这样我们可以把时间复杂度由 O(\#data \times \#feature) 降低到 O(\#data \times \#bundles)。为了能捆绑更多的特征,LightGBM 还引入了一个”冲突率“\gamma,即两个特征同时不为 0 的比例。我们通过调节 \gamma 来使部分几乎互斥的特征也可以捆绑成一个。

那么我们就需要处理两个问题:

  1. 如何找到互斥特征
  2. 如何捆绑

1.3.1 选取互斥特征

寻找互斥特征的问题本质上是一个图着色问题。假设把每个特征看作图的一个顶点,若两个特征互斥,那他们之间没有路径。这样就可以构造一个无向图。图着色问题就是使图的相邻顶点颜色不同,即非互斥的特征不在同一个 bundle 里。

具体来说,算法为:

  1. 构造一个有权重的无向图,以特征为顶点,每条边的权重是特征之间的冲突率 \gamma
  2. 将特征按他们的度(degree,即边的数量)降序排列
  3. 检查每个特征,若 \gamma 小于阈值,则将其加入现有的 bundle,否则创建一个新的 bundle。

时间复杂度为 O(\# feature^2),而且只用运行一次,完全可以接受。

图着色贪婪算法

1.3.2 捆绑互斥特征

我们在 1.3.1 中已经将特征组合成了多个 bundle,现在需要考虑如何将同一个 bundle 内的特征在不丢失信息的情况下转为一个特征。

一个简单直接的方法就是附加一个偏移量。例如,我们已知 A 特征取值范围是 [0, 10),B 特征取值范围是 [0, 20)。那么我们可以构建一个合并的特征,取值范围是 [0, 30),对于所有的 B 特征附加一个偏移量 10。这样就将 B 特征从 [0,20) 映射到了 [10, 30)。这个合并的特征将替代 A 和 B 两个特征进行训练。

特征捆绑算法

假设互斥特征空间 F 中有 n 个特征 f。由于我们采用的是 bin,不同特征 f 可能有不同数量的 bin。他们捆绑过后的合并特征 bin 的个数应该等于所有特征 bin 的个数之和。

对于每个样本,假设它原先属于第 j 个特征的第 i 个 bin,则融合后它应该属于第\sum_{k=0}^{j-1} \# bin_k + i 个 bin。即附加前 j-1 个特征的 bin 数量之和的偏移。

2. 实例说明

计划用这个比赛的数据 Optiver Realized Volatility Prediction,在另一篇更新。

(已更新,见 LightGBM 实战:波动率预测(1)

Reference

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

推荐阅读更多精彩内容