结构化数据模型之GBDT vs NN(上)

导语 不同于深度学习在CV\NLP领域(处理非结构化数据的问题)上的绝对统治力,在结构化数据建模问题中,基于Boosting思想的GBDT树模型仿佛依然是最简单有效的模型。本文将从解决结构化数据问题出发,介绍GBDT树模型以及近年出现的深度模型,探寻是否深度学习已经可以替代GBDT?

本文分为上下两篇,上篇主要介绍一些基本概念和GBDT树模型,下篇则介绍针对结构化数据的深度模型。

什么是结构化数据?

简单来说,结构化数据也被称为表格型数据,即可以用二维表结构来逻辑表达实现的数据。而不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括文本、图像、音频、视频等。

不同于深度学习在CV\NLP领域(处理非结构化数据的问题)上的绝对统治力,在结构化数据的问题中,基于Boosting思想的GBDT树模型仿佛依然是最简单有效的模型。

什么是Boosting?

Boosting算法原理

Bagging算法原理

Boosting和Bagging都属于集成学习,集成学习的中心思想可以概括为:三个臭皮匠顶个诸葛亮,即组合多个弱分类器,形成一个强分类器。不同于Bagging中各弱分类器的并行式投票机制,Boosting采用串行的训练方式,各弱分类器之间有依赖。该机制决定了Boosting善于降低偏差,而Bagging善于降低方差。

决策树与这两种思想结合,得到的大家熟知的算法:

  1. Bagging + 决策树 = 随机森林

  2. AdaBoost + 决策树 = 提升树

  3. Gradient Boosting + 决策树 = GBDT

梯度上升决策树(Gradient Boosting Decision Tree, 以下简称GBDT)是Boosting的重要实现,其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,将训练好的弱分类器以累加的形式结合到现有模型中。

XGBoost、LightGBM、CatBoost是目前最主流的三个GBDT的实现。下文将介绍三种算法的主要区别,针对比较有意思的点,展开讲讲。

XGBoost

XGBoost是陈天奇等人于2014年开发的一个开源机器学习项目,高效地实现了GBDT算法,并进行了算法和工程上的优化,比较重要的点:

  • 为防止过拟合,传统GBDT在决策树构建完后进行剪枝, 而XGBoost在优化阶段就加入了正则项。

  • 为防止过拟合,XGBoost采用了与随机森林相似的策略,支持对数据进行采样,包括对样本、特征的采样。

  • 传统GBDT没有设计如何处理缺失值,而XGBoost通过学习出缺失值的分裂方向,实现了缺失值的自动处理。

  • 传统GBDT的训练过程是串行的,而XGBoost则在训练阶段实现了并行化,主要通过两点实现:1. 特征值预排序,训练前预先排序可复用的特征值 2. 弃用基于贪心枚举生成候选点的方法,采样可并行的近似直方图算法,高效生成候选的分割点。

LightGBM

LightGBM于2016年由微软提出,在面对海量数据,LightGBM表现出更快的速度,更低的内存消耗,其主要优化点如下。

单边梯度抽样算法(Gradient-based One-Side Sampling, GOSS)

GBDT的梯度大小可以反应样本的权重,梯度越小说明模型拟合的越好,GOSS利用这一信息对样本进行抽样,减少了大量梯度小的样本,更关注梯度高的样本,极大的减少了计算量。

值得关注的是,GOSS并非完全丢弃梯度小的样本,而用采样的方法。主要因为前者会改变样本的分布,降低模型的准确度。

GOSS具体做法是:对样本梯度的绝对值进行逆排序,对高梯度的样本保留前a∗100%,对梯度小的样本进行采样 b∗100%,并对这些样本的梯度乘以一个常数因子(1−a)/b ,其中a、b为采样率。将样本分布尽可能拉回来。

直方图算法

LightGBM将连续特征离散化为k个离散特征,同时构造一个宽度为 k 的直方图用于统计信息(含有 k个bin)。LightGBM无需遍历数据,只需要遍历 k 个 bin即可找到最佳分裂点。

