作者 | 梁云1991

转载自Python与算法之美(ID: Python_Ai_Road)

一、XGBoost和GBDT

xgboost是一种集成学习算法,属于3类常用的集成方法(bagging,boosting,stacking)中的boosting算法类别。它是一个加法模型,基模型一般选择树模型,但也可以选择其它类型的模型如逻辑回归等。

xgboost属于梯度提升树(GBDT)模型这个范畴,GBDT的基本想法是让新的基模型(GBDT以CART分类回归树为基模型)去拟合前面模型的偏差,从而不断将加法模型的偏差降低。

相比于经典的GBDT,xgboost做了一些改进,从而在效果和性能上有明显的提升(划重点面试常考)。

第一,GBDT将目标函数泰勒展开到一阶,而xgboost将目标函数泰勒展开到了二阶。保留了更多有关目标函数的信息,对提升效果有帮助。

第二,GBDT是给新的基模型寻找新的拟合标签(前面加法模型的负梯度),而xgboost是给新的基模型寻找新的目标函数(目标函数关于新的基模型的二阶泰勒展开)。

第三,xgboost加入了和叶子权重的L2正则化项,因而有利于模型获得更低的方差。

第四,xgboost增加了自动处理缺失值特征的策略。通过把带缺失值样本分别划分到左子树或者右子树,比较两种方案下目标函数的优劣,从而自动对有缺失值的样本进行划分,无需对缺失特征进行填充预处理。

此外,xgboost还支持候选分位点切割,特征并行等,可以提升性能。

二、XGBoost原理概述

下面从假设空间,目标函数,优化算法3个角度对xgboost的原理进行概括性的介绍。

1,假设空间

2,目标函数

3,优化算法

基本思想:贪心法,逐棵树进行学习,每棵树拟合之前模型的偏差。

三、第t棵树学什么?

要完成构建xgboost模型,我们需要确定以下一些事情。

1,如何boost? 如果已经得到了前面t-1棵树构成的加法模型,如何确定第t棵树的学习目标?

2,如何生成树?已知第t棵树的学习目标的前提下,如何学习这棵树?具体又包括是否进行分裂?选择哪个特征进行分裂?选择什么分裂点位?分裂的叶子节点如何取值?

我们首先考虑如何boost的问题,顺便解决分裂的叶子节点如何取值的问题。

四、如何生成第t棵树?

xgboost采用二叉树,开始的时候,全部样本都在一个叶子节点上。然后叶子节点不断通过二分裂,逐渐生成一棵树。

xgboost使用levelwise的生成策略,即每次对同一层级的全部叶子节点尝试进行分裂。

对叶子节点分裂生成树的过程有几个基本的问题:是否要进行分裂?选择哪个特征进行分裂?在特征的什么点位进行分裂?以及分裂后新的叶子上取什么值?

叶子节点的取值问题前面已经解决了。我们重点讨论几个剩下的问题。

1,是否要进行分裂?

根据树的剪枝策略的不同,这个问题有两种不同的处理。如果是预剪枝策略,那么只有当存在某种分裂方式使得分裂后目标函数发生下降,才会进行分裂。

但如果是后剪枝策略,则会无条件进行分裂,等树生成完成后,再从上而下检查树的各个分枝是否对目标函数下降产生正向贡献从而进行剪枝。

xgboost采用预剪枝策略,只有分裂后的增益大于0才会进行分裂。

2,选择什么特征进行分裂?

xgboost采用特征并行的方法进行计算选择要分裂的特征,即用多个线程,尝试把各个特征都作为分裂的特征,找到各个特征的最优分割点,计算根据它们分裂后产生的增益,选择增益最大的那个特征作为分裂的特征。

3,选择什么分裂点位?

xgboost选择某个特征的分裂点位的方法有两种,一种是全局扫描法,另一种是候选分位点法。

全局扫描法将所有样本该特征的取值按从小到大排列,将所有可能的分裂位置都试一遍,找到其中增益最大的那个分裂点,其计算复杂度和叶子节点上的样本特征不同的取值个数成正比。

而候选分位点法是一种近似算法,仅选择常数个(如256个)候选分裂位置,然后从候选分裂位置中找出最优的那个。

