【机器学习】XGBoost集成算法——(理论+图解+python代码比较其他算法使用天池蒸汽数据)

一、集成算法思想

二、XGBoost基本思想

三、用python实现XGBoost算法


竞赛题中经常会用到XGBoost算法,用这个算法通常会使我们模型的准确率有一个较大的提升。既然它效果这么好,那么它从头到尾做了一件什么事呢?以及它是怎么样去做的呢?

我们先来直观的理解一下什么是XGBoost。XGBoost算法是和决策树算法联系到一起的。 

XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型

一、集成算法思想

在决策树中,我们知道一个样本往左边分或者往右边分,最终到达叶子结点,这样来进行一个分类任务。 其实也可以做回归任务。

该算法思想就是不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值

 

如下图例子,训练出了2棵决策树,小孩的预测分数就是两棵树中小孩所落到的结点的分数相加。爷爷的预测分数同理

 

看上面一个图例左边:有5个样本,现在想看下这5个人愿不愿意去玩游戏,这5个人现在都分到了叶子结点里面,对不同的叶子结点分配不同的权重项,正数代表这个人愿意去玩游戏,负数代表这个人不愿意去玩游戏。所以我们可以通过叶子结点和权值的结合,来综合的评判当前这个人到底是愿意还是不愿意去玩游戏。上面「tree1」那个小男孩它所处的叶子结点的权值是+2(可以理解为得分)。

用单个决策树好像效果一般来说不是太好,或者说可能会太绝对。通常我们会用一种集成的方法,就是一棵树效果可能不太好,用两棵树呢?

看图例右边的「tree2」,它和左边的不同在于它使用了另外的指标,出了年龄和性别,还可以考虑使用电脑频率这个划分属性。通过这两棵树共同帮我们决策当前这个人愿不愿意玩游戏,小男孩在「tree1」的权值是+2,在「tree2」的权值是+0.9, 所以小男孩最终的权值是+2.9(可以理解为得分是+2.9)。老爷爷最终的权值也是通过一样的过程得到的。

所以说,我们通常在做分类或者回归任务的时候,需要想一想一旦选择用一个分类器可能表达效果并不是很好,那么就要考虑用这样一个集成的思想。上面的图例只是举了两个分类器,其实还可以有更多更复杂的弱分类器,一起组合成一个强分类器。

 

二、XGBoost基本思想

XGBoost的集成表示是什么?怎么预测?求最优解的目标是什么?看下图的说明你就能一目了然。

600

在XGBoost里,每棵树是一个一个往里面加的,每加一个都是希望效果能够提升,下图就是XGBoost这个集成的表示(核心)。

一开始树是0,然后往里面加树,相当于多了一个函数,再加第二棵树,相当于又多了一个函数...等等,这里需要保证加入新的函数能够提升整体对表达效果。提升表达效果的意思就是说加上新的树之后,目标函数(就是损失)的值会下降。

如果叶子结点的个数太多,那么过拟合的风险会越大,所以这里要限制叶子结点的个数,所以在原来目标函数里要加上一个惩罚项「omega(ft)」。

 

这里举个简单的例子看看惩罚项「omega(ft)」是如何计算的:

一共3个叶子结点,权重分别是2,0.1,-1,带入「omega(ft)」中就得到上面图例的式子,惩罚力度和「lambda」的值人为给定。

XGBoost算法完整的目标函数见下面这个公式,它由自身的损失函数和正则化惩罚项「omega(ft)」相加而成。

关于目标函数的推导本文章不作详细介绍。过程就是:给目标函数对权重求偏导,得到一个能够使目标函数最小的权重,把这个权重代回到目标函数中,这个回代结果就是求解后的最小目标函数值,如下:

其中第三个式子中的一阶导二阶导的梯度数据都是可以算出来的,只要指定了主函数中的两个参数,这就是一个确定的值。下面给出一个直观的例子来看下这个过程。

(这里多说一句:Obj代表了当我们指定一个树的结构的时候,在目标上最多会减少多少,我们可以把它叫做结构分数,这个分数越小越好)

对于每次扩展,我们依旧要枚举所有可能的方案。对于某个特定的分割,我们要计算出这个分割的左子树的导数和和右子数导数和之和(就是下图中的第一个红色方框),然后和划分前的进行比较(基于损失,看分割后的损失和分割前的损失有没有发生变化,变化了多少)。遍历所有分割,选择变化最大的作为最合适的分割。

 

 GBDT与XGbost的区别

三、用python实现XGBoost算法代码

使用天池竞赛的蒸汽数据