很明显,这种做法会带来分割点不精确的问题,那么直方图算法会影响LightGBM的精度吗?作者在不同的数据集上的实验结果表明,离散化的分割点对最终的精度影响并不是很大,甚至有时候会更好一点。

究其原因:决策树本来就是弱模型,分割点是不是精确并不太重要;较粗的分割点也有正则化的效果,可以防止过拟合;即使单棵树的训练误差比精确分割的算法稍大,但在梯度提升的框架下没有太大的影响。

互斥特征捆绑算法(Exclusive Feature Bundling, EFB)

高维度的数据往往是稀疏的,这种稀疏性启发了作者设计一种无损的方法来减少特征的维度。通常被捆绑的特征都是互斥的(即特征不会同时为非零值,像one-hot),这样两个特征捆绑起来才不会丢失信息。如果两个特征并不是完全互斥(部分情况下两个特征都是非零值),则用一个指标对特征不互斥程度进行衡量,称之为冲突比率,当这个值较小时,也可以选择把不完全互斥的两个特征捆绑,而不影响最后的精度。LightGBM通过该方法,降低了参与计算的特征维度。

基于最大深度的 Leaf-wise的垂直生长算法

Level-wise基于层进行生长,直到达到停止条件。过一次数据可以同时分裂同一层的叶子,容易进行并行优化,也好控制模型复杂度,不容易过拟合。但其不加区分的对待同一层的叶子,带来了资源浪费,因为很多叶子的分裂增益较低,没必要进行搜索和分裂。

Leaf-wise每次从当前所有叶子节点中,找到分裂增益最大的一个叶子节点,然后分裂,如此循环。同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。Leaf-wise的缺点是可能会长出比较深的决策树,产生过拟合,因此LightGBM在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。

类别特征最优分割

两种编码

机器学习中,处理类别型特征的方法一般是采用one-hot编码,如上图左图所示。作者提出在树模型中这不一定是一种好的方式,原因在于:

1.one-hot编码可能导致样本切分不平衡的问题,其相当于one-vs-many的划分方式,如果类别较多时,这种划分会使分到叶子节点的样本非常少,导致切分产生的增益小。

2.one-hot编码将数据切分到许多个零碎的小空间,而决策树学习时利用的是统计信息,在这些数据量小的空间上,统计信息不准确,学习会变差。

LightGBM采用 many-vs-many 的切分方式将类别特征分为两个子集,实现类别特征的最优切分,如上图右图所示。

LightGBM类别特征切割方法

LightGBM的切分算法如上图所示,在枚举分割点之前,先把直方图按照每个类别对应的label均值进行排序;然后按照排序的结果依次枚举最优分割点。当然这个方法很容易过拟合,所以LightGBM还增加了很多对于这个方法的约束和正则化。

CatBoost

CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,正如其名字那样,CatBoost主要在类别特征的处理上做了很多改进。

基于有序目标变量统计(Ordered Target Statistics)的类别特征处理

机器学习中处理类别型特征的方法一般是进行 one-hot编码。这种做法的缺点很明显:造成特征维度爆炸和特征的稀疏。另外一种思路则是将类别分组成有限个的群体再进行one-hot编码,其中最常用的就是是根据目标变量统计(Target Statistics,以下简称TS)进行分组,用于估算每个类别的目标变量的期望值。

可以通过对TS数值型特征的阈值设置,基于对数损失、基尼系数或者均方差,得到一个对于训练集而言最优的一分为二的类别,即对于不同的损失函数,使用TS数据能获得最优解。

TS中最简单的做法是用类别特征对应的样本的标签平均值来替换。这种方法被称为 Greedy Target-based Statistics , 简称 Greedy TS,用公式来表达就是:

Greedy TS

该方法有一个明显的缺陷:通常特征比标签包含更多的信息,如果强行用标签的平均值来表示特征的话,当训练数据集和测试数据集数据结构和分布不一样的时候,会出现条件偏移问题。

改进方法则是添加先验分布项,这样可以减少噪声和低频数据对于数据分布的影响。用公式表达就是:

改进下的Greedy TS

