GBDT算法梳理

前向分步算法

考虑加法模型

Alt
其中,b(x,γm)为基函数,γm为基函数的参数,βm为基函数的系数。在给定训练数据及损失函数L(y,f(x))的条件下,学习加法模型f(x)成为经验风险极小化即损失函数极小化问题:
Alt
通常这是一个复杂的优化问题。前向分步算法求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:
Alt为什么说每一步只需优化上述损失函数呢,这里我谈下自己的认识,将损失函数拆成如下式子
Alt
这里,以Adaboost为例,假设损失函数为指数函数,则上式可以写成
Alt

前向分步算法过程如下:
输入:训练数据集T={(x1,y1),…(xN,yN)};损失函数L(y,f(x));基函数集{b(x;γ)}
输出:加法模型f(x)
Alt

负梯度拟合

提升树利用加法模型和前向分步算法实现优化的过程。当损失函数是平方损失函数和指数损失函数时,每一步的优化比较简单,但对于一般损失函数,就不那么容易了,可以梯度提升就派上用场了,梯度提升利用最速下降法,其关键是利用损失函数的负梯度在当前模型的值
在这里插入图片描述
作为回归问题提升树算法中的残差的近似值,来拟合一个回归树。
算法过程如下:
在这里插入图片描述在这里插入图片描述

损失函数

对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种:
1.如果是指数损失函数,则损失函数表达式为
Alt
2. 如果是对数损失函数,分为二元分类和多元分类两种,
对于二元GBDT,如果用类似于逻辑回归的对数似然损失函数,则损失函数为:
L(y,f(x))=log(1+exp(−yf(x)))
对于多元分类,假设类别数为K,则此时我们的对数似然损失函数为:
Alt
对于回归算法,
1.平方损失函数
Alt
2.绝对损失函数
Alt
3.Huber损失,它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。损失函数如下:
Alt

回归

参看负梯度部分

二分类、多分类

二分类和多分类参考
https://www.cnblogs.com/pinard/p/6140514.html

正则化

GBDT的正则化主要有三种方式。

  1. 和Adaboost类似的正则化项,即步长(learning rate)。定义为ν,对于前面的弱学习器的迭代: fk(x)=fk−1(x)+hk(x)
    如果我们加上了正则化项,则有fk(x)=fk−1(x)+νhk(x),ν的取值范围为0<ν≤1。对于同样的训练集学习效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
  2. 通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点
  3. 对于弱学习器即CART回归树进行正则化剪枝

优缺点

GBDT主要的优点有:

  1. 可以灵活处理各种类型的数据,包括连续值和离散值。
  2. 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
  3. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。

GBDT的主要缺点有:

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

sklearn参数

参数分为两类,第一类是Boosting框架的重要参数,第二类是弱学习器即CART回归树的重要参数
Boosting框架的重要参数

1.n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数
2.learning_rate: 即每个弱学习器的权重缩减系数νν,也称作步长
3.subsample:子采样取值[0,1]
4.init: 即我们的初始化的时候的弱学习器
5.loss: 即我们GBDT算法中的损失函数。分类模型和回归模型的损失函数是不一样的
6.alpha:这个参数只有GradientBoostingRegressor有,当我们使用Huber损失"huber"和分位数损失“quantile”时,需要指定分位数的值。默认是0.9,如果噪音点较多,可以适当降低这个分位数的值

CART回归树的重要参数

1.划分时考虑的最大特征数max_features
2.决策树最大深度max_depth
3.内部节点再划分所需最小样本数min_samples_split
4. 叶子节点最少样本数min_samples_leaf
5.叶子节点最小的样本权重和min_weight_fraction_leaf
6.最大叶子节点数max_leaf_nodes
7.节点划分最小不纯度min_impurity_split

应用场景

GBDT几乎可用于所有回归问题(线性/非线性),亦可用于二分类问题和多分类问题

参考

[1]https://www.cnblogs.com/pinard/p/6140514.html
[2]https://www.cnblogs.com/DjangoBlog/p/6201663.html
[3]李航.[统计学习方法]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GBDT算法(Gradient Boosting Decision Tree)是一种基于决策树的集成学习算法,是由多棵决策树组成的强学习模型。该算法是通过迭代的方式,不断优化损失函数来生成决策树。该算法的结构比较简单,但是能够有效地处理特征稀疏、高维度数据,具有较高的精度和鲁棒性。 MATLAB作为一种强大的数学软件,提供了很多机器学习算法的实现。在MATLAB中使用GBDT算法,可以利用MATLAB的机器学习工具箱中提供的函数进行实现,也可以使用第三方工具箱进行实现。使用MATLAB实现GBDT算法能够简化算法实现的流程,提高开发效率;同时,MATLAB也提供了各种可视化工具,方便对算法结果进行分析和可视化。 当使用MATLAB实现GBDT算法时,需要注意以下几点: 1. 数据预处理。GBDT算法对数据的预处理要求较高,需要对数据进行归一化、异常值处理等,以达到更好的训练效果。 2. 调整模型参数。GBDT算法中有很多超参数,如树的深度、节点分裂的最小样本数等,需要通过实验调整,以得到最优的模型。 3. 训练过程的可视化。使用MATLAB可以方便地将模型训练过程可视化,以便对模型的训练效果进行实时监控和分析。 4. 结果分析和可视化。GBDT算法生成的模型是一组决策树,可以通过可视化的方式将不同决策树的划分边界可视化,以便更好地理解模型的逻辑。 总之,使用MATLAB实现GBDT算法可以快速构建出精度高、鲁棒性好的强学习模型,成为数据分析和机器学习领域的重要工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值