[ML]gbdt

Posted mj-selina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ML]gbdt相关的知识,希望对你有一定的参考价值。

集成学习

集成学习分为bagging和boosting两类,典型的bagging有随机森林等,典型的boosting有gbdt和adaboost等(xgboost和lightGBM都是基于gbdt的高效实现,在我的另外两篇博文中都有介绍)。

bagging与boosting的区别如下所述:

共同点:由多个基分类器构成

不同点:①bagging的每个基分类器是过拟合的

②boosting的每个基分类器是欠拟合的

GBDT

GBDT(梯度提升树),使用多个基学习器,以boost为框架的加法模型(即基函数的线性组合)的集成学习。gbdt通常使用分类回归树作为基分类器。

1、gbdt的训练过程

技术图片

如上图所示是gbdt的训练过程,它有多轮迭代,每轮迭代会产生一个弱分类器,下一次迭代时会根据上一轮迭代计算出的残差进行学习并生成一个弱分类器。对分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练过程是通过降低偏差来不断提高最终分类器的精度。

技术图片

 

gbdt通过经验风险极小化来确定下一个弱分类器的参数。损失函数L的选择有多种,有平方损失函数,0-1损失函数,对数损失函数等等。通常我们使用平方损失函数,即常说的残差。

我们的目的是:①损失函数能够不断地减小,②是希望损失函数能够尽可能快的减小。

为了达到上述目的,我们选择让损失函数沿着梯度下降的方向减少(gbdt的核心),gbdt在每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度,这样就能尽快达到我们的目的。

2、gbdt如何选择特征

gbdt选择特征的过程就是CART树生成的过程。那么CART树是怎么生成的呢?假设我们有M个特征,首先我们选择一个特征j,作为二叉树的第一个节点,然后对特征值j选择一个切分点m,如果样本的特征j的值小于m则分为一类,否则分为另一类。这样便构造了CART树的第一个节点,其他节点的过程同上面一样。

但问题是我们应该如何在每轮迭代的时候,选择一个合适的特征j及特征j的切分点呢?

原始gbdt的方法非常暴力,就是遍历所有的特征,然后针对每一个特征遍历它所有可能的切分点,找到最优特征j的最佳切分点m。

而衡量找到的特征j和切分点m是否最优的方法,就是寻找损失函数最低时候的特征j和切分点c。

技术图片

 

3、gbdt如何构建特征?

利用gbdt去构造特征的组合。有的时候单个特征的效果不好,因此我们可以去生成特征的组合,以便能更好地达到目的。如下图所示,我们构建了两棵树,一棵树有5个节点(其中3个叶结点),一棵树有3个节点(其中2个叶结点),此时我们输入样本x,假设x落在了第一棵树的第二个叶子节点,第二棵树的第一个叶子节点,则我们可以根据叶子节点数量构建一个五维的特征向量[0,1,0,1,0]。

技术图片

 

3、gbdt如何用于分类?

依然使用CART回归树。gbdt用于回归的时候,每轮迭代都是在上一轮迭代的残差上进行训练的。这里的残差就是当前模型的负梯度值,由于回归时,弱分类器的输出结果相减是有意义的,残差相减也是有意义的。但是在用于分类的时候,是不能将弱分类器的输出结果直接进行相减的,比如说第一轮迭代时输出结果是A类,第二轮迭代的输出结果是B类,A类减B类是没有意义的,残差也不能进行相减,因此当将gbdt用于分类时,是不能直接进行残差相减的。

现举例说明gbdt用于分类的流程:假设样本X一共有K类,我们需要判定输入的样本属于哪一类。

①我们再训练的时候,针对样本X每个可能的类都训练一个分类回归树。假设K=3,样本x属于第二类,则对应的类别向量为[0,1,0]。

针对样本有三类的情况,每轮迭代我们都训练3棵CART树,第一棵树针对样本x的第一类,输入为(x,0),同理第二棵树的输入为(x,1),第三棵树的输入为(x,0)。

技术图片

 

参考资料

[1]https://www.cnblogs.com/bnuvincent/p/9693190.html

以上是关于[ML]gbdt的主要内容,如果未能解决你的问题,请参考以下文章

Splunk ML vs ML

- module1.ml

ML:MLOps系列讲解之《基于ML的软件的三个层次》解读

台湾ML笔记--1.1什么时候适合使用ML

ML Metadata:ML 的版本控制

ML Metadata:ML 的版本控制