• xgboost的原理

  首先值得说明的是,xgboost是gbdt的升级版,有兴趣的话可以先看看gbdt的推导。xgboost同样是构造一棵棵树来拟合残差,但不同之处在于(1)gbdt使用一阶导,xgboost使用二阶导。(2)xgboost在loss中包括模型复杂度,gbdt没有。

首先我们来定义一下模型:

1).符号定义:

2).模型定义

假设我们迭代T轮,意味着我们要生成T棵残差树:

值得注意的几点: 

1>其实一般来说,前面还要加上一个

,但是作者在这里初始化的时候将

设置为0,所以不用加了。

2>ft(xi)表示的是第t棵残差树对xi的第t轮残差的预测值。

3>.每一轮残差)树的训练数据是什么呢?假如,yt表示t棵cart残差树的和,也就是最终预测值,y表示x的真实标签,那么第t+1棵树的训练数据就是(x,y-yt)        

4>.F是残差树的函数空间。

5>.从函数的角度来说,每一个残差树类似一个分段函数。

3)损失函数定义

从公式的角度,xgboost的误差来源主要是:训练误差和模型复杂度。

  • 如何训练残差树?

由于xgboost采取的是增量训练,也就是说只有前一棵树训练好了,才能开始训练下一棵树。这也就意味着,当我训练第t棵树的时候,1~t-1棵树的参数都是固定的了,与其相关的量都是常量。我们可以将目标函数简化一下:

上面的损失函数是没有具体到每一轮的训练,为了方便推导,我们把第t轮的loss表示如下:

由于存在以下关系:

因此,第t轮的loss化简如下:

对于第一部分loss,由于泰勒展开式

我们把

当作x,
当作
,那么训练loss可以化简为:

 那么总loss变为:

在这个目标函数中,我们需要求的就只有第t棵残差树的参数了。那么一棵树的参数又包括哪些呢?或者说我们要怎样去表示这棵树呢?在xgboost的原作者ppt中是这样定义的:

其中,q(x)就表示x属于哪一个叶子节点,比如说是第三个叶子节点,那么wq(x)就表示第三个叶子节点的权值了,也可以理解为ft对x第t轮残差的的预测值。另外K表示叶子节点的个数(我用的符号和原PPT不太一样,原PPT用的符号是T,感觉和残差树的个数搞重了,所以就换了一个符号)。

下面说一下,模型复杂度的定义:

K是叶子节点的个数,K值越小,树的结构就越简单,从而不容易过拟合,这个很好理解,但是为什么还要限制w呢,从某种意义上来说,w是ft对x第t轮残差的的预测值,这个有必要限制嘛?我的思考是这样的:xgboost不希望一次性就把数据拟合得很好,而是每次拟合一个大概就可以了,反正还可以继续学的,也就是说每个残差树都是一个弱分类器,这样也可以防止过拟合。其实这也是boosting一个比较重要的思想。那么如何限制分类器拟合得太好呢,直接限制w的取值就可以了,试想如果某一个w很大,那么当前这棵棵残差树在所有残差树就占很大的权重,这样就容易导致过拟合了。(自己的理解,有错请指正)。

接下来,我们我们用具体的预测值来代替函数,在下面的变换中,loss的计算由以样本为单位求和变味了以叶子节点为单位求和。

因为G和H都是常数,那么这个问题就变成了一个二次问题了,求解最小值的方法就不多说了,直接给出结果(这个二次问题应该是开口向下的,我没有主动算过,主要是看

的大小,但是常见的损失函数二次导应该是正的,大家可以去验证一下)

我们说,目前我们得到的最优结果是基于这棵树的结构已经确定的情况下得到的,但是树的结构有很多种,那么该如何确定这棵树的结构呢?

原论文中采取贪婪算法来生成这棵树:

1.从根节点开始;

2.遍历所有特征

3.对于每一个特征,如果是连续型特征,则将其按照从小到大排列,我们样本数量假设有n个,那么这个连续型的特征的切分点就有n-1个,我们就在每一个切分点都计算出一个“分裂增益值”,这个分裂增益值是什么意思呢?它是用来判断当前节点要不要进行分裂,如果分裂那么选择哪个特征的哪个切分点最好。那么分裂增益值要怎么算呢?原论文给出的算法如下:

GL是指左节点中所有样本的g和,GR,HL,HR同理(这里对g不知道是什么的东西的同学,我把下面的公式再贴一次)

要知道,分裂后的改变就是叶子节点数多了一个,然后样本被划分到不同的叶子节点。这个Gain公式的原理用白话讲就是,用左节点增益右节点增益减去未进行分裂前的那个节点的增益减去因为多增加了一个节点而产生的

,那么为什么

可以表示一个节点的收益呢?由于

(刚刚计算出的当树结构确定时的最优总loss),仔细观察其结构,就是叶子节点总数乘以一个系数减去所有叶子节点的

和乘以一个系数,为了使得loss减小,那么

越大越好,因此我们可以将

当作是第k个叶子节点的增益。

4.关于树的剪枝

作者提出了两种剪枝的方法pre-stopping和Post-Prunning,其实就是预剪枝和后减枝:

     pre-stopping:我们在计算分裂增益值时,有可能得到负数,这个时候可以直接停止分裂了,这就是pre-stopping的思想,但是这种方法有缺陷:可能这次分裂虽然得到了负增益,但是可能会为后面的节点分裂带来更好的收益。

     Post-Prunning:这种方法是先按照上面的算法,不管深度,直接生成能够达到的最大深度的树,然后再根据负增益递归从下往上减枝。

