XGBoost是2014年3月陈天奇博士提出的,是基于CART树的一种boosting算法,XGBoost使用CART树有两点原因:对于分类问题,CART树的叶子结点对应的值是一个实际的分数,而非一个确定的类别,这有利于实现高效的优化算法;XGBoost有两个特点快和准,快一方面是并行的原因,另一方面是CART树的计算没有对数项。

XGBoost首先是一种基于决策树的集成模型,假设有K棵CART树,则集成的预测结果为:(fK代表第k颗树的输出结果)

XGBoost的目标优化函数定义为:

目标优化函数的第一项为训练损失,第二项为树模型的复杂度,也是优化函数的正则化项。Xgboost包含的CART树的确定包括两个部分:树的结构、叶子节点分数,如果树的结构确定,模型的正则化项也设为各个叶子节点值的平方和,就可以使用梯度下降或随机梯度下降来优化目标函数。

XGboost目标函数的优化采用的是加法训练,这是一种启发式算法,运用加法训练,首先优化第一棵树,之后再优化第二棵树,直至优化完k棵树。

第t步时,在现有的t-1棵树的基础上,添加使目标函数最小的第t颗CART树:

对于平方损失函数,目标优化函数可表示为:

对于一般的损失函数,可以对目标函数做二阶泰勒展开,得到目标优化函数:

其中:

等价于平方损失函数中的:

二阶泰勒展开形式:

移除常数项后,得到的近似目标优化函数为:

模型的正则化项定义为:

将正则化项代入目标优化函数得:

令:

目标函数等价于:
   

假设树的结构固定,优化每个叶子节点的权重,目标函数对wj求偏导等于0可得:

XGBoost的节点切分标准定义为:

该Gain实际上是单节点的obj减去切分后的两个子节点的obj,Gain为正,值得切分,Gain的左半部分大于g,值得切分。

Xgboost对样本的遍历转化成了在叶子节点上遍历,特征的选择和切分可以并行实现,优于传统的GBDT算法。

xgboost算法原理的更多相关文章

  1. XGBoost算法原理小结

    在两年半之前作过梯度提升树(GBDT)原理小结,但是对GBDT的算法库XGBoost没有单独拿出来分析.虽然XGBoost是GBDT的一种高效实现,但是里面也加入了很多独有的思路和方法,值得单独讲一讲 ...

  2. GBDT和XGBOOST算法原理

    GBDT 以多分类问题为例介绍GBDT的算法,针对多分类问题,每次迭代都需要生成K个树(K为分类的个数),记为\(F_{mk}(x)\),其中m为迭代次数,k为分类. 针对每个训练样本,使用的损失函数 ...

  3. 转载:XGBOOST算法梳理

    学习内容: CART树 算法原理 损失函数 分裂结点算法 正则化 对缺失值处理 优缺点 应用场景 sklearn参数 转自:https://zhuanlan.zhihu.com/p/58221959 ...

  4. 机器学习相关知识整理系列之三:Boosting算法原理,GBDT&XGBoost

    1. Boosting算法基本思路 提升方法思路:对于一个复杂的问题,将多个专家的判断进行适当的综合所得出的判断,要比任何一个专家单独判断好.每一步产生一个弱预测模型(如决策树),并加权累加到总模型中 ...

  5. GBDT算法原理深入解析

    GBDT算法原理深入解析 标签: 机器学习 集成学习 GBM GBDT XGBoost 梯度提升(Gradient boosting)是一种用于回归.分类和排序任务的机器学习技术,属于Boosting ...

  6. 1.XGBOOST算法推导

    最近因为实习的缘故,所以开始复习各种算法推导~~~就先拿这个xgboost练练手吧. (参考原作者ppt 链接:https://pan.baidu.com/s/1MN2eR-4BMY-jA5SIm6W ...

  7. 机器学习 之XGBoost算法

    目录 1.基本知识点简介 2.XGBoost提升树算法 2.1 XGBoost原理 2.2 XGBoost中损失函数的泰勒展开 2.3 XGBoost中正则化项的选定 2.4 最终的目标损失函数及其最 ...

  8. xgboost算法教程(两种使用方法)

    标签: xgboost 作者:炼己者 ------ 欢迎大家访问我的简书以及我的博客 本博客所有内容以学习.研究和分享为主,如需转载,请联系本人,标明作者和出处,并且是非商业用途,谢谢! ------ ...

  9. python平台下实现xgboost算法及输出的解释

    python平台下实现xgboost算法及输出的解释 1. 问题描述 ​ 近来, 在python环境下使用xgboost算法作若干的机器学习任务, 在这个过程中也使用了其内置的函数来可视化树的结果, ...

随机推荐

  1. Android Studio/IntelliJ IDEA使用手记

      使用第三方jar包 1.将jar包放入项目里的libs文件夹中: 2.在project选中该jar包,点击右键选择:"Add as library": 1. 代码中中文显示乱码 ...

  2. C# 中三个关键字params,Ref,out

    一. using System; using System.Collection.Generic; using System.Text; namespace ParamsRefOut { class ...

  3. java 设计模式 -- 责任链模式

    设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...

  4. EAI G4-lidar ROS配置

    (1)使用命令创建 ydlidar_ws 工作空间,并将 G4 资料包内的 ROS 驱动包 ydlidar 下载到ydlidar_ws/src 目录下,切换到 ydlidar_ws 工作空间下并重新进 ...

  5. Ubuntu下配置Nginx HTTPS

    HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入S ...

  6. Django之sitemap

    ##########settings.py SITE_ID=1 # Application definition # taggit tag INSTALLED_APPS = [ 'myblog', ' ...

  7. python学习(五)列表

    #!/usr/bin/python # 列表的学习, 列表的概念不陌生, 就是熟悉一下python中的列表是如何操作的 # 1. 序列的操作 L = [ 123, 'spam', 1.23] # 里面 ...

  8. python升级或者其他原因把yum搞坏了

    第一个命令查询出来,原本是安装的啥版本 rpm -qa | grep python- | grep 2.6 然后执行下一个命令,就可以安装原本的python版本了,注意链接要换成你对应的那个版本 rp ...

  9. git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0

    // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  10. 史上最浅显易懂的Git教程1

    工作区(Working Directory)就是你在电脑里能看到的目录, 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stag ...