xgboost 一般多少棵树_机器学习-XGBoost

a1ffba82da35f94ce739c8f536ba3ae2.png

XGBoost算法

1 XGBoost简介

XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效、灵活且可移植。XGBoost是大规模并行boosting tree的工具,它是目前最快最好的开源boosting tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量的Kaggle选手选用XGBoost进行数据挖掘比赛,是各大数据科学比赛的必杀武器;在工业界大规模数据方面,XGBoost的分布式版本有广泛的可移植性,支持在Kubernetes、Hadoop、SGE、MPI、 Dask等各个分布式环境上运行,使得它可以很好地解决工业界大规模数据的问题

2 XGBoost的目标函数

2.1 学习第t棵树

XGBoost和GBDT两者都是boosting方法,除了工程实现、解决问题上的一些差异外,最大的不同就是目标函数的定义

XGBoost是由

个基模型组成的一个加法模型,假设我们第
次迭代要训练的树模型是
,则有:

式中,

为第
次迭代后样本
的预测结果,
为前
棵树的预测结果,
为第
棵树的模型

2.2 XGBoost的目标函数

损失函数可由预测值

与真实值
进行表示:

式中,

为样本的数量,定义目标函数为:

式中,

是将全部
棵树的复杂度进行求和,添加到目标函数中作为正则项,用于防止过拟合

由于XGBoost是boosting族中的算法,所以遵从前向分步加法,以第

步的模型为例,模型对第
个样本
的预测值为:

式中,

是由第
步的模型给出的预测值,是已知常数,
是这次需要加入的新模型的预测值。此时,目标函数就可以写成:

式中,只有第

棵树
为变量,其余都是已知量或可通过已知量计算出来的量。由于前
棵树的结构已经确定,因此前
棵树的复杂度之和可以用一个常量表示,如下所示:

2.3 泰勒公式展开

泰勒公式是将一个在

处具有
阶导数的函数
利用关于
次多项式来逼近函数的方法。若函数
在包含
的某个闭区间
上具有
阶导数,且在开区间
上具有
阶导数,则对闭区间
上任意一点有:

其中的多项式称为函数在

处的泰勒展开式,
是泰勒公式的余项且是
的高阶无穷小

根据泰勒公式,把函数

在点
处进行二阶泰勒展开,可得到如下等式:

在XGBoost的目标函数中,

对应损失函数
对应前
棵树的预测值
对应我们正在训练的第
棵树
,可以将损失函数写为:

式中,

为损失函数的一阶导,
为损失函数的二阶导,注意这里的求导是对
的求导

以平方损失函数为例:

分别对

求一阶导和二阶导:

将上述的二阶展开式,带入到XGBoost的目标函数中,可以得到目标函数的近似值:

由于在

已经是一个已知的值,所以
是一个常数,其对函数的优化不会产生影响。因此,去掉全部的常数项,得到目标函数为:

所以我们只需要求出每一步损失函数的一阶导和二阶导的值(由于前一步的

是已知的,所以这两个值就是常数),然后最优化目标函数,就可以得到每一步的
,最后根据加法模型得到一个整体模型

2.4 定义一棵树

XGBoost的基模型不仅支持决策树,还支持线性模型,本文我们主要介绍基于决策树的目标函数。我们可以重新定义一棵决策树,其包括两个部分:

  • 叶子结点的权重向量
  • 实例(样本)到叶子结点的映射关系
    (本质是树的分支结构)

8145b73145f64324b77f518ea113e98c.png

将决策树定义为:

  • 是长度为
    的一维向量,代表树
    各叶子结点的权重
  • 为一棵树的结构,将输入
    映射到某个叶子结点,假设这棵树有
    个叶子结点

2.5 定义树的复杂度

决策树的复杂度

可由叶子数
组成,叶子结点越少模型越简单,此外叶结点也不应该含有多高的权重
(类比 LR 的每个变量的权重),所以目标函数的正则项由生成的所有决策树的叶子节点数量,和所有节点权重所组成的向量的
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值