学习笔记-XGBOOST

XGBOOST是GBDT模型的升级版,同样也用到了adboosting的思想

一 预备知识

  1. XGBOOST是前向加法模型,那么有公式:

    设表示第n棵树的模型,那么就有

    所以第k次生成的模型为

  2. 目标函数的定义
    设有个样本,棵树,表示第棵树, 表示第k棵树的复杂程度,XGBOOST的损失函数定义为如下:

    可以将上述目标函数拆分为两部分:

  • 第一部分是,这是普通的损失函数,可以是 均方差,也可以是其他的损失函数。
  • 第二部分是,表示训练第棵的时候,前棵树的复杂程度,需要将所有树的复杂度相加的原因是XGBOOST是前向加法模型,第个模型的结果是前棵树相加而得到的。
    如何表示树的复杂度呢?其叶节点的个数、树的深度、和叶结点的值都可以表示复杂度。叶结点可以表示复杂度的原因是叶结点的值越小,需要的树越多,比如目标时是3,当每棵树叶结点的值是1的时候,需要三棵树;当一个树的值为2,一个树的结点为1时,那么就只需要两棵树。
  1. 训练第K棵树时
    式子1.4为
    根据前向加法模型展开式

    因为是前棵树的复杂度,所以此部分的复杂度是已知的,将式1.5改写为下列式子:

    我们的目标是最小化损失函数:

二 使用泰勒级数近似目标函数

  1. 先来回忆下泰勒公式
  2. 将式1.7中的当作式2.1的,当作式2.1的,代入到式1.7中得:
  3. 我们发现上式中只要是未知项,、与都是已知项,令,将忽略,可将式2.2改为:

    此处需要注意下,就是我们得参数

三 引入新的符号

为了方便之后的计算和表示,我们先引入一些符号

  • 定义表示样本属于哪一个叶结点
  • 定义为样本所属结点上的值
  • 定义表示第i个结点上共有多少个样本

下图中表示有样本,样本和样本决策分类值是15,样本的值是12,样本和样本的值是20。将结点从左到右排列,记为序号1,2,3所以根据上述定义,我们可以得到

表示样本的预测值,那么,所以有下列等式

我们得知第一个结点上有两个样本,所以,第二个结点上有一个样本,,结点3上有两个样本,所以

来自于网络

四 树的复杂度

上面说过了,树的复杂度可能由深度、叶结点的个数、叶结点的值决定。我们现在来看看XGBOOST中的复杂度是如何定义的:

表示有多少个叶节点,表示第t个结点上的值
和都是超参数,需要有人工设置

根据三和四,我们可以将式1.7改写为如下形式:


在第二部分的3小部分,我们可以知道和是已知的,所以 和都是常数,使用表示,使用表示,可以下式


上述式子可以看做以的二次函数,当时,obj取得最值。将代入式5.4得得极值

优缺点

  • 优点
  1. 正则化:XGBoost 在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的 score 的 L2 模的平方和。从 Bias-variancetradeoff 角度来讲,正则项降低了模型的 variance,使学习出来的模型更加简单,防止过拟合,这也是 XGBoost 优于传统 GBDT 的一个特性。
  2. 并行处理:我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost 在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个 block 结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
  3. 对于特征的值有缺失的样本,XGBoost 可以自动学习出它的分裂方向。
  • 缺点
  1. 算法参数过多
  2. 只适合处理结构化数据
  3. 不适合处理超高维特征数据

参考文献

  1. http://ihoge.cn/2018/boosting.html

你可能感兴趣的:(学习笔记-XGBOOST)