XGBoost

2021-08-25  本文已影响0人  __method__

XGBoost

XGBoost(Extreme Gradient Boosting)全名叫极端梯度提升树,XGBoost是集成学习方法的王牌,在Kaggle数据挖掘比赛中,大部分获胜者用了XGBoost。XGBoost在绝大多数的回归和分类问题上表现的十分顶尖

最优模型的构建方法

我们在前面已经知道,构建最优模型的一般方法是最小化训练数据的损失函数。
我们用字母 L表示损失,如下式


在这里插入图片描述

其中,F是假设空间假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情况的一种毫无遗漏的假设集合。式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。当训练数据较小时,模型很容易出现过拟合问题。
因此,为了降低模型的复杂度,常采用下式:

在这里插入图片描述
其中J(f)为模型的复杂度,式(2.1)称为结构风险最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测
应用:

XGBoost的目标函数推导

目标函数确定

目标函数,即损失函数,通过最小化损失函数来构建最优模型。

由前面可知, 损失函数应加上表示模型复杂度的正则项,且XGBoost对应的模型包含了多个CART树,因此,模型的目标函数为:

'
(3.1)式是正则化的损失函数;中yi是模型的实际输出结果,yhati是模型的输出结果;等式右边第一部分是模型的训练误差,第二部分是正则化项,这里的正则化项是K棵树的正则化项相加而来的。

CART树

在这里插入图片描述
上图为第K棵CART树,确定一棵CART树需要确定两部分,第一部分就是树的结构,这个结构将输入样本映射到一个确定的叶子节点上,记为f_k(x) 第二部分就是各个叶子节点的值,q(x)表示输出的叶子节点序号, w_q(x)表示对应叶子节点序号的值。由定义得: 在这里插入图片描述

树的复杂度定义

具体如下图所示


在这里插入图片描述

如下例树的复杂度表示:

在这里插入图片描述

目标函数推导

根据(3.1)式,共进行t次迭代的学习模型的目标函数为:


在这里插入图片描述

由前向分布算法可知,前t-1棵树的结构为常数


在这里插入图片描述
我们知道,泰勒公式的二阶导近似表示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

XGBoost的回归树构建方法

计算分裂节点

在实际训练过程中,当建立第 t 棵树时,XGBoost采用贪心法进行树结点的分裂:

从树深为0时开始:对树中的每个叶子结点尝试进行分裂;每次分裂后,原来的一个叶子结点继续分裂为左右两个子叶子结点,原叶子结点中的样本集将根据该结点的判断规则分散到左右两个叶子结点中;新分裂一个结点后,我们需要检测这次分裂是否会给损失函数带来增益,增益的定义如下:


在这里插入图片描述

如果增益Gain>0,即分裂为两个叶子节点后,目标函数下降了,那么我们会考虑此次分裂的结果。

那么一直这样分裂,什么时候才会停止呢

停止分裂条件判断

情况一:上节推导得到的打分函数是衡量树结构好坏的标准,因此,可用打分函数来选择最佳切分点。首先确定样本特征的所有切分点,对每一个确定的切分点进行切分,切分好坏的标准如下:

在这里插入图片描述
Gain表示单节点obj与切分后的两个节点的树obj之差,遍历所有特征的切分点,找到最大Gain的切分点即是最佳分裂点,根据这种方法继续切分节点,得到CART树。若 \gamma 值设置的过大,则Gain为负,表示不切分该节点,因为切分后的树结构变差了。\gamma 值越大,表示对切分后obj下降幅度要求越严,这个值可以在XGBoost中设定。
情况二:当树达到最大深度时,停止建树,因为树的深度太深容易出现过拟合,这里需要设置一个超参数max_depth。
情况三:当引入一次分裂后,重新计算新生成的左、右两个叶子结点的样本权重和。如果任一个叶子结点的样本权重低于某一个阈值,也会放弃此次分裂。这涉及到一个超参数:最小样本权重和,是指如果一个叶子节点包含的样本数量太少也会放弃分裂,防止树分的太细,这也是过拟合的一种措施。

XGBoost与GDBT的区别

API

1 . xgboost的安装:

官网链接:https://xgboost.readthedocs.io/en/latest/

pip3 install xgboost

2 . xgboost参数介绍

xgboost虽然被称为kaggle比赛神奇,但是,我们要想训练出不错的模型,必须要给参数传递合适的值。

xgboost中封装了很多参数,主要由三种类型构成:通用参数(general parameters),Booster 参数(booster parameters)和学习目标参数(task parameters)

2.1 通用参数(general parameters)
  1. booster [缺省值=gbtree]
  2. 决定使用哪个booster,可以是gbtree,gblinear或者dart。gbtree和dart使用基于树的模型(dart 主要多了 Dropout),而gblinear 使用线性函数.
  3. silent [缺省值=0]设置为0打印运行信息;设置为1静默模式,不打印
  4. nthread [缺省值=设置为最大可能的线程数 并行运行xgboost的线程数,输入的参数应该<=系统的CPU核心数,若是没有设置算法会检测将其设置为CPU的全部核心数
    下面的两个参数不需要设置,使用默认的就好了
2.2 Booster 参数(booster parameters)
Parameters for Tree Booster
Parameters for Linear Booster
学习目标参数(task parameters)
上一篇 下一篇

猜你喜欢

热点阅读