其中p是添加的先验项,a通常是大于0的权重系数。对于回归问题,先验项可取数据集label的均值;对于二分类,先验项是正例的先验概率。

这种数值编码方式虽然好,但是会造成训练集中label的泄露,从而导致过拟合。因为对于某个样本来说,其数值编码计算过程中已经把这个样本的 label值纳入了计算过程中。

为了让模型正确地评估某个特征的真实有效性和重要程度,可以拿出一部分数据来计算这个特征编码,用另外一部分数据来训练。但这样会造成可用数据的减少。

Ordered Target Statistics

CatBoost设计了所谓的Ordered Target Statistics 编码,来缓解这个问题:先将样本随机打乱,然后每个样本只使用它排序在它前面的样本来计算其类别特征的数值编码。从而防止了label的泄露,并且能够较为合理地评估这个特征的有效性。

不过这种方式会造成排在前面的样本的类别特征的数值编码估计不是很准,为了减少这个影响,CatBoost会设计多个样本随机排列(默认4个),在每次建树前从中随机取一个排列。

解决预测偏移问题的Ordered Boosting

Boosting算法的本质,决定了其存在过拟合的风险。LightGBM在训练下一颗树的时候,需要计算前面所有树构成的加法模型在所有样本上的损失的一阶梯度和二阶梯度,然后用这些梯度来决定当前树的结构和叶子节点取值。

但是这种方法是有问题的:前面的树都是在这些样本上训练的,现在又在这些样本上估计模型损失的梯度,应该换一些新的样本才更合理。

作者故伎重演,先将样本随机打乱,然后每个样本只使用排序在它前面的样本来训练模型。用该样本在该模型下损失的一阶、二阶梯度构建一棵新树的结构,最终整个模型是使用全体样本进行计算的。

这就是Ordered Boosting的主要思想,其可以有效地减少梯度估计的误差,缓解预测偏移,但是会增加较多的计算量,影响训练速度。

基于贪心策略的特征交叉方法

前面提到,CatBoost的Ordered TS会将类别特征转化成为数值特征。而数值特征是无法进行特征交叉的,为了更好进行类别特征的特征交叉,CatBoost在进行Ordered TS时,自动生成交叉特征。

如果让所有特征直接进行交叉,2阶交叉、3阶交叉......越往上,复杂度呈指数增长,这种做法显然是不实际的。

CatBoost使用一种贪心的策略来进行特征交叉。生成树的第一次分裂,不使用任何交叉特征。在后面的分裂中,CatBoost会使用生成树所用到的全部原始特征和交叉特征跟数据集中的全部类别特征进行交叉,并将新的组合类别型特征动态地转换为数值型特征。

另外,CatBoost还选用了对称二叉树作为弱分类器,以防止过拟合,提高了预测速度,算法自身支持GPU并行化运行等功能等。

总结

三款模型横向对比

上文简单介绍了三款主流GBDT算法的特性,在笔者看来,XGBoost是将GBDT模型大规模落地应用的开山之作;LightGBM则是在保证了性能的前提下,极大提高了海量数据下的模型效率,减少了资源消耗;CatBoost的主要贡献则是更好地解决了树模型中的类别特征编码问题,针对类别特征较多、较高阶的数据时,选用CatBoost往往可获得较好的性能表现。

本文下篇将介绍近年出现的用于解决结构化数据问题的深度模型。

参考文献

[1] Chen T, Guestrin C. Xgboost: A scalable tree boosting system[C]//Proceedings of the 22nd acm sigkdd international conference on knowledge discovery and data mining. 2016: 785-794.

[2] Ke G, Meng Q, Finley T, et al. Lightgbm: A highly efficient gradient boosting decision tree[J]. Advances in neural information processing systems, 2017, 30.

[3] Prokhorenkova L, Gusev G, Vorobev A, et al. CatBoost: unbiased boosting with categorical features[J]. Advances in neural information processing systems, 2018, 31.

[4] https://zhuanlan.zhihu.com/p/504646498

[5] https://zhuanlan.zhihu.com/p/564458860

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

推荐阅读更多精彩内容