GBDT(Gradient Boosted Decision Tree)

GBDT,全称Gradient Boosted Decision Tree,是一个由多棵决策树组成的模型,可用于分类,回归。

  • GBDT的由来
  • 通俗的理解方式
  • 数学表达
  • GBDT的优劣势

GBDT的由来

  • 决策树是常见的模型之一,它通过启发式搜索的方法来寻找划分特征的区间(划分特征向量的空间),划分的依据有好几种,比如信息增益,基尼指数之类的。
  • 决策树常见的一个问题就是过拟合(当然,这是所有模型都会出现的一个问题,这是在决策树中更为常见),对于目前的训练数据,到底树的深度要有多少呢,太少的话则数据的区分度不够,太大的话则会导致过拟合。由于这些参数没办法通过具体的数学理论求觉,所以,在对决策树调参的时候,经常会有这样的疑惑:树的深度到底多少比较好,叶子个数一共多少才适合。
  • 仅有一颗决策树做决策是否会显得太单薄,有没有办法通过多棵决策树来决策呢?类似地,有了随机森林这种依靠多棵决策树以及ada boosting这种糅合多种分类器的策略来提升分类以及回归的效果。
    这个情况下,GBDT产生了。

通俗的理解方式

  • 首先来了解下残差的定义,GBDT都是基于这个来建立的
  • ŷ =ypredict(x)y 是我们要预测的label值, predict(x) 是决策树的预测值,残差的定义是模型预测值和真实值的差值
  • 一次走一大步的优化效果不如很多次一小步的优化
  • GBDT(Gradient Boosted Decision Tree)_第1张图片
  • 现在我们优化到了蓝色的点,如果我们每次迭代的步子太大的话,会一下子进入另一个曲面,会导致模型无法收敛。总体而言,一次的大优化可能会带来模型无法收敛,但是小优化的话只是会导致收敛速度的下降。
  • GBDT的总体思想就是以上两者的结合,现在我的决策树预测不准,没关系。我先不处理,我把剩下的残差留给下一颗树来处理。这一点和adaboost不同,后者是说我这部分数据预测不准,我增加这部分数据的权重,下一个模型着重关注这部分数据。
  • 总的来说,GBDT把当前的决策树森林未解决的问题(残差)留给了下一颗树,以此迭代下去,最终整个模型的预测结果就是每棵决策树的总和。

数学表达

符号说明: F(i) 表示第i轮迭代之后得到的模型, f(i) 表示第i棵决策树的预测结果

  • 第一步:初始化。训练第一棵决策树,得到 f(1) ,由于现在的只有一棵树,所以 F(1)=f(1)
  • 第二步:残差计算。根据现在的模型 F(1) 我们可以计算当前的预测值 (F(x1),F(x2),F(x3),...F(xn)) ,根据上面的描述,我们来计算残差可以得到 (ŷ 1,ŷ 2,ŷ 3...ŷ n)
  • 第三步:增加新的决策树。现在第二棵决策树的拟合目标要做些改动了,不再是以拟合label为目标了,而是拟合之前遗留的残差为目标(特征集合还是不变的,只是拟合的目标改动了)。
  • 第四步:更新模型。现在我们得到了一棵新的决策树,这时候,我们上面提到的第二个思想来了:我们渐渐地靠近最优值,而不是一下子到达,所以我们这样子更新模型的: F(2)=F(1)+af(2),a(0,1)
  • 由第二步到第四步,我们完成了一次模型的迭代,之后的决策树也是以拟合之前的残差为目标添加进我们的模型的。

GBDT的优劣势

用了一段时间的GBDT,提出一些自己的见解,如有错误欢迎大家指出

  • 拟合能力强, 决策树的被动属性.
  • 泛化能力比一般的单棵决策树强, 通过一步步の修复残差的方式,更容易靠近最优的模型,通过合理控制树的总量,每棵树的深度,叶子总数,我们可以提升整个模型的泛华能力.
  • 可以预估模型训练的时间,由于基本上每棵树的训练时间都相差不大,可以通过一棵树的预测时间来预测剩下的训练时间。
  • 天然的模型调试能力。我们都知道,决策树split的时候是通过启发式的方法来选择其中一个特征进行切割的,比如在预测泰坦尼克号存活的时候,sex这个特征是很重要的,我们可以看到,在决策树进行split的时候,很多次都是用了sex这个特征作为split的标准的.相反的是,某些特征并不是那么重要,用了这个特征作为split的标准之后也不见得决策树的信息增益提升多少,则说明这个特征的重要性不是很高.
  • 可以并行训练(只是了解可以并行,具体的原理没有研究过)
  • 稀疏特征的处理能力不强,特征稀疏的情况下表现不如LR,因为一般每棵树的深度不会太深,特征稀疏的情况下训不出来这个特征的特性。

题外话,增加新的决策树的时候可以通过抽样特征集合以及数据集合来提升模型的泛化能力。

你可能感兴趣的:(机器学习)