随机森林和gbdt结合_决策树与迭代决策树(GBDT)

ed4ead03fe33abc8e37e4d400ed3f58b.gif关注数学,关注AI,关注我们公众号ID:Math-AIc6d2f8322416e365bc3c133952c03707.pnged4ead03fe33abc8e37e4d400ed3f58b.gif2a4a772f814dba9060325bce3c3ca29e.gif7c86d5664175b85f10d5fe016ca11899.png22046a211c63b3fc5ff4370d7d31481f.png

阅读目录

1. 决策树的模型

2. 决策树的基本知识

3. ID3、C4.5&CART

4. Random Forest

5. GBDT

6. 参考内容

8acf25c64ef81687c9393906289f2864.png

  今天我们来谈一谈机器学习算法中的各种树形算法,包括ID3、C4.5、CART以及基于集成思想的树模型Random Forest和GBDT。本文对各类树形算法的基本思想进行了简单的介绍,重点谈一谈被称为是算法中的“战斗机”,机器学习中的“屠龙刀”的GBDT算法。

27b0df161108409369065436a0e2f930.png

1决策树的模型

  决策树是一种基本的分类与回归方法,它可以被认为是一种if-then规则的集合。决策树由节点和有向边组成,内部节点代表了特征属性,外部节点(叶子节点)代表了类别。

  下图为决策树的一个图例:

216df9e79539f5a2b83e9de82e234b46.png

  决策树根据一步步地属性分类可以将整个特征空间进行划分,从而区别出不同的分类样本,如下图所示:

d1bbdea254d3e0b30d239ca662d41e10.gif

  根据上图其实我们不难可以想到,满足样本划分的决策树有无数种,什么样的决策树才算是一颗好的决策树呢?

  性能良好的决策树的选择标准是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。言外之意就是说,好的决策树不仅对训练样本有着很好的分类效果,对于测试集也有着较低的误差率。

27b0df161108409369065436a0e2f930.png

2决策树的基本知识

  一个完整的决策树学习算法包含有三大步骤,分别为:

  1) 特征的选择;

  2) 决策树的生成;

  3) 决策树的剪枝。

  在介绍决策树学习算法之前,我们先简单谈几个基本的概念:

  1) 熵(entropy)

  在信息论和概率统计中,熵是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为:

P(X=xi)=pi, i=1,2, ... , n

则随机变量X的熵定义为:

H(X)=- ∑ pi * logpi, i=1,2, ... , n

  熵只依赖X的分布,和X的取值没有关系,熵是用来度量不确定性,当熵越大,概率说X=xi的不确定性越大,反之越小,在机器学期中分类中说,熵越大即这个类别的不确定性更大,反之越小,当随机变量的取值为两个时,熵随概率的变化曲线如下图:

5d38a713e7ae5a76c39b77f17757efa2.png

  当p=0或p=1时,H(p)=0,随机变量完全没有不确定性,

      当p=0.5时,H(p)=1,此时随机变量的不确定性最大。

  条件熵(conditional entropy):表示在一直随机变量X的条件下随机变量Y的不确定性度量。

  设随机变量(X, Y),其联合概率分布为 P(X, Y) = pij(i=1,2, ... , n; j=1,2, ... , m),随机变量X给定的条件下随机变量Y的条件熵H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:

H(Y|X)=∑ pi*H(Y|X=xi)

这里,pi=P(X=xi), i=1,2, ... , n.

  2) 信息增益(information gain)

  信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。

  特征A对训练数据集D的信息增益g(D, A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即

g(D, A)=H(D)-H(D|A)

  信息增益大的特征具有更强的分类能力。

  3) 信息增益比(information gain ratio)

  信息增益比gR(D, A)定义为其信息增益g(D, A)与训练数据集D关于特征A的值的熵HA(D)之比,即

gR(D, A)=g(D, A)/HA(D)

其中,HA(D)=-∑|Di|/|D|*log2|Di|/|D|, n是特征A取值的个数。

  4) 基尼指数(gini index)

  分类问题中,假设有K个类,样本属于第k类的概率为pk,则概率分布的基尼指数定义为:

Gini(p)=∑pk(1-pk)=1-∑pk2

  对于二分类问题,若样本点属于第1个类的概率是p,则概率分布的基尼指数为:

Gini(p)=2p(1-p)

  对于给定的样本集合D,其基尼指数为:

Gini(D)=1-∑(|Ck|/|D|)2

  这里,Ck是D中属于第k类的样本子集,k是类的个数。

  如果样本集合D根据特征A是否取到某一可能值a被分割成D1和D2两部分,则在特征A的条件下,集合D的基尼指数定义为:

Gini(D,A)=|D1|/|D|*Gini(D1)+|D2|/|D|*Gini(D2)

  基尼指数Gini(D)表示集合D的不确定性,基尼指数越大,样本集合的不确定性也就越大,这一点与熵相似。

27b0df161108409369065436a0e2f930.png

3ID3、C4.5&CART

  其实不同的决策树学习算法只是它们选择特征的依据不同,决策树的生成过程都是一样的(根据当前环境对特征进行贪婪的选择)。

  ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,每一次都选择使得信息增益最大的特征进行分裂,递归地构建决策树。

  ID3算法以信息增益作为划分训练数据集的特征,有一个致命的缺点。选择取值比较多的特征往往会具有较大的信息增益,所以ID3偏向于选择取值较多的特征。

  针对ID3算法的不足,C4.5算法根据信息增益比来选择特征,对这一问题进行了校正。

  CART指的是分类回归树,它既可以用来分类,又可以被用来进行回归。CART用作回归树时用平方误差最小化作为选择特征的准则,用作分类树时采用基尼指数最小化原则,进行特征选择,递归地生成二叉树。

  决策树的剪枝:我们知道,决策树在生成的过程中采用了贪婪的方法来选择特征,从而达到对训练数据进行更好地拟合(其实从极端角度来看,决策树对训练集的拟合可以达到零误差)。而决策树的剪枝是为了简化模型的复杂度,防止决策树的过拟合问题。具体的决策树剪枝策略可以参见李航的《统计学习方法》。

27b0df161108409369065436a0e2f930.png

4Random Forest

  随机森林是一种集成学习+决策树的分类模型,它可以利用集成的思想(投票选择的策略)来提升单颗决策树的分类性能(通俗来讲就是“三个臭皮匠,顶一个诸葛亮”)。

  集集成学习和决策树于一身,随机森林算法具有众多的优点,其中最为重要的就是在随机森林算法中每棵树都尽最大程度的生长,并且没有剪枝过程。

  随机森林引入了两个随机性——随机选择样本(bootstrap sample)和随机选择特征进行训练。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。

27b0df161108409369065436a0e2f930.png

5GBDT

  迭代决策树GBDT(Gradient Boosting Decision Tree)也被称为是MART(Multiple Additive Regression Tree))或者是GBRT(Gradient Boosting Regression Tree),也是一种基于集成思想的决策树模型,但是它和Random Forest有着本质上的区别。不得不提的是,GBDT是目前竞赛中最为常用的一种机器学习算法,因为它不仅可以适用于多种场景,更难能可贵的是,GBDT有着出众的准确率。这也是为什么很多人称GBDT为机器学习领域的“屠龙刀”。

  这么牛叉的算法,到底是怎么做到的呢?说到这里,就不得不说一下GBDT中的“GB”(Gradient Boosting)。Gradient Boosting的原理相当的复杂,但是看不懂它也不妨碍我们对GBDT的理解和认识,有关Gradient Boosting的详细解释请见wiki百科。

  在这里引用另外一个网友的解释来说明一下对GBDT中的Gradient Boosting的理解:

  以下一段内容引自《GBDT(MART) 迭代决策树入门教程 | 简介》。

  “Boosting,迭代,即通过迭代多棵树来共同决策。这怎么实现呢?难道是每棵树独立训练一遍,比如A这个人,第一棵树认为是10岁,第二棵树认为是0岁,第三棵树认为是20岁,我们就取平均值10岁做最终结论?当然不是!且不说这是投票方法并不是GBDT,只要训练集不变,独立训练三次的三棵树必定完全相同,这样做完全没有意义。之前说过,GBDT是把所有树的结论累加起来做最终结论的,所以可以想到每棵树的结论并不是年龄本身,而是年龄的一个累加量。GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。这就是Gradient Boosting在GBDT中的意义。”

  其实从这里我们可以看出GBDT与Random Forest的本质区别,GBDT不仅仅是简单地运用集成思想,而且它是基于对残差的学习的。我们在这里利用一个GBDT的经典实例进行解释。

  假设我们现在有一个训练集,训练集只有4个人,A,B,C,D,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工。如果是用一棵传统的回归决策树来训练,会得到如下图1所示结果:

