连载|GBDT如何进行回归和分类

简介: 连载|GBDT如何进行回归和分类

GBDT

在前几年的机器学习竞赛以及工作中,人们使用着各种传统算法进行调参取得性能的提升,突然有一天杀出了一种名为GBDT的算法,改变了当前的格局,该算法在不同的场景中总是能够产生很好的效果,本文就让我们来了解一下GBDT。


GBDT(Gradient Boost Decision Tree),中文名称可以直译为“梯度提升决策树”。要想弄明白GBDT具体是什么我们就要弄明白这里面的两个词语DT(Decision Tree)和GB(Gradient Boost)。


DT:CART回归树

这里需要注意的是我们使用的决策树是CART回归树,无论是我们要处理回归问题还是分类问题,我们都需要使用CART回归树,主要是因为我们的GBDT算法每次迭代要拟合的是梯度值,这是一个连续值,因此我们需要使用CART回归树。


对于回归树算法来说最重要的是寻找最佳的划分点,那么回归树中的可划分点包含了所有特征的所有可取的值。在分类树中最佳划分点的判别标准是熵或者基尼系数,都是用纯度来衡量的,但是在回归树中的样本标签是连续数值,所以再使用熵之类的指标不再合适,取而代之的是平方误差,它能很好的评判拟合程度。


关于CART回归树的生成方式具体可以参考我们之前的文章:


GB:梯度提升

我们本文中提到的GBDT其实是提升树(Boosting Tree)的一种改进算法,我们先来看一下BT是怎样进行工作的。


Boosting Tree的流程

image.png

举个例子来表示一下残差:


假设小明有100元,第一次我们用80元去拟合,此时的残差就是20元,第二次我们用10元去拟合剩下的残差(损失:即20元),此时的残差是10元,依次类推我们每一次都去拟合剩下的残差,对于提升树来说我们把每一次拟合的钱数加起来就是模型最终的输出结果了。


我们可以发现当我们使用损失函数为平方损失的提升树的时候,每一步的迭代过程是很简单的,但是对于其他的损失函数来说就不能很好的进行每一步的优化了,针对这一问题,Freidman提出了梯度提升(Gradient Boosting)算法,利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树。


负梯度的表达形式如下:

image.png

GBDT回归算法的流程

image.png

GBDT分类算法

从思想上看,GBDT分类算法和回归算法没有区别,但是对于分类来说我们的样本输出不是连续的值,而是离散的类别,这也导致我们无法直接从输出类别去拟合类别输出的误差。


解决这个问题的办法主要有两种,一种是利用指数损失函数,此时的GBDT也就退化成了Adaboost算法;另一种就是使用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失,下面就让我们看一下在对数似然损失函数下的二分类和多分类的GBDT算法。


GBDT二分类算法

我们使用类似于逻辑回归的对数似然函数时,损失函数为:

image.png

出了负梯度计算和叶子结点的最佳负梯度拟合的线性搜索,GBDT二元分类和GBDT回归算法过程相同。


GBDT多分类算法

image.png

除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,GBDT多分类和GBDT二分类以及GBDT回归算法过程相同。


GBDT的过拟合

为了防止过拟合问题的产生,我们也需要对GBDT采取一些措施,主要的方式有以下的三种:


剪枝

剪枝是树模型中常用的防止过拟合的方法,在GBDT中同样适用。


定义步长

我们把步长定义为v,对于前面的弱学习器的迭代:

image.png

如果我们加上了正则化项,则有:

image.png

v的取值范围为(0,1],对于同样的训练集学习效果,较小的v意味着我们需要更多的弱学习器的迭代次数,通常我们用步长和迭代最大次数一起来决定算法的拟合效果。


子采样比例


我们还可以通过子采样比例的方式来防止过拟合,取值为(0,1],这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。


使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。


GBDT的优缺点

优点

预测精度高;

适合低维数据;

能处理非线性数据;

可以灵活处理各种类型的数据,包括连续值和离散值;

在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的;

使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数;


缺点

由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行;

如果数据维度较高时会加大算法的计算复杂度。


相关文章
|
5月前
|
机器学习/深度学习 算法 前端开发
决策树与随机森林算法在分类问题中的应用
本文探讨了决策树和随机森林两种监督学习算法,它们在分类任务中表现出强大的解释性和预测能力。决策树通过特征测试进行分类,构建涉及特征选择、树生成和剪枝。随机森林是集成学习方法,通过构建多棵决策树并汇总预测结果,防止过拟合。文中提供了Python代码示例,展示如何使用sklearn构建和应用这些模型,并讨论了参数调优和模型评估方法,如交叉验证和混淆矩阵。最后,强调了在实际问题中灵活选择和调整模型参数的重要性。
131 4
|
6月前
|
机器学习/深度学习 算法 C++
选择适合的SVM模型进行分类任务
选择SVM模型时需考虑数据线性可分性、问题类型(二分类或多分类)、优化算法(凸优化优势)及性能指标(如准确率、召回率)。数据非线性可分时可使用核技巧。针对多分类,有OVO、OVA和DAG方法。同时,利用交叉验证评估模型泛化能力。
40 4
|
机器学习/深度学习 存储 算法
逻辑回归模型
逻辑回归模型
126 0
特征选择:回归,二分类,多分类特征选择有这么多差异需要注意
特征选择:回归,二分类,多分类特征选择有这么多差异需要注意
142 0
|
机器学习/深度学习 数据挖掘 Python
六、分类问题和逻辑回归
六、分类问题和逻辑回归
六、分类问题和逻辑回归
|
机器学习/深度学习 算法 Python
七、逻辑回归模型
七、逻辑回归模型
七、逻辑回归模型
|
机器学习/深度学习 算法 开发者
回归模型参数估计-5| 学习笔记
快速学习回归模型参数估计-5。
201 0
回归模型参数估计-5| 学习笔记
|
机器学习/深度学习 算法 开发者
回归模型参数估计-4| 学习笔记
快速学习回归模型参数估计-4。
145 0
回归模型参数估计-4| 学习笔记
|
机器学习/深度学习 算法 开发者
回归模型参数估计-3| 学习笔记
快速学习回归模型参数估计-3。
140 0
回归模型参数估计-3| 学习笔记
|
机器学习/深度学习 算法 开发者
回归模型的参数估计-2| 学习笔记
快速学习回归模型的参数估计-2。
145 0
回归模型的参数估计-2| 学习笔记