Loading [MathJax]/jax/output/CommonHTML/jax.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【算法】xgboost算法

【算法】xgboost算法

作者头像
陆勤_数据人网
发布于 2018-03-27 03:23:00
发布于 2018-03-27 03:23:00
1.8K0
举报

小编邀请您,先思考:

1 XGBoost和GDBT算法有什么差异?

XGBoost的全称是 eXtremeGradient Boosting,2014年2月诞生的专注于梯度提升算法的机器学习函数库,作者为华盛顿大学研究机器学习的大牛——陈天奇。他在研究中深深的体会到现有库的计算速度和精度问题,为此而着手搭建完成 xgboost 项目。xgboost问世后,因其优良的学习效果以及高效的训练速度而获得广泛的关注,并在各种算法大赛上大放光彩。

1.CART

CART(回归树, regressiontree)是xgboost最基本的组成部分。其根据训练特征及训练数据构建分类树,判定每条数据的预测结果。其中构建树使用gini指数计算增益,即进行构建树的特征选取,gini指数公式如式(1), gini指数计算增益公式如式(2):

表示数据集中类别的概率,表示类别个数。

注:此处图的表示分类类别。

D表示整个数据集, 分别表示数据集中特征为的数据集和特征非的数据集, 表示特征为的数据集的gini指数。

以是否打网球为例(只是举个栗子):

其中,

最小,所以构造树首先使用温度适中。然后分别在左右子树中查找构造树的下一个条件。

本例中,使用温度适中拆分后,是子树刚好类别全为是,即温度适中时去打网球的概率为1。

2.Boostingtree

一个CART往往过于简单,并不能有效地做出预测,为此,采用更进一步的模型boosting tree,利用多棵树来进行组合预测。具体算法如下:

输入:训练集

输出:提升树

步骤:

(1)初始化

(2) 对m=1,2,3……M

a)计算残差

b)拟合残差 学习一个回归树,得到

c)更新

(3)得到回归提升树:

例子详见后面代码部分。

3.xgboost

首先,定义一个目标函数:

constant为一个常数,正则项 如下,

其中,T表示叶子节点数, 表示第j个叶子节点的权重。

例如下图,叶子节点数为3,每个叶子节点的权重分别为2,0.1,-1,正则项计算见图:

利用泰勒展开式

,对式(3)进行展开:

其中, 表示 的一阶导数, 表示 的二阶导数。 为真实值与前一个函数计算所得残差是已知的(我们都是在已知前一个树的情况下计算下一颗树的),同时,在同一个叶子节点上的数的函数值是相同的,可以做合并,于是:

通过对求导等于0,可以得到

带入得目标函数的简化公式如下:

目标函数简化后,可以看到xgboost的目标函数是可以自定义的,计算时只是用到了它的一阶导和二阶导。得到简化公式后,下一步针对选择的特征计算其所带来的增益,从而选取合适的分裂特征。

提升树例子代码:

