GBDT算法

一、前向分布算法

        对于AdaBoost,可以将其视为一个将多个弱分类器线性组合后对数据进行预测的算法,该模型可以表示为:

        为基函数(即单个弱分类器),为基函数的参数(即弱分类器中特征的权重向量),为基函数的系数(即弱分类器在线性组合时的权重),就是基函数的线性组合。
        给定训练数据和损失函数的条件下,构建最优加法模型的问题等价于损失函数最小化:

        这个公式展现了AdaBoost算法的核心过程。

        我们可以利用前向分布算法来求解上一个式子的最优参数。前向分布算法的核心是从前向后,每一步计算一个基函数及其系数,逐步逼近优化目标函数式,就可以简化优化的复杂度。

        M-1个基函数的加法模型为:

        M个基函数的加法模型:

        由上面两式得:

        由这个公式和公式(2)得极小化损失函数:

        算法思路如下:

        1. 初始化

        2. 对m=1,2,...,M:

                a. 极小化损失函数: 得到参数

                b. 更新:

        3. 得到加法模型:

        这样,前向分布算法将同时求解从m=1到M所有参数的优化问题化简为逐次求解各个的优化问题。

二、负梯度拟合

        Freidman提出了梯度提升算法,算法的核心是利用损失函数的负梯度将当前模型的值作为回归问题提升树算法中的残差的近似值,去拟合一个回归树。
        GBDT的思想就是不断去拟合残差,使残差不断减少。用一个通俗的例子来讲假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。(参考集成学习之Boosting-gbdt)GBDT中每次迭代构造的Cart树都是用前一轮的残差拟合的。
        第t轮第i个样本的损失函数的负梯度表示为:

        利用我们可以拟合一颗CART回归树,得到了第t颗回归树,其对应的叶节点区域其中J为叶子节点个数。

        针对每一个叶子节点里的样本,我们求出使损失函数最小的 输出值:

        这样我们就得到了本轮的决策树拟合函数:

        从而本轮最终得到的强学习器的表达式如下:

        通过损失函数的负梯度来拟合,是一种通用的拟合损失误差的办法。无论是分类问题还是回归问题,我们都可以通过其损失函数的负梯度的拟合,从而用GBDT来解决我们的分类和回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。

三、损失函数

  1. 对于分类算法,其损失函数一般有两种:

    a. 指数损失函数:

    b. 对数损失函数:分为二元分类和多元分类两种。

    • 对于二元分类:
    • 对于多元分类:设类别数为k ,为样本数据估计值,当一个样本x属于k时,,否则
  2. 对于回归算法,常用损失函数有4种:

    a. 均方差:

    b. 绝对损失:

    c. Huber损失:它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量


d. 分位数损失:它对应的是分位数回归的损失函数。

四、回归

输入:训练样本
迭代次数(基学习器数量):T
损失函数:L
输出:强学习器H(x)

算法流程

  1. 初始化基学习器

  1. 迭代(t = 1,2,...,T)

    a. 计算第t次迭代的负梯度

    b. 利用拟合第t棵CART回归树,其对应的叶子节点区域为其中J为回归树的叶子节点的个数

    c. 对叶子节点区域,计算最佳拟合值

    d. 更新强学习器

  2. 得到最强学习器

五、分类

1. 二分类

        对于二元GBDT,其对数损失函数在之前已经给出:

        其中 此时的负梯度误差为:

        对于生成的决策树,各个叶子节点的最佳负梯度拟合值为:

        由于这个式子不易优化,一般使用近似值代替:

        除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,二分类GBDT与GBDT回归算法过程相同。

2. 多分类

        多分类GBDT的损失函数在之前也已经给出过:

        样本属于第k类的概率的表达式为:

        结合上面两个式子可以求出第t轮第i个样本对应类别 l 的负梯度误差为:

        可以看出,其实这里的误差就是样本i对应类别l的真实概率和t-1轮预测概率的差值。

        对于生成的决策树,各个叶子节点的最佳负梯度拟合值为:

        由于上式比较难优化,一般用近似值代替:

        除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多分类GBDT与二分类GBDT以及GBDT回归算法过程相同。

六、正则化

        为了防止GBDT过拟合,需要对其进行正则化。主要有三种方式:

        1. 给每棵树的输出结果乘上一个步长(学习率) a 。之前的弱学习器的迭代式改为:

        2. 通过子采样比例进行正则化。GBDT每一轮建树时样本从原始训练集中采用无放回随机抽样的方式产生。若采样比例取1,则采用全部样本进行训练。为了防止过拟合,同时又要防止样本拟合偏差较大(欠拟合),要合理取值,常用[0.5, 0.8]

        3. 对弱学习器(CART)进行正则化剪枝:控制树的最大深度、节点最少样本数、最大叶子节点数、节点分支的最小样本数等。

七、优缺点

优点

  1. 可以灵活处理各种类型的数据,包括连续值和离散值

  2. 相对于SVM来说,较少的调参可以达到较好的预测效果

  3. 使用健壮的损失函数时,模型鲁棒性非常强,受异常值影响小

缺点:

        由于弱学习器之间存在依赖关系,难以并行训练数据

八、sklearn参数

boosting框架相关参数

  • n_estimators:弱学习器最大迭代次数/弱学习器个数

  • learning_rate:每个弱学习器的权重缩减步长(正则化时的a)

  • subsample:子采样比例

  • init:初始化时的弱学习器,默认用训练集样本来做样本集的初始化分类回归预测

  • loss:损失函数

    • 分类模型:对数似然损失函数deviance,指数损失函数exponential

    • 回归模型:均方差ls,绝对损失lad,Huber损失huber,分位数损失quantile

  • alpha:只有回归模型有,当使用Huber损失和分位数损失时指定的分位数的值

弱学习器参数

  • max_features:划分时考虑的最大特征数

  • max_depth:决策树最大深度

  • min_samples_split:内部节点划分所需最小样本数

  • min_samples_leaf:叶子节点最少样本数

  • min_weight_fraction_leaf:叶子节点最小样本权重,若小于改值则该节点会和兄弟节点一起被剪枝

  • max_leaf_nodes:最大叶子节点数

  • min_impurity_split:节点划分最小不纯度

九、应用场景

        GBDT的适用面非常广,几乎可以用于所有回归问题(线性/非线性),也可以用于分类问题。

你可能感兴趣的:(GBDT算法)