【机器学习】 前向分布算法与GBDT算法梳理

1.前向分布算法

 基本思想:每次只学习一个基函数及系数,逐步逼近最优解。

如下所示:

其中  为基函数,\beta_m为基函数系数,\gamma _{m}为基函数的参数,这样只需要给定训练集D与损失函数L\left ( y,f\left ( x \right ) \right )

就可以利用最小化损失函数的原理进行学习,这样每次新一轮的学习只需要学习一个基函数的参数\gamma _{m}与对应的系数\beta_m

一个栗子:小明有100个苹果,小红第一次猜1*50个,剩余50个没猜对(残差),下一次小红猜有1*50 + 2*10个,残差30,如此反复下去,小红会逐渐向正确答案靠拢。其中第一二次中的1*50和2*10中的1,2就相当于系数\beta_m,50和10可以理解为\gamma _{m}

2.负梯度拟合与回归

顾名思义,就是在损失函数梯度的负方向上进行学习,至于是怎么在负梯度方向上学习的呢?下面搬运的是台大Hsuan-Tien Lin教授所讲的梯度提升视频里面的内容,我觉得相对容易理解一些。

这是上文所提到的最小化所示函数的过程。这里先看基函数h\left ( x_n\right )的学习过程(以平方损失函数为例):

这里的s\left ( n \right )看做一个项,根据泰勒展开可得:

这里的\sum_{n=1}^N err\left ( s_n,y_n \right )为常数,那么要求h\left ( x_n\right )的方向的话,只需要求上式子中\left ( s_n-y_n \right )负方向即可。到此,梯度方向的问题解决了,那么h\left ( x_n\right )要怎么求得呢?

我们知道,h\left ( x_n\right )的大小我们并不介意,因为后面我们要给它一个系数也就是上式中的\eta去调整它。所以,我们希望它小一点,但是方向是对的就可以。所以可以在优化过程中添加一个损失项\left ( h\left ( x_n\right )\right )^{2},那么上式就变成:

通过变换,可以发现我们最终只需要将h\left ( x_n\right )设置为一个对残差\left ( y_n-s_n \right )的回归即可。我理解为,这是一种正则化的方式。接下来需要调整\eta,确定一个合适的步长。在找到合适的g_t=h\left ( x_n\right ),上面式子可以转化成

可以看到,这个又是一个回归问题,只不过这个回归是单变量线性回归。以上就是负梯度拟合的过程

在GBDT中,这里设置一个回归树对残差进行拟合,然后对该树的各叶子节点区域分别给定一个最优的“局部残差”,继而更新强学习器。

3.正则化

GBDT正则化主要有三种方法。

(1)对样本设置采样比例,可以减小方差,但是采样率太小回增大bias

(2)添加learning rate

(3)对子树进行正则化剪枝

4.二分类、多分类问题

在参考【2】中有详细介绍,后期会继续学习、搬运过来

5.优缺点

优点:

  1. 精度高
  2. 能处理非线性数据
  3. 能处理多特征类型
  4. 适合低维稠密数据

缺点:

  1. 不好并行处理(因为上下两颗树有联系)
  2. 多分类的时候 复杂度很大

6.sklearn参数

              1) n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。

    2) learning_rate: 即每个弱学习器的权重缩减系数νν,也称作步长,默认是1。

    3) subsample: 即我们在原理篇的正则化章节讲到的子采样,取值为(0,1]。默认是1.0,即不使用子采样。

    4) init: 即我们的初始化的时候的弱学习器,一般用在我们对数据有先验知识,或者之前做过一些拟合的时候,如果没有的话就不用管这个参数了。

    5) loss: 即我们GBDT算法中的损失函数。分类模型和回归模型的损失函数是不一样的。

      对于分类模型,有对数似然损失函数"deviance"和指数损失函数"exponential"两者输入选择。默认是对数似然损失函数"deviance"。在原理篇中对这些分类损失函数有详细的介绍。一般来说,推荐使用默认的"deviance"。它对二元分离和多元分类各自都有比较好的优化。而指数损失函数等于把我们带到了Adaboost算法。

      对于回归模型,有均方差"ls", 绝对损失"lad", Huber损失"huber"和分位数损失“quantile”。默认是均方差"ls"。一般来说,如果数据的噪音点不多,用默认的均方差"ls"比较好。如果是噪音点较多,则推荐用抗噪音的损失函数"huber"。而如果我们需要对训练集进行分段预测的时候,则采用“quantile”。

    6) alpha:这个参数只有GradientBoostingRegressor有,当我们使用Huber损失"huber"和分位数损失“quantile”时,需要指定分位数的值。默认是0.9,如果噪音点较多,可以适当降低这个分位数的值。

调参实例:

https://github.com/zzzzzzhang/Datawhale_learn/blob/master/GBDT_cla.py

参考

【1】台大机器学习视频

【2】https://www.cnblogs.com/pinard/p/6140514.html

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值