# !/usr/bin/env python # -*- coding: utf-8 -*- # 目标函数为真实值与预测值的差的平方和 import math # 数据集,只包含两列 test_list = [[1,5.56], [2,5.7], [3,5.81], [4,6.4], [5,6.8],\ [6,7.05], [7,7.9], [8,8.7], [9,9],[10,9.05]] step = 1 #eta # 起始拆分点 init = 1.5 # 最大拆分次数 max_times = 10 # 允许的最大误差 threshold = 1.0e-3 def train_loss(t_list): sum = 0 for fea in t_list: sum += fea[1] avg = sum * 1.0 /len(t_list) sum_pow = 0 for fea in t_list: sum_pow =math.pow((fea[1]-avg), 2) return sum_pow, avg def boosting(data_list): ret_dict = {} split_num = init while split_num <data_list[-1][0]: pos = 0 for idx, data inenumerate(data_list): if data[0]> split_num: pos = idx break if pos > 0: l_train_loss,l_avg = train_loss(data_list[:pos]) r_train_loss,r_avg = train_loss(data_list[pos:]) ret_dict[split_num] = [pos,l_train_loss+r_train_loss, l_avg, r_avg] split_num += step return ret_dict def main(): ret_list = [] data_list =sorted(test_list, key=lambda x:x[0]) time_num = 0 while True: time_num += 1 print 'beforesplit:',data_list ret_dict =boosting(data_list) t_list =sorted(ret_dict.items(), key=lambda x:x[1][1]) print 'splitnode:',t_list[0] ret_list.append([t_list[0][0], t_list[0][1][1]]) if ret_list[-1][1]< threshold or time_num > max_times: break for idx, data inenumerate(data_list): if idx <t_list[0][1][0]: data[1] -=t_list[0][1][2] else: data[1] -=t_list[0][1][3] print 'after split:',data_list print 'split node andloss:' print'\n'.join(["%s\t%s" %(str(data[0]), str(data[1])) for data inret_list]) if __name__ == '__main__': main()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学与人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
30分钟学会XGBoost
xgboost是一种集成学习算法,属于3类常用的集成方法(bagging,boosting,stacking)中的boosting算法类别。它是一个加法模型,基模型一般选择树模型,但也可以选择其它类型的模型如逻辑回归等。
lyhue1991
2020/07/28
6800
30分钟学会XGBoost
超完整总结,XGBoost算法!!
XGBoost,全称为 eXtreme Gradient Boosting,是一种优化的分布式梯度提升库,设计用于高效、灵活和可移植的机器学习模型。
Python编程爱好者
2024/05/22
1.8K0
超完整总结,XGBoost算法!!
xgboost原理
文章内容可能会相对比较多,读者可以点击上方目录,直接阅读自己感兴趣的章节。
百川AI
2021/10/19
7890
XGBoost和LightGBM
这两个模型都属于集成学习中的树模型,每个机器学习模型都有它特定的应用场景,不同的数据集适合用到的模型是不一样的。
算法之名
2021/10/09
1.4K0
XGBoost和LightGBM
xgboost入门与实战(原理篇)
花了几天时间粗略地看完了xgboost原论文和作者的slide讲解,仅仅是入门入门入门笔记。给我的感觉就是xgboost算法比较复杂,针对传统GBDT算法做了很多细节改进,包括损失函数、正则化、切分点查找算法优化、稀疏感知算法、并行化算法设计等等。本文主要介绍xgboost基本原理以及与传统gbdt算法对比总结,后续会基于python版本做了一些实战调参试验。想详细学习xgboost算法原理建议通读作者原始论文与slide讲解。
全栈程序员站长
2022/08/13
1.3K0
xgboost入门与实战(原理篇)
【白话机器学习】算法理论+实战之Xgboost算法
如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法:
黄博的机器学习圈子
2020/05/26
3.9K0
【白话机器学习】算法理论+实战之Xgboost算法
机器学习7:集成学习--XGBoost
对于XGBoost算法原理看陈天奇的PPT和一份算法实战指导文档就够了(文末附网盘链接)。
用户5473628
2019/08/08
1.5K0
机器学习7:集成学习--XGBoost
机器学习笔记之机器学习算法XGBoost
在上一篇Boosting方法的介绍中,对XGBoost有过简单的介绍。为了更还的掌握XGBoost这个工具。我们再来对它进行更加深入细致的学习。
Jetpropelledsnake21
2021/03/04
2.6K0
机器学习笔记之机器学习算法XGBoost
一文掌握XGBoost核心原理
XGBoost是经典的提升树学习框架,其配套论文和PPT分享也相当经典,本文简单梳理其思路,原文见XGBoost原理简介。
用户2183996
2019/04/18
1.2K0
一文掌握XGBoost核心原理
我的XGBoost学习经历及动手实践
知乎地址:http://www.zhihu.com/people/meng-di-76-92
Datawhale
2020/06/23
1.7K0
机器学习——动手从决策树实现随机森林
今天是机器学习专题的第26篇文章,我们一起聊聊另外一个集成学习模型,它就是大名鼎鼎的随机森林。
TechFlow-承志
2020/06/24
7450
【机器学习】随机森林、GBDT、XGBoost、LightGBM等集成学习代码练习
对比了六大模型,可以看出,逻辑回归速度最快,但准确率最低。而LightGBM,速度快,而且准确率最高,所以,现在处理结构化数据的时候,大部分都是用LightGBM算法。
黄博的机器学习圈子
2023/01/10
1.1K0
重读XGBoost
在使用xgboost方法调参时,对其中个别参数不是特别理解。故重新读了一遍原论文。
何武凡
2023/03/09
7840
重读XGBoost
Adaboost, GBDT 与 XGBoost 的区别
最近总结树模型,尝试将主流 Boosting 实现方式做一个分析汇总,文中部分内容借鉴了知乎答案,已于参考链接中标识。
Ai学习的老章
2019/08/06
2.4K0
Adaboost, GBDT 与 XGBoost 的区别
XGBoost简单推导及理解
XGBoost的全称是eXtreme Gradient Boosting。作为一个非常有效的机器学习方法,Boosting Tree是数据挖掘和机器学习中最常用的算法之一。因为它效果好,对于输入要求不敏感,相对LR 的优势如不需要做特征的归一化,自动进行特征选择,模型可解释性较好,可以适应多种损失函数如 SquareLoss,LogLoss 等,往往是从统计学家到数据科学家必备的工具之一,它同时也是kaggle比赛冠军选手最常用的工具。最后,因为它的效果好,在计算速度和准确率上,较GBDT有明显的提升计算复杂度不高,也在工业界中有大量的应用。
大鹅
2021/06/16
8490
珍藏版 | 20道XGBoost面试题
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
MachineLP
2019/09/25
7370
珍藏版 | 20道XGBoost面试题
风控ML[18] | 风控建模中GBDT和XGBoost怎么调优
01 GBDT和XGBoost的原理介绍 02 GBDT和XGBoost的异同点分析 03 什么风控建模场景下常用这两个明星算法? 04 GBDT的评估与调参思路 05 XGBoost的评估与调参思路 06 总结一下
Sam Gor
2022/11/14
1.8K0
java落地AI模型案例分享:xgboost模型java落地
XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。
AI拉呱
2024/10/01
5460
java落地AI模型案例分享:xgboost模型java落地
XGBOOST从原理到实战:二分类 、多分类
xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛,其中包括两个以上kaggle比赛的夺冠方案。在工业界规模方面,xgboost的分布式版本有广泛的可移植性,支持在YARN, MPI, Sungrid Engine等各个平台上面运行,并且保留了单机并行版本的各种优化,使得它可以很好地解决于工业界规模的问题。 下载地址:直通车
学到老
2019/01/25
17.2K0
XGBOOST从原理到实战:二分类 、多分类
关于XGBoost、GBDT、Lightgbm的17个问题
9.lightgbm和xgboost有什么区别?他们的loss一样么?算法层面有什么区别?
Ai学习的老章
2019/10/22
5.3K0
关于XGBoost、GBDT、Lightgbm的17个问题
相关推荐
30分钟学会XGBoost
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档