7ed9d7dd1ee5c05972038c760b74866c.png

图1

  现在我们使用GBDT来做这件事,由于数据太少,我们限定叶子节点做多有两个,即每棵树都只有一个分枝,并且限定只学两棵树。我们会得到如下图2所示结果:

450fa29e01a47a0e8b6db0736647322f.png

图2

  在第一棵树分枝和图1一样,由于A,B年龄较为相近,C,D年龄较为相近,他们被分为两拨,每拨用平均年龄作为预测值。此时计算残差(残差的意思就是:A的预测值 + A的残差 = A的实际值),所以A的残差就是16-15=1(注意,A的预测值是指前面所有树累加的和,这里前面只有一棵树所以直接是15,如果还有树则需要都累加起来作为A的预测值)。进而得到A,B,C,D的残差分别为-1,1,-1,1。然后我们拿残差替代A,B,C,D的原值,到第二棵树去学习,如果我们的预测值和它们的残差相等,则只需把第二棵树的结论累加到第一棵树上就能得到真实年龄了。这里的数据显然是我可以做的,第二棵树只有两个值1和-1,直接分成两个节点。此时所有人的残差都是0,即每个人都得到了真实的预测值。

  最后GBDT的预测结果为:

  A: 14岁高一学生,购物较少,经常问学长问题;预测年龄A = 15 – 1 = 14;

  B: 16岁高三学生;购物较少,经常被学弟问问题;预测年龄B = 15 + 1 = 16;

  C: 24岁应届毕业生;购物较多,经常问师兄问题;预测年龄C = 25 – 1 = 24;

  D: 26岁工作两年员工;购物较多,经常被师弟问问题;预测年龄D = 25 + 1 = 26。

  那么哪里体现了Gradient呢?其实回到第一棵树结束时想一想,无论此时的cost function是什么,是均方差还是均差,只要它以误差作为衡量标准,残差向量(-1, 1, -1, 1)都是它的全局最优方向,这就是Gradient。

  注:

图1和图2 最终效果相同,为何还需要GBDT呢?答案是过拟合。过拟合是指为了让训练集精度更高,学到了很多“仅在训练集上成立的规律”,导致换一个数据集当前规律就不适用了。只要允许一棵树的叶子节点足够多,训练集总是能训练到100%准确率的。在训练精度和实际精度(或测试精度)之间,后者才是我们想要真正得到的。我们发现图1为了达到100%精度使用了3个feature(上网时长、时段、网购金额),其中分枝“上网时长>1.1h” 很显然已经过拟合了,这个数据集上A,B也许恰好A每天上网1.09h, B上网1.05小时,但用上网时间是不是>1.1小时来判断所有人的年龄很显然是有悖常识的;相对来说图2的boosting虽然用了两棵树 ,但其实只用了2个feature就搞定了,后一个feature是问答比例,显然图2的依据更靠谱。

  可见,GBDT同随机森林一样,不容易陷入过拟合,而且能够得到很高的精度。


  补充实例(2015-10-7)

  在此引用李航博士《统计学习方法》中提升树的实例来进一步阐述GBDT的详细流程。

  一直认为李航博士讲的机器学习更加贴近算法的本质,我们先来看一下他是如何对GBDT进行定义的(在《统计学习方法中》,GBDT又被称为是提升树boosting tree)。

  提升方法实际采用了加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树,对分类问题决策树是二叉分类树,而对于回归问题决策树是二叉回归树。提升树模型可以表示为决策树的加法模型:

519056c4a6b80a86d5bcca7bb4b678a1.png

