从决策树、GBDT到XGBoost和LightGBM总结

一、决策树

决策树的构建还是基于我们传统的数据结构与算法的基础上面延伸而来的,下面的思维导图简单的总结了一下决策树的部分知识:

决策树的知识要点

这部分的知识,在李航的统计学习方法上面总结的非常好。

二、集成学习

集成学习的思路是通过合并多个模型来提升机器学习性能。一般就是分为三类

方式 训练方式 基分类器之间关系 模型代表 作用
Boosting 串行 有依赖关系 Adaboost 减少偏差
Bagging 可以并行 无强依赖关系 随机森林 减少方差
Stacking 提升预测结果

下面是针对串行和并行的一个解释和区别。他们本质的区别就是是利用了基础模型之间的依赖关系还是利用了基础模型的独立性。

  • 串行集成方法,这种方法串行地生成基础模型(如AdaBoost)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能。
  • 并行集成方法,这种方法并行地生成基础模型(如Random Forest)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差。
2.1、Bagging(装袋)

Bagging是bootstrap aggregating的简写。先说一下bootstrap,bootstrap也称为自助法,它是一种有放回的抽样方法,目的为了得到统计量的分布以及置信区间。具体步骤如下
1)、采用重抽样方法(有放回抽样)从原始样本中抽取一定数量的样本
2)、根据抽出的样本计算想要得到的统计量T
3)、重复上述N次(一般大于1000),得到N个统计量T
4)、根据这N个统计量,即可计算出统计量的置信区间
在Bagging方法中,利用bootstrap方法从整体数据集中采取有放回抽样得到N个子数据集,在每个子数据集上学习出一个模型,最后的预测结果利用N个子模型的输出得到,具体地操作方式:分类问题采用N个模型预测投票的方式,回归问题采用N个模型预测平均的方式。
针对方差和偏差的分析如下:
1、在bias层面上:
由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance,本质上各个子模型虽然近似,但是并不是独立的,所以有了下面的公式:
E[\frac{\sum X_i}{n}]=E[X_i]

从这里,我们就呢能看出bagging后的bias和单个子模型的接近,一般来说不能显著降低bias。
2、在variance层面上思考
1)、在各个子模型是相互独立的情况下,这个时候,是可以显著的降低variance的。
Var(\frac{\sum X_i}{n})=\frac{Var(X_i)}{n}
2)、要是各个子模型完全相同,这个情况下面的话,就不会降低variance了。
Var(\frac{\sum X_i}{n})=Var(X_i)
bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。为了进一步降低variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。
进一步用公式进行说明,假设我们有n个随机变量,方差为σ^2,两两变量之间的相关性为ρ,
Var(\frac{\sum X_i}{n})=\rho*\sigma^2+(1-\rho)*\sigma^2/n

那么bagging降低就是第二项的值,二随机森林降低的就是两厢的值。

2.2、 Boosting

提升方法(Boosting)是一种可以用来减小监督学习中偏差的机器学习算法。主要也是学习一系列弱分类器,并将其组合为一个强分类器。在提升算法里面,有非常经典的算法比如Adaboost,梯度提升树算法里面有我们最为常用的XGBoost、LightGBM、CATBoost。这里不对XGBoost之类的算法进行严格的推荐,好的文章,我会放到后面的参考文献里面,这里就是将一些重要的部门给说明了。
Boosting这种从优化的角度来说,还是采用了前向分步算法这种贪心算法的思路去最小化损失函数。损失函数求解参数如下:
\hat{\Theta} _{m} = arg \min_{\Theta _{m}} \sum_{i=0}^{N}L(y_{i},f_{m-1}(x_{i})+T(x_{i};\Theta _{m}))

