GBDT (Gradient Boosting Decision Tree) ,梯度提升树,是属于集成算法中boosting类的一种算法。GBDT中又分梯度提升回归树和梯度提升分类树。本文就讨论一下梯度提升分类树(只讨论二分类)的原理以及公式推导。
梯度提升分类树的原理和思想和梯度提升回归树本质上是没有区别的。他们的模型都是决策回归树(DecisionTreeRegressor),可能有人有疑问,为什么梯度提升分类树的模型也是决策回归树,那是怎么实现分类的呢?其实梯度提升分类树和逻辑斯蒂回归类似。
逻辑斯蒂回归的预测模型:sigmoid函数 + 线性回归
梯度提升分类树的预测模型: sigmoid函数 + 决策回归树
梯度提升分类树的预测概率为 ,其中表示决策回归树。
但是由于梯度提升分类树的样本输出不是连续的而是离散的,因此无法直接拟合类别输出的误差。这时候需要构建交叉熵损失函数(也叫对数损失函数)。那么什么是交叉熵损失函数呢?
关于交叉熵,大家看看这篇文章,相信对交叉熵一定有一个深刻的理解。总之,交叉熵就是用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。
交叉熵的公式为: ,其中表示真实分布,表示非真实分布。
一个样本的交叉熵损失函数可以表示成:,其中
其中就是真实概率,相当于真实分布,是算法预测的概率,相当于非真实分布。
将代入到函数中化简:
损失函数推导出来了,接下来我们看看梯度和损失函数的更新方式是怎样的。
上文中提到是决策回归树,当算法还没有第一轮学习时,算法会给一个初始值,我们记为,此时是最小的。因为的更新规则是,表示相对上一次的值,表示第m轮学习的预测结果(稍后我们会进行推导)。表示学习率,学习率是我们给定算法的参数。
上式右边可以看做一个常数,因此有
两边求倒数,
这样,算法的初始值就求出来了。上文说到表示第m轮学习的预测结果,那我们把第m轮的学习中,树的第j个叶子节点的结果记为,其推导过程如下:
注:这里可写可不写,因为是个常数,不管它给多少,最后都会消掉。表示第m轮样本数据。
要求解的
利用泰勒展开公式,就可以将上式展开两级,得到:
要求最小,求导,令导数为零,即
上文我们对的一阶导数和二阶导数已经做了推导,
其中,,我们令,把它叫做负梯度,因此有
进行变换,解出
接下来我们就通过一个算例来看看由算法计算的结果和我们推导的公式计算的结果是不是一样的(基于sklearn)。同时,加深一下对算法原理的理解。
- 导包、准备数据
1 2 3 4 5 6 7 8 9 10 0 0 0 1 1 0 0 0 1 1
讯享网
- 声明算法,进行训练和预测
讯享网
- 绘制第1,2,3,100棵树的图形
上面是算法计算的结果,接下来我们调用上面推导的公式计算一下。
- 初始化算法,计算初始值,根据公式,分子上是类别1,分母上是类别0;1有4个,0有6个;
计算出初始值为-0.
- 计算负梯度,根据公式
讯享网
得到结果为 array([-0.4, -0.4, -0.4, 0.6, 0.6, -0.4, -0.4, -0.4, 0.6, 0.6])
- 拟合第一棵树
结果为:
因此从第8棵树开始切分。
- 计算左右两侧叶子的预测值,根据公式
讯享网
运行结果为:
预测结果和算法计算的结果完全一样!
- 拟合第二棵树
运行结果为:
和算法预测的结果也是一样!以此类推,我们可以计算到第100棵树,会发现每棵树的预测结果和算法计算的都一样,因此我们的公式推导是正确的!
我们也可以写一个for循环,计算出1~100棵树的预测结果。
讯享网
运行得到一下结果:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/178637.html