(*本文为 AI科技大本营转载文章,转载请联系原作者

精彩推荐

“只讲技术,拒绝空谈!”2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。

目前,距大会盲订票限量发售结束仅剩2天~扫码购票,领先一步!

推荐阅读

  • 追溯XLNet的前世今生:从Transformer到XLNet

  • Fast.ai:从零开始学深度学习 | 资源

  • 基于GEMM实现的CNN底层算法被改?Google提出全新间接卷积算法

  • 10个简单小窍门带你提高Python数据分析速度(附代码)

  • Python手写线性回归算法

  • 程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!

  • 抖音微博等短视频千万级高可用、高并发架构如何设计?

  • 为何 5G、物联网和区块链,可以成为科技铁三角?

你点的每个“在看”,我都认真当成了喜欢

30分钟看懂XGBoost的基本原理相关推荐

  1. xgboost算法_30分钟看懂XGBoost的基本原理

    作者 | 梁云1991 转载自Python与算法之美(ID: Python_Ai_Road) 一.XGBoost和GBDT xgboost是一种集成学习算法,属于3类常用的集成方法(bagging,b ...

  2. 30 分钟看懂 PCA 主成分分析

    来源:算法美食屋 本篇和大家分享一下PCA主成分分析的概念和在Python中的使用.之前也分享过两篇文章,也非常不错,可以结合起来一起看,加深理解. 一文读懂PCA算法的数学原理 讲讲降维算法:PCA ...

  3. 30 分钟看懂 CatBoost(Python代码)

    CatBoost和XGBoost.LightGBM并称为GBDT的三大主流神器,都是在GBDT算法框架下的一种改进实现. 正如其名字所说那样,CatBoost主要是在类别特征上的处理上做了很多的改进. ...

  4. 60分钟看懂HMM的基本原理

    作者 | 梁云1991 来源 | Python与算法之美 HMM模型,韩梅梅的中文拼音的缩写,所以又叫韩梅梅模型,由于这个模型的作者是韩梅梅的粉丝,所以给这个模型取名为HMM.开玩笑! HMM模型,也 ...

  5. 危骆邦油邦快讯|一分钟看懂山东地炼成品油报价

        昨日山东地炼汽柴油价格以下调为主,汽油主流跌幅在80-160元/吨,柴油主流跌幅在70-120元/吨.预计今日山东地炼汽柴油价格继续稳中下调,累计调价幅度或在20元/吨-100元/吨. 昨天7 ...

  6. 量子计算机 漫画,漫画 | 10分钟看懂量子比特、量子计算和量子算法

    原标题:漫画 | 10分钟看懂量子比特.量子计算和量子算法 请做好准备,即将进入烧脑模式! 宏观世界的生活经验很多都是表象.比如,你可能认为世界的运行是确定的.可预测的:一个物体不可能同时处于两个相互 ...

  7. java和python的web自动化有什么区别-三分钟看懂Python和Java的区别

    随着人工智能的火爆,Python和Java一直在各种流行编程语言中名列前茅.其实Java和Python有些相似,因为很多编程语言之间是互通的.Java现在还是第一,不知道Python未来会不会超越Ja ...

  8. python和java一样吗-三分钟看懂Python和Java的区别

    随着人工智能的火爆,Python和Java一直在各种流行编程语言中名列前茅.其实Java和Python有些相似,因为很多编程语言之间是互通的.Java现在还是第一,不知道Python未来会不会超越Ja ...

  9. 图像拾取点_10分钟看懂Photoshop 照片修饰(用“消失点”滤镜编辑照片)

    "消失点"滤镜具有特殊的功能,它可以在包含透视平面(如建筑物侧面或热和矩形对象)的图像中进行透视校正.在应用诸如绘画.仿制.拷贝或粘贴,以及变换等编辑操作时,Photoshop可以 ...

最新文章

  1. android+邮箱删除邮件,在Android上删除烦人的语音邮件通知 | MOS86
  2. 网络广告投放四大技巧有哪些?怎么样投放效果最好?
  3. 【 MATLAB】 Two-step WLS algorithm Simulation of TOA - Based Positioning
  4. androidid什么时候会变_今天是“三九”为什么老话说:三九冰上走一走,过年也能露一手!...
  5. Android编译系统入门(二)
  6. 计算机绘图中特征建模的概念,2016年电大 -机械cadcam计算机辅助设计制造习题集.doc...
  7. 路飞学城Python-Day75
  8. SQL基础语句汇总-学习
  9. 苹果iPhone手机用iTunes更新IOS14.3系统失败怎么解决
  10. HTTP协议响应头之Transfer-Encoding:分块传输详解
  11. 巴塞尔协议1、2、3内容总结(转)
  12. 2013年度中国优秀开源项目入围奖
  13. pidgin qq_如何在Pidgin中将Google Apps帐户用于GTalk
  14. amd cpu排行_目前cpu排行榜(2020cpu性能排名对比)
  15. 写作能赚钱吗?不,写作的首要目的,是认识自己
  16. angular12简单搭建项目的过程记录
  17. 电源设计基础笔记:DC-DC与LDO电路
  18. 【H5】 React 微信H5调试等随记
  19. 利用python识别图片中的条码及条码图片矫正和增强!
  20. 记录一下接多盟SDK遇到的问题

热门文章

  1. 【人在职场】能力与价值
  2. django 中文乱码或不识别
  3. Mysql sq优化(二)
  4. SpringBoot整合Spring Security
  5. 树莓派练习程序(蜂鸣器)
  6. Java 学习笔记(4)——java 常见类
  7. USACO09FEB Fair Shuttle
  8. Scrapy爬虫-必备插件
  9. 修改mysql的时间/时区
  10. (转)iPhone开发经典语录集锦