(1)提升树方法
对于回归问题来说,我们就是需要去拟合一下当前的一个参数,具体的公式:
L(y_{i},f_{m-1}(x_{i})+T(x_{i};\Theta _{m})) = [y_{i}-f_{m-1}(x_{i})+T(x_{i};\Theta _{m}))]^{2}
具体的残差如下
r_{mi} = y_{i} - f_{m-1}(x_{i})
(2)梯度提升树
提升树方法里面的损失函数是平方损失函数或者指数损失函数的时候,虽然每一步的优化是非常简单的,但是实际上来说每一步的优化都是非常不容易的。梯度提升树的方式就利用了最速下降法的近似方法,利用了损失函数的负梯度在当前模型的值来作为提升树算法中的残差的近似值。
-[\frac {\partial L(y,f(x_{i}))}{\partial f(x_{i})}]_{f(x_{})=f_{m-1}(x)}
在决策树中,每个被放入模型的任意样本 最终一个都会落到一个叶子节点上。而对于回归树,每个叶子节点上 的值是这个叶子节点上所有样本的均值。在GBDT中,每个样本的预测结果可以表示为所有树上结果的一个加权的求和:
\hat{y}_{i} = \sum_{k}^{K}\gamma _{k}h_{k}(x_{i})
这里
(3)XGBoost
XGBoost的推导过程中,主要是利用到了泰勒展开到了二阶导数的位置。这里XGBoost的推导过程还是有长,建议大家看看原来的论文吧。这里主要是说明一下XGBoost里面存在的很多特点:
1、XGBoost背后也是CART树作为基学习期,这个就意味着XGBoost中生成的树都是二叉树。
2、XGBoost作为了GBDT的一个改进,在对每个样本进行预测的时候,每个叶子节点上会有一个预测的分数,也就是叶子权重。这个叶子权重就是所有在这个叶子节点上的样本在这一棵树上的回归取值。
\hat{y}_{i} = \sum_{k}^{K}f_{k}(x_{i})
3、XGBoost的目标函数=传统损失函数 + 模型复杂度,所以从这个角度,来看问题的话,目标函数已经考虑到了模型的复杂度,需要防止过拟合的出现。

这里提下XGBoost里面的一些参数

参数 集成算法 弱评估器 其他过程
n_estimators y
learning_rate y
silent y
subsample y
objective y
boosterth y
gamma y
min_child_weight y
max_delta_step y
colsample_bytree y
colsample_bylevel y
reg_alpha y
reg_lambda y
n_thread y
n_jobs y
scale_pos_weight y
abse_score y
seed y
random_state y
missing y
importance_type y
2.3、Stacking

Stacking是通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。基础模型利用整个训练集做训练,元模型将基础模型的特征作为特征进行训练。

三、XGBoost、LightGBMt总结和比较

LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。

3.1、XGBoost和LightGBM对比

在XGBoost的基础上面,LightGBM做出了一下的几个优化方式:

  • 基于Histogram的决策树算法
  • 带深度限制的Leaf-wise的叶子生长策略
  • 直方图做差加速直接
  • 支持类别特征(Categorical Feature)
  • Cache命中率优化
  • 基于直方图的稀疏特征优化多线程优化。
    这里的详细的几个说明,请见https://zhuanlan.zhihu.com/p/73045333
3.2、XGBoost和LightGBM的参数对比
参数 XGBoost LightGBM
正则化 L1/L2 L1/L2
列采样 yes yes
Exact Gradient yes yes
近似算法 yes no
稀疏数据 yes yes
分布式并行 yes yes
缓存 yes no
out of core yes no
加权数据 yes yes
dropout no yes
bagging yes yes
最大深度控制
GPU支持 no yes
用途 回归、分类、rank 回归、分类、lambdrank
网络通信 point-to-point collective-communication
树增长方式 level-wise leaf-wise
基于算法 pre-sorted histgram
CategoricalFeatures 无优化 优化
Continued train with inputGBDT model no yes
Continued train with inputl no yes
early stopping training and predctionl no yes

思考题

参考资料

1、https://item.jd.com/46963766055.html
2、https://blog.statsbot.co/ensemble-learning-d1dcd548e936
3、https://zhuanlan.zhihu.com/p/27689464
4、https://www.zhihu.com/question/41354392/answer/98658997
5、https://zhuanlan.zhihu.com/p/73045333

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

推荐阅读更多精彩内容