最后更新于
最后更新于
GBDT无论用于分类还是回归, 使用的都是CART回归树. 原因是GBDT每轮的训练是在上一轮训练模型的负梯度值基础之上训练的, 这就要求每轮迭代的时候, 弱分类器叶子节点的输出是要拟合负梯度的, 从而达到梯度下降的模拟. 如果直接输出类别, 类别的值没有意义.
而分类任务的真实值就是真实标签, 对于二分类任务, 就是, 而叶子节点的输出是没有限制的, 如果将这两个值通过损失函数联系在一起呢?
假设模型的输出为, 我们从概率的角度, 计算损失. 假设表示二分类结果为1的概率, 因此分类结果为0的概率为:
似然函数为, 即模型预测样本对应标签的概率, 对于二分类任务, 可以记为:
的取值为, 因此右侧的前面一项对应的是标签为1时的概率, 后面一项是标签为0是对应的概率.
对于二分类, 单个样本的二分类似然函数如上, 将所有样本的概率相乘, 就得到了整个训练集的似然函数:
并处理成对数似然函数:
对于多分类, 仍然是所有样本相乘, 得到整个训练集的似然函数:
并求对数, 再去相反数, 得到多分类情况下的对数损失函数:
依旧对损失函数求负梯度, 得到:
求得每个样本的负梯度后, 决策树拟合的叶子结点的输出值应为:
在使用对数损失函数的情况下, 解使用近似值:
因此完整的二分类GBDT算法过程如下:
对于输出, 使用softmax的逻辑, 每个类别的概率为:
多分类依然使用对数损失函数, 将所有类别的输出进行综合, 单个样本的损失函数为:
对应的负梯度为:
每类个GBDT对应一个二分类, 迭代生成的方法见上.
对于多分类任务, 假设有类, 使用表示当前样本的是不是属于第类, 假设真是样本是第类, 则似然函数为:
是模型给出的样本属于第类的概率. 在所有中, 只有, 其余全部为0.
使用最大似然估计方法优化参数, 想要最大化, 取的相反数, 记为, 最大化等价于最小化, 最大似然估计转为使用梯度下降法求解.
假设GBDT第步迭代之后, 生成棵树, 组成的学习器为, 将其带入单个样本的二分类对数损失函数的公式, 有:
初始化第一个弱学习器
依次建立棵回归树
对于每个样本, 计算当前的负梯度
使用负梯度拟合出一棵回归树, 共个叶子结点, 第个叶子节点记为, 每个叶子节点的输出为
更新强学习器
得到最终的学习器
GBDT中的多分类, 要对每个类别都单独地建模一个回归树, 给某一个分类输出具体值. 因此, 如果是分类任务, 最后迭代轮, 那么生成的树的总数量为. 同时, 每个分类的子树独立进行提升, 分类之间相互不影响, 最终得到个GBDT, 用来判断样本属于该类的概率, 即第类GBDT的输出为
这里样本的真实标签为第类, 只有这棵树上有负梯度. 考虑整个训练集, 第类对应的GBDT, 只使用标签为的样本进行更新.