GBDT算法步骤

xiaoxiao2021-02-28  59

说明:本篇文章是参看文章结尾相关博客写的读书笔记。

GBDT算法步骤:

k:表示待分类的类别,一共有K个类别。

m:表示迭代次数,一共迭代M次。

i:表示样本编号,一共有N个样本。

Fk0(x):表示样本x在第k个分类下的估值,是一个k维的向量。下表0表示第0次迭代。例如:假设输入数据x可能属于5个分类(分别为1,2,3,4,5),训练数据中,x属于类别3,则y = (0, 0, 1, 0, 0),假设模型估计得到的F(x) = (0, 0.3, 0.6, 0, 0)。也可以理解为F1(x) =0, F2(x) =0.3, F3(x)=0.6, F4(x) =0, F5(x) =0

 

1)初始化所有样本在K个类别上的估计值

说明Fk0(x) = 0, k=1,2,…K。 这其实是对样本x,在所有类别上的分别给出的估计,其实是一个for循环操作,这样写为了看起来简洁。如上所示,就是一个向量。

 

循环下面的学习更新过程M次;

2)对每个样本的函数估计值做logistic变换

pk(x):经过Logistic变换后的数据,将F(x)转换成0~1之间的概率值。第4行后面的k= 1, …K 表示计算for循环,分别计算p1(x),p2(x),p3(x),p4(x),p5(x)

Logistic变换后的数据p(x) = (0.16,0.21,0.29,0.16,0.16)

 

3)遍历所有样本的每个类别的概率,求每个样本在第k类上概率梯度(详细推导过程如下:)

我们通过常见的建立代价函数。代价函数是对数似然函数的形式为(算法步骤中省略了此部分):

通过求导的梯度下降法来学习:

这个其实就是对应算法步骤中的第6行是如何来的,算法步骤中直接给出了结论。有没有发现这里的求导得到的梯度形式居然是残差的形式:第i个样本属于第k个类别的残差 = 真实的概率 -估计的概率。

yik为输入的样本数据的实际类别,当一个样本x属于类别k时,yik = 1,否则yik = 0 y - p得到梯度g(-0.16, -0.21, 0.71, -0.16, -0.16)

假设gk为样本当某一维(某一个分类)上的梯度:

gk>0时,越大表示其在这一维上的概率p(x)越应该提高,比如说上面的第三维的概率为0.29,就应该提高,属于应该往正确的方向前进越小表示这个估计越准确

gk<0时,越小,负得越多表示在这一维上的概率应该降低,比如说第二维0.21就应该得到降低。属于应该朝着错误的反方向前进越大,负得越少表示这个估计越不错误

总的来说,对于一个样本,最理想的梯度是越接近0的梯度。所以,我们要能够让函数的估计值能够使得梯度往反方向移动(>0的维度上,往负方向移动,<0的维度上,往正方向移动)最终使得梯度尽量=0),并且该算法在会严重关注那些梯度比较大的样本,跟Boost的意思类似

这一步也是残差版本和梯度版本的联系。 这些的梯度也是下面我们构建回归树的学习方向。

5)沿着梯度方法学习到J个叶子结点的回归树

学习的伪代码:

上式是用N个样本来建立回归树

我们输入所有样本xi,i = 1~N以及每个样本在第k个类别上概率的残差作为更新方向,我们学习到有J个叶子的回归树。学习的基本过程和回归树类似:遍历样本的特征维数,选择一个特征作为分割点,需要满足最小均方差的原则,或者满足【左子树样本目标值(残差)和的平方均值+右子树样本目标值(残差)和的平方均值-父结点所有样本目标值(残差)和的平方均值】最大的准则,一旦学习到J个叶子结点,我们就停止学习。结果是该回归树中每个叶子上都会有许多个样本分布在上面。      记住:每个叶子上的样本,既有自己属于类别k的估计概率,也有真实概率,因为后面求增益需要用到它们。

6)求每个叶子结点的增益  每个结点的增益计算公式为:        注意后标,每个叶子结点j都有一个增益值(不是向量,是值)。计算的时候需要用到该叶子结点上的所有样本的梯度。      换句话说,每个叶子结点都可以计算出一个增益值,记住是值啊!

7)更新所有样本在第k类下的估计值 

上一步中求得的增益是基于梯度计算得到的,而且前面说到的梯度和残差有

一定的关联,我们可以利用这个增益更新样本的估计值。   

第m次迭代中的第k类下,所有样本的估计值F可以通过上次迭代m-1中,这些样本的估计值+增益向量求得。注意,这个增益向量需要把所有的J个叶子结点的增益值求和,然后和向量1相乘,而得。

也就是我们上面讲的,第k类的所有样本的估计值是一列:        也就是按列更新,前面有对类别数k的循环,所以每一类(每一列)的估计值都可以更新。一定记住是按列更新,每一类(每一列)都建立一个回归树来更新下去,最后原始的K类的N个样本的估计值矩阵都更新了一遍,带着这个新的估计值矩阵,我们进入下次m+1次的迭代学习。

如此,迭代学习M次之后,我们可以得到最终的所有样本在所有类别下的估计值矩阵,基于这个估计值矩阵,我们可以实现多类分类。

这样,基于梯度版本的GBDT算法的所有详细步骤我们都说完了。

 

参考资料:

http://blog.csdn.net/xiaokang06/article/details/76687517

http://blog.csdn.net/xiaokang06/article/details/76691444

http://blog.csdn.net/xiaokang06/article/details/76687564

https://cethik.vip/2016/09/21/machineCAST/

转载请注明原文地址: https://www.6miu.com/read-57063.html

最新回复(0)