Xgboost算法 36

1、Xgboost介绍

1.1、Xgboost概述

XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。

1.2、青出于蓝

说到XGBoost,不得不提GBDT(Gradient Boosting Decision Tree)。因为XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。两者都是boosting方法。

2、Xgboost树的定义

2.1、构造决策树

先来举个例子,我们要预测一家人对电子游戏的喜好程度,考虑到年轻和年老相比,年轻更可能喜欢电子游戏,以及男性和女性相比,男性更喜欢电子游戏,故先根据年龄大小区分小孩和大人,然后再通过性别区分开是男是女,逐一给各人在电子游戏喜好程度上打分,如下图所示。
请添加图片描述

2.2、决策树集成

就这样,训练出了2棵树tree1和tree2,类似之前gbdt的原理,两棵树的结论累加起来便是最终的结论,所以小孩的预测分数就是两棵树中小孩所落到的结点的分数相加:2 + 0.9 = 2.9。爷爷的预测分数同理:-1 + (-0.9)= -1.9。具体如下图所示:
请添加图片描述

恩,你可能要拍案而起了,惊呼,这不是跟之前介绍的GBDT乃异曲同工么?

事实上,如果不考虑工程实现、解决问题上的一些差异,XGBoost与GBDT比较大的不同仅仅在于目标函数的定义。

3、Xgboost目标函数

3.1、目标函数方程

对于Boosting算法我们知道,是将多个弱分类器的结果结合起来作为最终的结果来进行输出。 f t ( x i ) f_t(x_i) ft(xi)​为第 t 棵树的输出结果, y ^ i ( t ) \hat{y}_i^{(t)} y^i(t)​是模型当前的输出结果, y i y_i yi​​ 是实际的结果。

那么:

y ^ i ( t ) = ∑ t = 1 t f t ( x i ) \hat{y}_i^{(t)} = \sum\limits_{t=1}^t f_{t}(x_i) y^i(t)=t=1tft(xi)

y ^ i ( t ) = y ^ i ( t − 1 ) + f t ( x i ) \hat{y}_i^{(t)} = \hat{y}_i^{(t-1)} + f_t(x_i) y^i(t)=y^i(t1)+ft(xi)

XGBoost的目标函数如下图所示:

O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ) + ∑ i = 1 t Ω ( f t ) Obj^{(t)} = \sum\limits_{i = 1}^nl(y_i,\hat{y}_i) + \sum\limits_{i =1}^t\Omega(f_t) Obj(t)=i=1nl(yi,y^i)+i=1tΩ(ft)

  • 训练损失

    ∑ i = 1 n l ( y i , y ^ i ) \sum\limits_{i = 1}^nl(y_i,\hat{y}_i) i=1nl(yi,y^i)

  • 常见损失函数

  • 请添加图片描述

  • 树的复杂度

    ∑ i = 1 t Ω ( f i ) \sum\limits_{i =1}^t\Omega(f_i) i=1tΩ(fi)

Xgboost包含多棵树,定义每棵树的复杂度:

Ω ( f ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega(f) = \gamma T + \frac{1}{2}\lambda \sum\limits_{j=1}^T w_j^2 Ω(f)=γT+21λj=1Twj2

​ 其中 T 为叶子节点的个数,为叶子节点向量的模 。 γ \gamma γ 表示节点切分的难度, λ \lambda λ 表示L2正则化系数。

O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + ∑ i = 1 t Ω ( f i ) Obj^{(t)} = \sum\limits_{i = 1}^nl(y_i,\hat{y}_i^{(t-1)} + f_t(x_i)) + \sum\limits_{i =1}^t\Omega(f_i) Obj(t)=i=1nl(yi,y^i(t1)+ft(xi))+i=1tΩ(fi)​​​

O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) + ∑ i = 1 t − 1 Ω ( f i ) Obj^{(t)} = \sum\limits_{i=1}^nl(y_i,\hat{y}_i^{(t-1)} + f_t{(x_i})) + \Omega(f_t) + \sum\limits_{i=1}^{t-1}\Omega(f_i) Obj(t)=i=1nl(yi,y^i(t1)+ft(xi))+Ω(ft)+i=1t1Ω(fi)​​

O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) + c o n s t a n t Obj^{(t)} = \sum\limits_{i=1}^nl(y_i,\hat{y}_i^{(t-1)} + f_t{(x_i})) + \Omega(f_t) + constant Obj(t)=i=1nl(

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值