从0到1认识GBDT

背景音乐:Remedy - Adele

学习了两周GBDT,看了不少文章,也浅读了原论文,也拿一些数据集实战了几次。现在我把我的学习心得整理一下,欢迎随时交流。

本文适合入门,将从以下4个角度,来全面地认识GBDT:

  • What:什么是GBDT
  • Why:为什么要用GBDT
  • When:什么时候选择用GBDT
  • How:GBDT是如何工作的

最后,再总结一些使用GBDT的小tips(不定期更新)

1. What:什么是GBDT

GBDT(Gradient Boosting Decision Tree),顾名思义就是梯度提升决策树,是GBM(Gradient Boosting Machine,梯度提升机器)的一种具体实现。

GBDT = GB+DT

GB:Gradient Boosting,一种算法框架,用梯度计算拟合损失函数的提升过程。

  • G:Gradient 梯度,确切地说是Gradient Descent(梯度下降),实现层面上是用损失函数的负梯度来拟合本轮损失函数的近似值,进而拟合得到一个弱学习器。
  • B:Boosting 一种集成学习算法,通过迭代训练一系列弱学习器(每一次训练都是在前面已有模型的预测基础上进行),组合成一个强学习器,来提升回归或分类算法的精确度。

DT:Decision Tree,决策树,一种常用的用来做回归或分类的算法,可以理解成树状结构的if-else规则的集合。在这里就是上述的弱学习器了。

总结起来,所谓GBDT,就是通过迭代训练一系列决策树,其中每棵决策树拟合的是基于当前已训练好的决策树们所得到损失函数的负梯度值,然后用这些决策树来共同决策,得到最终的结果。

2. Why:为什么要用GBDT

有一个原理叫 No Free Lunch Theorems,它证明不对问题做任何假设和限定的情况下,不存在一个效果最优的算法。因此,我们采用一个算法,都是有前提的,基于这个算法相比于其他同类算法的优势所在。

那么GBDT的优势在哪里?我认为有两个方面:

  1. 特征组合和发现重要特征
    1)特征组合:
    原始特征经过GBDT转变成高维稀疏特征(GBDT的输出相当于对原始特征进行了特征组合,得到高阶特征或者说是非线性映射),然后将这些新特征作为FM(Factorization Machine)或LR(逻辑回归)的输入再次进行拟合。
    2)发现重要特征:
    由于决策树的生长过程就是不断地选择特征、分割特征,因此由大量决策树组成的GBDT具有先天的优势,可以很容易得到特征的重要度排序,且解释性很强。

业界比较出名的案例有:

  1. Facebook使用其来自动发现有效的特征、特征组合,来作为LR模型中的特征,以提高 CTR预估(Click-Through Rate Prediction)的准确性,详见Practical Lessons from Predicting Clicks on Ads at Facebook。
  2. GBDT在淘宝的搜索及预测业务上也发挥了重要作用。淘宝搜索/推荐系统背后深度强化学习与自适应在线学习的实践之路
  3. 美团也有相关的实践:即时配送的ETA问题之亿级样本特征构造实践
  1. 泛化能力强
    这里有篇知乎的文章很好地解释了这一点:为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?- 于菲的回答 - 知乎
    泛化误差可以分解为两部分,偏差(bias)和方差(variance)。
    1)为了保证低偏差bias,采用了Boosting,每一步我们都会在上一轮的基础上更加拟合原数据,可以保证低偏差;
    2)为了保证低方差,采用了简单的模型,如深度很浅的决策树。
    两者结合,就能基于泛化性能相当弱的学习器构建出泛华能力很强的集成模型。

3. When:什么时候选择用GBDT

GBDT是一种监督学习算法,主要有两种使用方法:

  1. 直接使用:这时候GBDT就是一种分类或回归的算法,如果不考虑实现层面,其实用起来和逻辑回归、SVM没有什么差别。比如点击率的预测、
  2. 间接使用:GBDT可以作为基学习器,由于构造高维稀疏特征,再作为其他算法的输入,具体案例在上面已经提到了。

4. How:GBDT的实现

需要掌握的知识有:决策树梯度提升调参
每一个知识点都很重要:往深了写可以写很多,往浅了写又感觉没切中要害。
这一部分写了好久还是写不好,索性我就贴一些觉得还不错的博客,抛砖引玉了:

————————基础—————————
分类树和回归树的区别
Bagging和Boosting 概念及区别
————————GBDT—————————
Boosting Decision Tree入门教程
GBDT学习笔记
Gradient Boosting wiki
梯度提升树(GBDT)原理小结
提升树GBDT详解
GBDT详解
————————拓展阅读—————————
greedy function a gradient boosting machine
GBM)调参方法详解
机器学习各种算法怎么调参? - 城东的回答 - 知乎
机器学习算法中GBDT与Adaboost的区别与联系是什么? - 知乎
LR,gbdt,libfm这三种模型分别适合处理什么类型的特征,为了取得较好效果他们对特征有何要求? - 知乎
sklearn中的模型评估

5. 使用GBDT的一些小Tips:

2017-12-2更新:

关于调参
step 1: learning rate(学习速率,又称步长);
step 2: n_estimators(迭代次数,又称决策数的数量);
step 3: 决策树的参数:
step 3.1: max_depth(数最大深度)和 num_samples_split(最小样本分割数);
step 3.2: min_samples_leaf(叶节点最小样本数);
step 3.3:max_features(建树所用的最大特征数);
step 3.4: subsample(建树所用的子样本比例);
step 4:再降低learning rate并相应地提高n_estimators;

你可能感兴趣的:(从0到1认识GBDT)