5.一些其他问题

1.如果样本带有权重该怎么办?

         假设样本xi的权重为a,那么将gi和hi分别变成a*gi,a*hi

       2.还有什么防止过拟合的方法?

变成

一般取0.1,这个意思和之前关于loss的构成解释差不多,还是希望,前面的残差树不要学得太好,把细节末枝留给后面的树学。(其实感觉这个是所有boosting方法防止过拟合的做法.

非原创,转自https://www.cnblogs.com/tangweijqxx/p/10649468.html

xgboost算法_xgboost算法过程推导相关推荐

  1. xgboost算法_XGBoost算法可能会长期占据你的视野!

    点击上方关注,All in AI中国 我仍然记得十五年前第一份工作的第一天,我刚刚完成了我的研究生课程,并以分析师的身份加入了一家全球投资银行.在上班的第一天,我还是很紧张的,我经常会有的小动作就是会 ...

  2. xgboost算法_XGBoost算法背后的数学:尽可能简单地解释XGBoost算法背后的数学机制...

    如果你想很好地理解某些内容,请尝试简单地给别人解释出来.--费曼 XGBoost是一个很优美的算法,它的过程不乏启发性.这些通常简单而美丽的概念在数学术语中消失了.我在理解数学的过程中也遇到过同样的挑 ...

  3. xgboost算法_xgboost算法原理篇

    1, 概述部分 这篇文章,主要来介绍一下xgboost的理论部分,可能会不够详细,由于xgboost算法相比较前三篇文章中提到的算法更加复杂,这里主要讲解一下损失函数正则化,切分点查找算法及其优化,叶 ...

  4. xgboost实例_XGBoost超详细推导,终于有人讲明白了!

    - XGB中树结点分裂的依据是什么? - 如何计算树节点的权值? - 为防止过拟合,XGB做了哪些改进? 相信看到这篇文章的各位对XGBoost都不陌生,的确,XGBoost不仅是各大数据科学比赛的必 ...

  5. xgboost和lightgbm算法总结(从决策树到xgboost)

    目录 一.背景知识合集 1.决策树 1.1 ID3.0 1.1.1 思想 1.1.2 划分标准 1.1.3 优缺点 1.2 C4.5 1.2.1 思想 1.2.2 划分标准 1.2.3 优缺点 1.3 ...

  6. Adaboost 算法的原理与推导

    Adaboost 算法的原理与推导 0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单:听取多人意见,最后综合决策,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下 ...

  7. Adaboost 算法的原理与推导(转载)

    0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单:听取多人意见,最后综合决策,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,在我组织的机器学习班 第8次课上 ...

  8. em算法详细例子及推导_第九章-EM算法

    从第九章开始,学习总结的东西有所不同了,第2-8章是分类问题,都属于监督学习,第9章EM算法是非监督学习.本文主要是总结EM算法的应用以及处理问题的过程和原理推导. EM算法 EM算法(期望极大算法 ...

  9. bp算法运行太慢_神经网络,BP算法的理解与推导

    原创,转载请注明出处. (常规字母代表标量,粗体字母代表向量,大写粗体字母代表矩阵) 这里假设你已经知道了神经网络的基本概念,并且最好看过BP算法. 可能你没有看懂,或者你跟我一样被各种公式搞晕了.尤 ...

最新文章

  1. 四次面试:程序员越来越悲催了
  2. k8命令,pod的启动流程与资源文件书写,k8s集群调度
  3. Android开发之WebView加载HTML源码包含转义字符实现富文本显示的方法
  4. PAT (Basic Level) Practise 1045 快速排序(离散化+主席树区间内的区间求和)
  5. 细胞(信息学奥赛一本通-T1329)
  6. VB讲课笔记08:数组
  7. android 月牙动画,一加6月牙白版:可能是目前最漂亮的白色安卓旗舰
  8. Android 增量更新实例(Smart App Updates)
  9. springboot电影院订票售票系统毕业设计毕设作品开题报告开题答辩PPT
  10. baidupcsgo安卓_GitHub - orenbek2019/BaiduPCS-Go: 百度网盘客户端 - Go语言编写
  11. Django博客项目(一)—— 注册和登录页面
  12. 光纤信号服务器,485转光纤的两种方式
  13. Python实现手机和电脑之间的文件传输
  14. 如何实现多源异构系统数据整合?
  15. 音频信号输入itc服务器,ITC公共广播系统
  16. SpringBoot统一返回处理出现cannot be cast to java.lang.String异常
  17. 怎么去掉ECShop购物流程中收货人电子邮箱必填
  18. 通俗易懂解释IP段192.168.1.0/24和192.168.0.0/16
  19. 联想(IBM)thinkpad-SL400笔记本安装xp系统完全过程
  20. Experience all that SharePoint 15 has to offer. Start now or Remind me later.

热门文章

  1. 阿里披露 AI 完整布局,飞天 AI 平台首次亮相!
  2. 996 的程序员,只能云养娃吗?
  3. 假期怎么提升 Python 技能?100+ 编程题给你练~(附答案)
  4. Google 重返中国的忧虑
  5. 比特币蒸发 1 万亿;中兴入局无人驾驶;特斯拉 Model 3 在华降价 | 极客头条
  6. 2018年39名最牛的女程序媛,第三名很多人都认识!
  7. ​对不起!你的超融合认知已过期……
  8. 马云再出新语录:月入一两百万很高兴,挣一二十亿很难受
  9. java this() super(),Java super()和this()的区别用法及代码示例
  10. linux 路由访问不了php文件,linux系统nginx服务器不能访问php文件问题