首页 > 编程知识 正文

关于gbdt算法,下列说法正确的是,gbdt为什么用负梯度代替残差

时间:2023-05-05 08:13:31 阅读:135194 作者:108

前向分布算法

负梯度拟合在前一节介绍了GBDT的基本思路,但没有解决损失函数拟合方法的问题。 针对这一问题,hldpdFreidman提出用损失函数的负梯度拟合本轮损失的近似值,并进一步拟合CART回归树。 第t回合第I个样本的丢失函数的负梯度表示为

(xi,rti ) ) I=1,2, m ) xi,rti ) ) I=1,2, m )来拟合CART回归树,得到第t个回归树,其对应的叶节点区域Rtj,

对于各个叶节点中的样本,求出损失函数最小,也就是最适合叶节点的输出值ctjctj,结果如下。

这样,本回合的决策树拟合函数如下。

因此,本回合最终得到的强力学习器的公式如下。

通过用损失函数的负梯度拟合,找到了一种常见的损失误差拟合方法。 这样,无轮是分类问题还是回归问题,可以通过对其损失函数负梯度的拟合,用GBDT解决分类回归问题。 区别只是损失函数的不同引起的负斜率的不同。

损失函数

在GBDT算法中,损失函数的选择很重要。 损失函数根据问题的不同有不同的选择。

1.对于分类算法,其损失函数一般由对数损失函数和指数损失函数两种。

(1)指数损失函数表达式:

)2)对数损失函数分为二类和多类。

2.对于回归算法,常用损失函数有如下4种。

(1)平方损失函数

(2)绝对损失函数

相应的负梯度误差为:

(3)Huber损失是均方误差和绝对损耗的折中产物,对远离中心的异常点采用绝对损耗误差,对靠近中心的点采用均方损耗。 此边界通常用分数测量。 损失函数如下。

对应的负梯度误差如下:

(4)分位数损失。这对应于分位数回归的损失函数,表达式为:

这里是分位数,所以必须在恢复前指定。 对应的负梯度误差如下:

Huber损失和分位损失主要用于稳健回归,即减少异常点对损失函数的影响。

http://www.Sina.com/http://www.Sina.com /

输入:训练数据集T={}, 损失函数l(y,f ) x );

输出:回归树

(1)初始化

回归问题

)2) m=1,2,对于m

(a )对于I=1,2, n,进行计算

http://www.Sina.com/: http://www.Sina.com /

(b )拟合一个回归树,得到第m棵树的叶节点区域。 j=1,2,j

(c )对j=1,2,j,计算

梯度提升算法(回归问题):

(d )更新

)3)得到回归树

注:估计使损失函数极小化的常数值,它是只有一个根结点的树这里观察GBDT分类算法,GBDT的分类算法在思想上与GBDT的回归算法没有区别,但由于样本输出不是连续的值而是离散的类别,所以从输出类别直接输出

要解决这个问题,主要有两种方法。 一个是使用指数损失函数,此时GBDT退化为Adaboost算法。 另一种方法是使用逻辑回归这样的对数似然函数。 也就是说,使用类别的预测概率值和真实概率值之差来拟合损失。 这里只讨论基于对数似然函数的GBDT分类。 关于对数似然损失函数,存在二元分类和多元分类的区别。

对于二分类GBDT,如果使用逻辑回归这样的对数似然损失函数,则损失函数为:

那个

中  {-1,1}。此时的负梯度误差为:

对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为

由于上式比较难优化,我们一般使用近似值代替

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

2.多分类GBDT算法

多分类GBDT比二分类GBDT复杂些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。假设类别数为K,则此时我们的对数似然损失函数为:

其中如果样本输出类别为k,则  =1.第k类的概率  的表达式为:

集合上两式,我们可以计算出第t轮的第i个样本对应类别l的负梯度误差为:

观察上式可以看出,其实这里的误差就是样本i对应类别l的真实概率和t-1轮预测概率的差值。

对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为:

由于上式比较难优化,我们一般使用近似值代替

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

  正则化 对GBDT进行正则化来防止过拟合,主要有三种形式。1.给每棵数的输出结果乘上一个步长a(learning rate)

对于前面的弱学习器的迭代:

加上正则化项,则有

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

2.第二种正则化的方式就是通过子采样比例(subsample)。取值范围为(0,1]。

GBDT这里的做法是在每一轮建树时,样本是从原始训练集中采用无放回随机抽样的方式产生,与随机森立的有放回抽样产生采样集的方式不同。若取值为1,则采用全部样本进行训练,若取值小于1,则不选取全部样本进行训练。选择小于1的比例可以减少方差,防止过拟合,但可能会增加样本拟合的偏差。取值要适中,推荐[0.5,0.8]

3.第三种是对弱学习器即CART回归树进行正则化剪枝。(如控制树的最大深度、节点的最少样本数、最大叶子节点数、节点分支的最小样本数等)   GBDT优缺点 1.GBDT优点 可以灵活处理各种类型的数据,包括连续值和离散值。在相对较少的调参时间情况下,预测的准确率也比较高,相对SVM而言。在使用一些健壮的损失函数,对异常值得鲁棒性非常强。比如Huber损失函数和Quantile损失函数。2.GBDT缺点 由于弱学习器之间存在较强依赖关系,难以并行训练。可以通过自采样的SGBT来达到部分并行。sklearn参数

在scikit-learning中,GradientBoostingClassifier对应GBDT的分类算法,GradientBoostingRegressor对应GBDT的回归算法。

具体算法参数情况如下:

GradientBoostingRegressor(loss=’ls’, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=’friedman_mse’, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort=’auto’, validation_fraction=0.1, n_iter_no_change=None, tol=0.0001)

参数说明:

n_estimators:弱学习器的最大迭代次数,也就是最大弱学习器的个数。learning_rate:步长,即每个学习器的权重缩减系数a,属于GBDT正则化lypd手段之一。subsample:子采样,取值(0,1]。决定是否对原始数据集进行采样以及采样的比例,也是GBDT正则化手段之一。init:我们初始化的时候的弱学习器。若不设置,则使用默认的。loss:损失函数,可选{'ls'-平方损失函数,'lad'绝对损失函数-,'huber'-huber损失函数,'quantile'-分位数损失函数},默认'ls'。alpha:当我们在使用Huber损失"Huber"和分位数损失"quantile"时,需要指定相应的值。默认是0.9,若噪声点比较多,可适当降低这个分位数值。criterion:决策树节搜索最优分割点的准则,默认是"friedman_mse",可选"mse"-均方误差与'mae"-绝对误差。max_features:划分时考虑的最大特征数,就是特征抽样的意思,默认考虑全部特征。max_depth:树的最大深度。min_samples_split:内部节点再划分所需最小样本数。min_samples_leaf:叶子节点最少样本数。max_leaf_nodes:最大叶子节点数。min_impurity_split:节点划分最小不纯度。presort:是否预先对数据进行排序以加快最优分割点搜索的速度。默认是预先排序,若是稀疏数据,则不会预先排序,另外,稀疏数据不能设置为True。validationfraction:为提前停止而预留的验证数据比例。当n_iter_no_change设置时才能用。n_iter_no_change:当验证分数没有提高时,用于决定是否使用早期停止来终止训练。GBDT应用场景

GBDT几乎可以用于所有回归问题(线性/非线性),相对loigstic regression仅能用于线性回归,GBDT的适用面非常广。亦可用于分类问题。

 

参考资料:

梯度提升树(GBDT)原理--刘建平Pinard - 博客园
GBDT算法梳理-- End小fa--知乎专栏

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。