其中,58641b355e80353b3c136fed94200979.png表示决策树;add5e8ab565edecee70df792af44e0a9.png表示决策树的参数;M为树的个数。

  针对不同问题的提升树(GBDT),其主要区别在于使用的损失函数不同,包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题。

  提升树的流程:

   2e3332dad2de3375e35dac21d6d92ace.png

af69dc454fe9c301eab2d232a2f01c83.png

  下面我们通过一个实例来透彻地来看一下提升树(GDBT)到底是怎样一步一步解决问题的。

      32fd9ec42787fba2b4ac68e31da69595.png

     e948d0e0b64cc141320ea39c229f9b82.png

     3f8984361c44d39cb8995f8c17c13a05.png

     2021c0f6342613b55fd9e25b29788cb9.png

     11ef8cdfbfb3c88b0baaae2cc7e21608.png

27b0df161108409369065436a0e2f930.png

6参考内容

  [1] 李航《统计学习方法》

  [2] GBDT(MART) 迭代决策树入门教程 | 简介

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

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

相关文章

猫眼html源码,50 行代码教你爬取猫眼电影 TOP100 榜所有信息

点击上方“CSDN”,选择“置顶公众号”关键时刻,第一时间送达!今天,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息。作者 | 丁彦军本文经授权转自「程序人生」对于 Python 初学者来说,爬虫技能是应…

JuJu团队1月4号工作汇报

JuJu团队1月4号工作汇报 JuJu Scrum 团队成员今日工作剩余任务困难飞飞将model嵌入GUI美化UI无婷婷调试代码提升acc无恩升--写python版本的evaluate.jl无金华修改loader待安排无胡凯--考试无陈灿协调协调无PM报告 整个项目的任务量预期为250 people*hour, 目前已经解…

大数据技术与应用实训心得_GXCGQ16D传感器与检测技术应用实训考核设备

(一)产品概述依据国家人力资源与社会保障部《技工院校工学结合课程教学改革试点工作方案》设计,围绕典型工作任务(即传感器实训模块)确定课程目标,选择课程内容,制定专业教学计划,根据国家职业标准中相关内容。将机电工学结合中有…

IIS 7.5绑定中文域名转码启动站点报“值不在预期的范围内”

问题现象 IIS 7.5在绑定中文域名转码后,启动站点会出现【值不在预期的范围内】: 解决方案此问题是由于中文域名绑定错误导致的,IIS 7.5针对中文域名会自动转换为punycode码,所以不需要绑定punycode码,如果要绑定中文域…

if判断代码 转变为 流程图

转换规则如下: if 代表一个菱形问号 if后面的条件代表菱形里的内容↓yes(向下箭头和yes) if同级的else代表右拐向下箭头和no 执行语句块代表一个矩形。 if 今天发工资:先还信用卡的钱if 有剩余:又可以happy了,O(∩_∩)O哈哈~else:…

刷新问题

最近新建立了一个MDI多文档工程,但不知道是何原因,只打开MDI父窗体进行界面界面就已经刷新不过来了,如果界面大小变化,更是不堪忍受,不知道是什么原因,而且我已经把窗体设置了不透明.页面的控件都变成模糊的,看不清,如下,请大家帮忙解决.转载于:https://www.cnblogs.com/bluecl…

jenkins修改pom文件_动手实践:美化 Jenkins 报告插件的用户界面

对于 Jenkins 而言,可使用插件来可视化各种构建步骤的结果。有一些插件可用于呈现测试结果、代码覆盖率、静态分析等。这些插件通常都会获取给定构建步骤的构建结果,并在用户界面中显示它们。为了呈现这些细节,大多数插件使用静态 HTML 页面&…

01:saltstack 基本使用

目录:zabbix其他篇 01:saltstack 基本使用 02:saltstack-api使用详解 目录: 1.1 准备实验环境: 安装系统1.2 克隆一台虚拟机完成使用环境1.3 saltstack介绍1.4 saltstack安装 1.5 saltstack常用模块 1.6 salt ssh详解 1.7 Salt Gr…

matlab批量修改txt内容_MATLAB作图实例:18:为饼图添加文本标签和百分比

