GBDT算法梳理

1、对数损失函数:

查阅了很多博客,都在说对数损失函数和交叉熵损失函数是等价的,具体是啥情况,先存疑??? 


          L(y,\hat{y})=-\frac{1}{N}\sum_{i=1}^{N}\sum_{j=1}^{M}y_{ij}ln(\hat{y}_{ij})
其中, M表示类别数,当M=2时,退化为逻辑回归的损失函数:  
L(y,\hat{y})=-\frac{1}{N}\sum_{i=1}^{N}(y_iln(\hat{y}_i)+(1-y_i)ln(1-\hat{y}_i))
二分类的对数损失的由来:是由最大似然估计推到而来的(参考网址:https://blog.csdn.net/JustKian/article/details/83117170,以逻辑回归为例)  

\hat{y} = \sigma (a)=\frac{1}{1+e^{-(\omega x+b)}}

关键在于模型中参数的估计,从而使得预测出来的值得误差最小,而且其可导,所以使用极大似然估计来得到参数的无偏估计,上式转换为统一的概率表达式为\hat{y}=p=(\sigma(a)^{y_i}(1-\sigma(a))^{1-y_i}),所以可以得到最大似然函数L(\theta )=\prod_{i=1}^{N}\hat{y}_i=\prod_{i=1}^{N}\sigma(a)^{y_i}(1-\sigma(a))^{1-y_i}(然后就是取对数求导,从而在极值点的参数使其最小)。取对数为lnL(\theta)=\sum_{i=1}^{N}[y_iln(\sigma(a)) + (1-y_i) ln(1-\sigma(a))]

又由于为了统一损失函数的概念(损失函数值最小的时候即为最佳方案),整个训练集的损失函数只是所有训练实例的平均值,于是最终的Log对数损失函数如下:

Loss=-\frac{1}{N}\sum_{i=1}^{N}[y_iln(\hat{y}_i) + (1-y_i)ln(1-\hat{y}_i)]


2、GBDT原理介绍 

接下来正式介绍GBDT模型:

介绍GBDT前,介意大家先去了解一下boost模型、AdaBoost模型,都是串行的加法模型,可参考李航的《统计学方法 第二版》的第八章。

注意事项:

①只能使用CART树,

GBDT的流程伪代码如下所示:

                                          

首先,要初始化F_0(x),表示第0棵树的预测值,这个主要取决于loss function的选择,可以分为一下几种(参考文章:https://zhuanlan.zhihu.com/p/92837676):

①损失函数为MSE时,F_0(x)=\bar{y}

②损失函数为MAE时,F_0(x)=median(x),即取中位数;

③损失函数为逻辑回归的对数损失时,F_0(x)=\frac{1}{2}\times ln(\frac{\sum y_i}{\sum(1-y_i)}),其中y_i取0或1;

其次,就是在第二步中,拟合第i棵树之前残差r_{m,i}的计算,不同的损失函数,求解出来的残差计算公式也不完全一致,大致以上述三种损失函数分别进行分析(参考文章:https://blog.csdn.net/qq_22238533/article/details/79185969):

①损失函数为MSE时,L(y_i,F(x_i))=\frac{1}{2}\times (y_i-F(x_i)^2),负梯度为-[\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)}]=(y_i-F(x_i)),所以当前模型的负梯度为r_{m,i}=y_i-F_{m-1}(x_i)

②损失函数为MAE时,L(y_i,F(x_i))=|y_i-F(x_i)|,负梯度为r_{m,i} = -[\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)}]_{F(x)=F_{m-1}(x_i)}=sign((y_i-F_{m-1}(x_i)))

③损失函数为逻辑回归的对数损失时,L(y_i,F(x_i))=-\frac{1}{N}[y_iln(\hat{y}_i) + (1-y_i)ln(1-\hat{y}_i)],其中\hat{y}_i=\frac{1}{1+e^{-F(x_i)}}(具体为什么是-F(x_i)没搞清楚,待定),其负梯度化简为r_{m,i} = -[\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)}]_{F(x)=F_{m-1}(x_i)}=y_i-\frac{1}{1+e^{-F_{m-1}(x_i)}}(化简方法就是将\hat{y}_i的计算公式带入损失函数中然后求导,化简就行,在整个过程中要把F(x_i)看作一个固定的参数),然后就不断拟合,训练出m棵树。

④这篇文章https://www.cnblogs.com/pinard/p/6140514.html的第五部分介绍了多种损失函数下所对应的负梯度的计算公式(下图为多分类的损失函数);

               

然后就接下来训练一颗具体的CART树;多次往复完成模型的训练。

案例:在参考文章2里面有相应的负梯度的计算案例;

第三步,根据算出来的负梯度,拟合一颗树T(x;\theta _m)(涉及到节点的划分,具体树的节点划分会在决策树中补充出来);

第四步,得到第t棵树所对应的预测值f_M(x)=\sum _{i=1}^{N}T(x;\theta_m)

案例分析:https://mp.weixin.qq.com/s/XP5z_BEeFr6oJp9VmVJRqQ,这篇文章的GBDT部分有详细的案例计算过程,可以参考学习

3、GBDT的优缺点及使用场景

优点:

  • 可以进行多维度的特征组合;

缺点:

  • 不能处理高纬度稀疏性数据 

4、调参

 GBDT主要分为两种参数(参考文章:https://www.cnblogs.com/nxf-rabbit75/p/10593524.html):

  • Tree-specific parameters:max_depth、max_features、min_samples_split、min_samples_leaf、min_leaf_nodes、loss function
  • Boosting specific paramters:n_estimators、learning_rate、subsamle

4、参考文章

1、XGBoost、GBDT超详细推导

2、GBDT原理与Sklearn源码分析-回归篇

3、梯度提升树(GBDT)原理小结

4、逻辑回归 + GBDT模型融合实战!

5、模型融合---GBDT调参总结

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值