xgboost回归对比线性回归 Ada、 GradientBoostingRegressor


train = pd.read_csv('./zhengqi_train.txt',sep = '\t')X = train.iloc[:,0:-1]
y = train['target']
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size =0.2)from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_errorlinear = LinearRegression()
linear.fit(X_train,y_train)print('r2_score',linear.score(X_test,y_test))
y1_ = linear.predict(X_test)
mean_squared_error(y_test,y1_)

r2_score 0.9035544162615812

from sklearn.ensemble import AdaBoostRegressor
ada = AdaBoostRegressor()
ada.fit(X_train,y_train)print('ada_score',ada.score(X_test,y_test))
y2_ = ada.predict(X_test)
mean_squared_error(y_test,y2_)

ada_score 0.8469280190502533

0.15315981475425688

from xgboost import XGBRegressor
xgb = XGBRegressor()
xgb.fit(X_train,y_train)print('xgb_score',xgb.score(X_test,y_test))
y3_ = xgb.predict(X_test)
mean_squared_error(y_test,y3_)

xgb_score 0.896815295803221

0.10324391232279032

from sklearn.ensemble import GradientBoostingRegressor
gbdt = GradientBoostingRegressor()
gbdt.fit(X_train,y_train)print('gbdt_score',gbdt.score(X_test,y_test))
y4_ = gbdt.predict(X_test)
mean_squared_error(y_test,y4_)

gbdt_score 0.8947755352826943

0.10528484327258612

推荐:

一文读懂机器学习大杀器XGBoost原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H.264的技术优势及其在H.323系统中的应用

一、引言 近年来,随着我国通信网络基础设施的快速建设,视讯业务由于可以为处于多点的与会者提供音视频等多种信息,节省大量费用,提高工作效率,因而发展迅速,并有望成为NGN的主要业务。视讯会议系统从产生至…

python中的列表

列表操作 一组有序数据的组合就是列表 创建列表 空列表 方式1:变量 []方式2: 变量 list() 具有一个数据的列表 变量 [值] 备注:列表中保存的每个都称之为元素具有多个数据的列表 变量 [值,值,值....]普通操作 访问列表中的元素 …

高通被欧盟指控垄断 或将面临高达25亿美元罚款

在被韩国指控违反反垄断规定后,高通近期又被欧盟指控以垄断方式排挤竞争对手。在11月10日的听证会上高通将回应有关指控。高通有可能因此遭受25亿美元的巨额罚款。 欧盟之前就曾经指出,高通在2009至2011年以低于成本价售卖部分基带芯片,将英国…

wireshark

wireshark使用: http://wenku.baidu.com/link?urljIT43RWZbHissG70TK_hqVKRO6KWNZ4nK9RfncaFA5p-mrmjxsNd2aIapcKTtDDAjG0mddEKiLtwbqpu3Z12bXStDiDevZUGWTPxop4mKhG wireshark开源代码相关: http://blog.csdn.net/zx824/article/details/7207713 转载于…

1万条数据大概占多大空间_国漫丨2019年上半年漫画数据报告

文 │ 骨朵国漫一、各漫画平台总体趋势1、快看漫画快看漫画平台2019年Q2各月评论数较Q1有较明显的下滑,月评论数都在400万条左右;收藏数方面,2019年2月达到了半年内最高值,为2660.1万条。2、看漫画、知音漫客等平台(小明太极旗下)…

【机器学习】 LightGBM——优于XGBoost提升的集成算法(安装+对比XGBoost改进+参数说明+python代码实例)

中文官方文档:http://lightgbm.apachecn.org/cn/latest/Installation-Guide.html 英文官方文档:https://lightgbm.readthedocs.io/en/latest/ 一、lightGBM安装 在anaconda中输入:pip install lightGBM即可 输入import lightgbm as lgb做测…

H.264简单总结

&#xff08;quan整理&#xff09;一、视频信息和信号的特点 < type"text/javascript">< type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> 1&#xff0e;1直观性 利用人的视觉系统&am…

轻量级代码生成器-OnlyCoder 第一篇

程序猿利器&#xff1a;代码生成器&#xff0c;使用代码生成器已经好几年了&#xff0c;增删改查各种生成&#xff0c;从UI到DATA层均生成过。之前有使用过动软的&#xff0c;T4模板等.... T4生成实体还是没有问题的&#xff0c;但是生成MVC视图就有点烦杂了&#xff0c;动软给…

python中的元组操作

