小白理解Xgboost

XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT(Gradient Boosting Decision Tree)算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。
集成学习就是使用多个分类器对数据进行预测。
因为XGBoost就是GBDT的一个算法,所以先来理解一下GBDT

GBDT

GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的梯度/残差(这个梯度/残差就是预测值与真实值之间的误差)。当然了,它里面的弱分类器的表现形式就是各棵树。
就是先随便确定一个值,再一步步对残差进行预测,残差=真实值 - 当前模型预测的值
大致的流程无非就是如下:
确定目标和损失函数→缩小误差

XGBoost

以下来自XGBoost作者的ppt
举个例子,我们要预测一家人对电子游戏的喜好程度,考虑到年轻和年老相比,年轻更可能喜欢电子游戏,以及男性和女性相比,男性更喜欢电子游戏,故先根据年龄大小区分小孩和大人,然后再通过性别区分开是男是女,逐一给各人在电子游戏喜好程度上打分,如下图所示。
在这里插入图片描述
就这样,训练出了2棵树tree1和tree2,类似之前gbdt的原理,两棵树的结论累加起来便是最终的结论,所以小孩的预测分数就是两棵树中小孩所落到的结点的分数相加:2 + 0.9 = 2.9。爷爷的预测分数同理:-1 + (-0.9)= -1.9。具体如下图所示
在这里插入图片描述
而XGBoost与GBDT的差异,就在于它们的目标函数。

目标函数

xgboost的核心算法思想就是:

  1. 不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。
    在这里插入图片描述

注: w q ( x ) w_{q(x)} wq(x)为叶子节点q的分数, F F F对应了所有K棵回归树(regression tree)的集合,而 f ( x ) f(x) f(x)为其中一棵回归树。

  1. 当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数
  2. 最后只需要将每棵树对应的分数加起来就是该样本的预测值。
    显然,我们的目标是要使得树群的预测值尽量接近真实值y_{i},而且有尽量大的泛化能力。

所以,从数学角度看这是一个泛函最优化问题,故把目标函数简化如下:
L ( ϕ ) = ∑ i l ( y i ^ − y i ) + ∑ k Ω ( f k ) L(\phi)=\sum_{i}l(\hat{y_i}-{y_i})+\sum_{k}\Omega(f_k) L(ϕ)=il(yi^yi)+kΩ(fk)

如你所见,这个目标函数分为两部分:损失函数和正则化项。且损失函数揭示训练误差(即预测分数和真实分数的差距),正则化定义复杂度。

对于上式而言, y i ^ \hat{y_i} yi^是整个累加模型的输出,正则化项 ∑ k Ω ( f k ) \sum_{k}\Omega(f_k) kΩ(fk)
是则表示树的复杂度的函数,值越小复杂度越低,泛化能力越强,其表达式为
Ω ( f ) = γ T + 1 2 λ ∣ ∣ w ∣ ∣ 2 \Omega(f)=\gamma T+\frac{1}{2}\lambda||w||^2 Ω(f)=γT+21λw2

T表示叶子节点的个数,w表示叶子节点的分数。直观上看,目标要求预测误差尽量小,且叶子节点T尽量少( γ \gamma γ控制叶子结点的个数),节点数值w尽量不极端( λ \lambda λ控制叶子节点的分数不会过大),防止过拟合。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值