风险建模的“利器”(5)梯度提升决策树

请大家关注我的公众号“数据风控和模型那些事”,如有错误或遗漏或约稿请留言给我。如需转载请注明原作者及出处,正文不建议修改,正文标题前的闲扯部分请随意。

风险模型浅谈(八)

风险建模的“利器”(5)

上期传送门

梯度提升决策树

啰嗦了前面两篇,终于可以进入正题了,梯度提升决策树(Gradient boosting decision tree,GBDT )应该是看起来“很高级的”机器学习算法里的入门产品了。

上一篇的时候忘记了讲一个点,对于集成学习中最常用的bagging 和boosting,他们其实起到的是不同的作用。Bagging使我们的预测、估计、推断更稳定,而boosting则是使我们的预测、估计、推断更准确。那有没有什么方法可以让算法又稳定又准确呢?那就是把他们两个组合起来哦。

梯度提升决策树(Gradient boosting decision tree,GBDT ),其实就是将决策树、bagging 和boosting组合在一起,实现了比较强大的功能。

决策树

决策树。GBDT中的决策树,是我们上文讲过的CART。也就是说,GBDT是同时支持分类树和回归树的,既可以预测离散型变量还可以是连续型变量。这里扯一些实现上的问题,不同的语言在实际的运用过程中对这个决策树输入的要求是不一样的。现在我们比较常用的就是Python和R,R语言对于连续或离散的Y使用了,同一个函数来实现,同时可以自动支持离散型的X,以及X的中缺失值(missing);而Python常用的SKlearn包中,将分类和回归拆成了两个函数,并且仅支持连续型的X,在使用前一定需要做前置的变量处理。我也不明白为什么会产生这样的差异,大家使用的时候要注意一下。同时,那些决策树中会涉及到的参数,在这里也同样适用。再复习一遍

Boosting

Boosting。GBDT是通过串行的方式来一个接一个的构造决策树,除第一个树以外,其他所有树在构造时使用的Y都是前面所有树之和的残差。根据我们想使用的树的个数,我们需要指定一个叫做n_estimator的参数,来限制整个序列中树的个数。

Bagging

Bagging。为了提高模型的稳定性,在生成每一棵树的时候,通常不会使用我们指定的全部train sample,而是从train sample不断的放回抽样,也就是我们说的Bagging,使用这个被抽出的样本进行训练。而未被抽中的那部分样本,我们把它叫做Out-of-Bagging sample,这个OOB样本,虽然在模型训练的时候被抛弃了,但并不是完全没有用,后面我们会讲到它的用处。为了指定每次抽样的比例,那么就需要指定这个叫bagging的参数。

Shinkage

在GBDT中还引入了Shrinkage的概念,

Shrinkage(缩减)的思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。

也就是我们在聚合树的时候不是简单的树相加,而是

这里的λ就是我们常说的shrinkage系数,在很多语言里,这个参数也会叫做learning_rate。要注意的是,通常情况下learning_rate都会取的非常小,一般都是0.0X及其以下量级的。

下面来上一张图,来汇总一下这个总流程

再剪短的总结一下,GBDT的本质就是不断的用决策树来学习残差,来提升单一决策树的性能,同时为了能够使整个树序列能够更稳定,具有更好的泛化能力,加入了bagging和shrinkage的机制,另外shrinkage的存在能够使得GBDT发现并找到更多的相关联的特征。Xgboost和lightGBM其实是在运算机制和算法上对GBDT做了一些改进。

给大家推荐一本书

本书可以做为一本参考书.

今天先到这里了,求转发,求点广告,求买书!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180626G073JD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券