xgboost算法_陈天奇做的XGBoost为什么能横扫机器学习竞赛平台?
【新智元导读】XGBoost号称“比赛夺冠的必备大杀器”,横扫机器学习竞赛罕逢敌手,堪称机器学习算法中的新女王!
在涉及非结构化数据(图像、文本等)的预测问题中,人工神经网络显著优于所有其他算法或框架。但当涉及到中小型结构/表格数据时,基于决策树的算法现在被认为是最佳方法。而基于决策树算法中最惊艳的,非XGBoost莫属了。
打过Kaggle、天池、DataCastle、Kesci等国内外数据竞赛平台之后,一定对XGBoost的威力印象深刻。XGBoost号称“比赛夺冠的必备大杀器”,横扫机器学习竞赛罕逢敌手。最近甚至有一位大数据/机器学习主管被XGBoost在项目中的表现惊艳到,盛赞其为“机器学习算法中的新女王”!
XGBoost最初由陈天奇开发。陈天奇是华盛顿大学计算机系博士生,研究方向为大规模机器学习。他曾获得KDD CUP 2012 Track 1第一名,并开发了SVDFeature,XGBoost,cxxnet等著名机器学习工具,是Distributed (Deep) Machine Learning Common的发起人之一。
XGBoost实现了高效、跨平台、分布式gradient boosting (GBDT, GBRT or GBM) 算法的一个库,可以下载安装并应用于C++,Python,R,Julia,Java,Scala,Hadoop等。目前Github上超过15700星、6500个fork。
项目主页:XGBoost
XGBoost是什么
XGBoost全称:eXtreme Gradient Boosting,是一种基于决策树的集成机器学习算法,使用梯度上升框架,适用于分类和回归问题。优点是速度快、效果好、能处理大规模数据、支持多种语言、支持自定义损失函数等,不足之处是因为仅仅推出了不足5年时间,需要进一步的实践检验。
XGBoost选用了CART树,数学公式表达XGBoost模型如下:
K是树的数量,F表示所有可能的CART树,f表示一棵具体的CART树。这个模型由K棵CART树组成。
模型的目标函数,如下所示:
XGBoost具有以下几个特点:
- 灵活性:支持回归、分类、排名和用户定义函数
- 跨平台:适用于Windows、Linux、macOS,以及多个云平台
- 多语言:支持C++, Python, R, Java, Scala, Julia等
- 效果好:赢得许多数据科学和机器学习挑战。用于多家公司的生产
- 云端分布式:支持多台计算机上的分布式训练,包括AWS、GCE、Azure和Yarn集群。可以与Flink、Spark和其他云数据流系统集成
下图显示了基于树的算法的发展历程:
- 决策树:由一个决策图和可能的结果(包括资源成本和风险)组成, 用来创建到达目标的规划。
- Bagging:是一种集合元算法,通过多数投票机制将来自多决策树的预测结合起来,也就是将弱分离器 f_i(x) 组合起来形成强分类器 F(x) 的一种方法
- 随机森林:基于Bagging算法。随机选择一个包含多种特性的子集来构建一个森林,或者决策树的集合
- Boosting:通过最小化先前模型的误差,同时增加高性能模型的影响,顺序构建模型
- 梯度上升:对于似然函数,要求最大值,叫做梯度上升
- XGBoost:极端梯度上升,XGBoost是一个优化的分布式梯度上升库,旨在实现高效,灵活和跨平台
为什么XGBoost能横扫机器学习竞赛平台?
下图是XGBoost与其它gradient boosting和bagged decision trees实现的效果比较,可以看出它比R, Python,Spark,H2O的基准配置都快。
XGBoost和Gradient Boosting Machines(GBMs)都是集合树方法,使用梯度下降架构来提升弱学习者(通常是CART)。而XGBoost通过系统优化和算法增强改进了基础GBM框架,在系统优化和机器学习原理方面都进行了深入的拓展。
系统优化:
并行计算:
由于用于构建base learners的循环的可互换性,XGBoost可以使用并行计算实现来处理顺序树构建过程。
外部循环枚举树的叶节点,第二个内部循环来计算特征,这个对算力要求更高一些。这种循环嵌套限制了并行化,因为只要内部循环没有完成,外部循环就无法启动。
因此,为了改善运行时,就可以让两个循环在内部交换循环的顺序。此开关通过抵消计算中的所有并行化开销来提高算法性能。
Tree Pruning:
GBM框架内树分裂的停止标准本质上是贪婪的,取决于分裂点的负损失标准。XGBoost首先使用'max_depth'参数而不是标准,然后开始向后修剪树。这种“深度优先”方法显著的提高了计算性能。
硬件优化:
该算法旨在有效利用硬件资源。这是通过在每个线程中分配内部缓冲区来存储梯度统计信息来实现缓存感知来实现的。诸如“核外”计算等进一步增强功能可优化可用磁盘空间,同时处理不适合内存的大数据帧。
算法增强:
正则化:
它通过LASSO(L1)和Ridge(L2)正则化来惩罚更复杂的模型,以防止过拟合。
稀疏意识:
XGBoost根据训练损失自动“学习”最佳缺失值并更有效地处理数据中不同类型的稀疏模式。
加权分位数草图:
XGBoost采用分布式加权分位数草图算法,有效地找到加权数据集中的最优分裂点。
交叉验证:
该算法每次迭代时都带有内置的交叉验证方法,无需显式编程此搜索,并可以指定单次运行所需的增强迭代的确切数量。
为了测试XGBoost到底有多快,可以通过Scikit-learn的'Make_Classification'数据包,创建一个包含20个特征(2个信息和2个冗余)的100万个数据点的随机样本。
下图为逻辑回归,随机森林,标准梯度提升和XGBoost效率对比:
参考资料
- Introduction to Boosted Trees — xgboost 0.83.dev0 documentation
- https://homes.cs.washington.edu/~tqchen/
- https://towardsdatascience.com/https-medium-com-vishalmorde-xgboost-algorithm-long-she-may-rein-edd9f99be63d
xgboost算法_陈天奇做的XGBoost为什么能横扫机器学习竞赛平台?相关推荐
- xgboost算法_第113天: Python XGBoost 算法项目实战
Python 实现机器学习 如果你的机器学习预测模型表现得不尽如人意,那就用XGBoost.XGBoost算法现在已经成为很多数据工程师的重要武器. XGBoost 算法 说到XGBoost,不得不提 ...
- COS 访谈第 18 期:陈天奇(发明xgboost算法的大佬)
转自:https://cosx.org/2015/06/interview-of-tianqi [COS 编辑部按]受访者:陈天奇 采访者:何通 简介:陈天奇,华盛顿大学计算机系博士生,研究方向为大规 ...
- xgboost算法_【模型篇】XGBoost模型
XGBoost全称 "Extreme Gradient Boosting",陈天奇大佬提出来的梯度提升模型. Part A: 目标函数推导 目标函数的基本形式 模型对于某个样本的预 ...
- xgboost算法_基于XGBoost算法构建投资组合
摘要 极端梯度提升 (eXtreme Gradient Boosting) 是一种基于决策树的集成机器学习方法,适用于分类和回归问题.其优点是速度快.效果好.能处理大规模数据.支持自定义损失函数等. ...
- xgboost算法_工业大数据:分析算法
一. 应用背景 大数据分析模型的研究可以分为3个层次,即描述分析(探索历史数据并描述发生了什么).预测分析(未来的概率和趋势)和规范分析(对未来的决策给出建议).工业大数据分析的理论和技术研究仍处于起 ...
- xgboost算法_详解xgboost算法的样本不平衡问题
XGBoost官方文档对参数scale_pos_weight的定义: 翻译: 调节正负样本权重的平衡 ,常用来处理不平衡的正负样本数据 . 典型值算法: scale_pos_weight = 负样本总 ...
- xgboost算法_回归建模的时代已结束,算法XGBoost统治机器学习世界
作者 | 冯鸥 发布 | ATYUN订阅号 Vishal Morde讲了这样一个故事:十五年前我刚完成研究生课程,并以分析师的身份加入了一家全球投资银行.在我工作的第一天,我试着回忆我学过的一切.与此 ...
- python内存结构_陈天奇:内存张量结构DLPack的PythonAPI来了
陈天奇:内存张量结构DLPack的PythonAPI来了 新智元2021-02-28 14:25:22 [新智元导读]DLPack是一种开放的内存张量结构,用于在框架之间共享张量,近日,开发者陈天奇更 ...
- xgboost算法_手把手机器学习实战系列:xgboost 算法
算法简介 xgboost算法是一种boosting的集成学习算法,是将多个弱学习模型进行组合,从而获得更好的效果,使得组合后的模型有更强的泛化能力, 它通常是由基本的回归树(CART)树模型组成 如图 ...
最新文章
- 语文教学中如何运用计算机辅助教学,计算机辅助教学在语文教学过程中的运用...
- TFTP commons-net-3.3.jar
- 连你的免疫系统都拒绝996:半夜吃东西更容易拉肚子 | Cell
- [转]在.NET环境中实现每日构建(Daily Build)--NAnt篇
- 深入理解Spark 2.1 Core (六):Standalone模式运行的原理与源码分析
- 第八章 基本脚本编译
- Redux 主要知识学习总结
- 如何在有道云笔记的Markdown上上传本地图片(亲测好用,而且不用开会员)
- 固态硬盘玩游戏有必要吗
- SQL Server编程(01)流程控制
- 在CentOS上安装7zip和使用
- Day001 20210206
- Matlab计算熵权法
- 【语音信号处理】3语音信号可视化——prosody
- 读《半世烟雨,半世桃花 李清照词传》有感
- 4.7 Case Study on Sandy Bridge C…
- Appium自动化框架从0到1之 测试用例封装
- python实现视频ai换脸_python 实现 AI 换脸
- 【面经】2022年软件测试面试题大全(持续更新)附答案
- 【干货】剖析大数据分析方法论的几种理论模型(文末有福利哦)
热门文章
- Springcloud gateway获取post请求内容
- STL源代码分析(ch2 内存分配)uninitialized_fill_n
- C++ Primer 5th笔记(chap 16 模板和泛型编程)转发参数包
- C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和友元
- 跨链Cosmos(9)异构跨链交易流程
- 【Flask项目2】多进程下的日志文件(2)
- 密码篇——对称加密—AES
- 密码篇——对称加密—3DES
- APK安装时如何拷贝apk里的文件到sdcard
- (12)调用门阶段测试