元组操作 元组也是一组有序数据的组合&#xff0c;和列表唯一的不同是&#xff0c;元组不可修改 列表 用铅笔写的清单(能擦能改) 元组 用钢笔写的清单(不能擦改) 创建元组 创建空元组 方式1&#xff1a;变量 ()方式2&#xff1a; 变量 tuple() 创建单个元素的元组 方式1…

从Java到Go面向对象--继承思想.md

2019独角兽企业重金招聘Python工程师标准>>> Go语言实现继承 我们都知道Java中通过extends来实现对象的继承&#xff0c;那么Go中怎么实现继承呢&#xff1f;Go语言没有继承&#xff0c;只有组合。我们知道&#xff0c;继承的目的是什么&#xff0c;是类的重用&…

电脑键盘练习_电脑新手最关心的:零基础如何快速掌握电脑打字的技巧?

随着计算机的普及&#xff0c;越来越多的人在工作和生活中需要使用计算机。有的朋友通过参与培训学会了键盘打字&#xff0c;有的朋友自学成才学会了键盘打字。这里笔者给大家分享在0基础的情况下&#xff0c;通过自学快速掌握键盘打字的一种方法。需要说明的是&#xff0c;键盘…

【解决】jupyter在deepin安装上的坑

报错&#xff1a;env: "wine": 没有那个文件或目录 jupyter打开之后无法直接跳转浏览器 解决方法&#xff1a; 1、 生成配置文件jupyter notebook --generate-config 2、打开jupyter_notebook_config.py&#xff0c;在文件最后添加以下代码 选择你的浏览器位置 …

盐城出台推进大数据产业发展实施意见

日前&#xff0c;盐城市政府印发了《关于推进大数据产业发展的实施意见》&#xff08;下称《实施意见》&#xff09;&#xff0c;从指导思想、推进原则、发展目标、发展方向、重点工程和保障措施六个方面明确了盐城市加快培育和发展大数据产业的具体实施意见&#xff0c;这是该…

json字符串转换成json对象

Json字符与Json对象的相互转换方式有很多&#xff0c;接下来将为大家一一介绍下&#xff0c;感兴趣的朋友可以参考下哈&#xff0c;希望可以帮助到你1>jQuery插件支持的转换方式&#xff1a; 代码如下:$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串…

python中的字典

字典操作 以键值对方式存在的无序数据的组合就是字典 创建字典 创建空字典 方式1&#xff1a;变量 {}方式2&#xff1a; 变量 dict() 创建多个元素的字典 方式1&#xff1a;变量 {键:值,键:值....}方式2&#xff1a;变量 dict({键:值,键:值....})方式3&#xff1a;变量 …

【深度学习】Win10安装TensorFlow_gpu(避坑必看)

不用gpu的tensorflow 是没有灵魂的Tensorflow 因为就是为了快&#xff01;快二十倍 FIRST Q&#xff1a;系统及显卡版本问题&#xff01;!!! 到官网看&#xff01;别看别的博客 ~链接&#xff1a; Windows端&#xff1a;https://tensorflow.google.cn/install/source_wind…

SCL定时 1500_iPhone12开售当天黄牛加价1500,哪里买最划算?

10月23日&#xff0c;苹果iPhone12全系列正式开售。首批货源非常抢手&#xff0c;各地的苹果商店门口都排起了长队&#xff0c;现场黄牛甚至加价1500元收购用户手机。开卖首日热度高&#xff0c;官方最快一周发货据苹果官网介绍&#xff0c;此次iPhone12系列共有4款机型&#x…

H.264编解码

H.264是由ITU-T&#xff08;ITU Telecommunication Standardization Sector&#xff0c;国际电信联盟远程通信标准化组&#xff09;视频编码专家组&#xff08;VCEG&#xff09;和ISO/IEC动态图像专家组&#xff08;MPEG&#xff09;联合组成的联合视频组&#xff08;JVT&#…

Web开发基础

-------------------siwuxie095 HTML HTML 即 HyperText Markup Language&#xff0c;超文本标记语言 由服务器返回&#xff0c;浏览器呈现 服务器 即 HTTP 服务器&#xff0c;如&#xff1a;Apache、Nginx、Tomcat 一段 HTML 代码&#xff0c;可以是存放在 HTTP 服务器上的一个…

飞信即将归来:移动企业IM面临的三大难题

企业即时通讯(以下称“企业IM” ) 激战正酣&#xff0c;中国移动也有意搅局。中国移动方面日前向北京商报记者透露&#xff0c;中国移动的IM产品将于下月正式上线&#xff0c;此次中国移动拿出的是淡出人们视线许久的飞信。由于传统通信业务持续下滑&#xff0c;正在蓬勃发展的…