创建饼图时,MATLAB会用切片所代表的整个饼图的百分比来标记每个饼图切片。您可以更改标签以显示不同的文本。简单文字标签用简单的文本标签创建一个饼图。x [1,2,3];pie(x,{Item A,Item B,Item C})带有百分比和文本的标签创建带有包含自定义文本和每个切片的预先计…

python 怎么算l2范数_数学推导+纯Python实现机器学习算法13:Lasso回归

版权说明:本公号转载文章旨在学习交流,不用于任何商业用途,版权归原作者所有,如有异议,敬请后台联络我们,议定合作或删除,我们将第一时间按版权法规定妥善处理,非常感谢!…

Java 8快多少?

Java SE 8已于昨天发布 。 传统上,每个新的主要JRE版本都提供免费的性能提升。 我们还能再得到免费的午餐吗? 这次收益有多大? 让我们对其进行基准测试。 基准方法 使用3个不同的JRE版本(SunJDK 1.6.0_26 ,OpenJDK 1…

Win10 OpenCV3.3.0+VS2013配置大坑,OpenCV解决方案编译报错“找不到python36_d.lib”错误...

今天因为想要用OpenCV做图像识别,小白一个,在网上找到一个教程,但是需要配置OpenCV3.3.0的环境,于是又在网上找OpenCV3.3.0VS2013(因为我之前已经安过了VS2013),前面的都顺利执行,但…

mvp的全称_是让人提神醒脑的 MVP、MVVM 关系精讲!

前言很高兴见到你!我是《Jetpack MVVM 精讲》的独立原创作者 KunMinX,GitHub star 8.7k,专注于深度思考和 Jetpack MVVM 的分享。关于 MVP 和 MVVM 本质和区别的文章,本来我是不想写的,因为经过长达一年的耳濡目染 和对…

链家广州二手房的数据与分析——爬取数据

之前在博客分享了利用 R 和 rvest 包爬虫的基础方法。现在就来实战一下:爬取链家网广州 40,000 套二手房的数据。 之前在 Web Scraping with R 说过的爬虫方法在这篇中就不在赘述了。这里就分享怎么样爬取网站中翻页的数据。 >> Web Scraping across Multiple…

Vue脚手架搭建项目

全局安装vue脚手架 $ npm install -g vue-cli 卸载方法 $ npm uninstall -g vue-cli 查看vue版本(注意:大写的V) $ vue -V 创建项目 $ vue init webpack vue-app ? Project name vue-app ? Project description Vue Project ? Author Pr…

es安全组端口_从零开始在远程服务器(Linux)上搭建es,eshead和ik分词器

一、资源准备远程服务器一个(本教程为CentOS 64位)注:ik分词器版本需与es版本统一jdk1.8.0elasticsearch-head-master.zip二、开放端口注:本例采用的是阿里云服务器1.登录阿里云,选择控制台2.找到左上角的三条白线--》…

sipp模拟freeswitch分机测试(SIP协议调试)

1、freeswitch安装 1) 网上很多安装方法都不靠谱,系统版本,各种依赖库一堆问题,下面是验证的可行的。 yum install -y http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm epel-releaseyum install -y freeswitch-config-vanill…

hd计算机技术,BD和HD的区别是什么?

BD和HD的区别是什么?我们在网上下载电影的时候,往往发帖子的童鞋会提示我们影片的规格,如所谓BD1280或者HD1024等等,一些朋友搞不清楚这是什么意思,实际上我们只能说BD和HD的区别是什么,关于1280和1024那完全是分辨率…

消息提示框-事件冒泡

1 <!DOCTYPE html>2 <html lang"en">3 4 <head>5 <meta charset"UTF-8">6 <title>事件冒泡-提示框</title>7 </head>8 <style>9 button {10 width: 160px;11 height: 30px;12 backgr…

我是如何解决asp.net程序在dreamWeaver中布局乱码的问题

每次把asp.net程序导入Dw2004中时&#xff0c;总是出现乱码&#xff0c;也不知道是什么原因。今天我就换了一个版本&#xff08;DW8&#xff09;&#xff0c;发现以前的问题全都没了。我想肯定是我的DW出现了问题&#xff0c;因为以前也出现过一次&#xff0c;也是重装后解决掉…