决策树原理详解_决策树的理解

决策树原理详解_决策树的理解决策树是机器学习中一种基本的分类和回归算法,是依托于策略抉择而建立起来的树。其主要优点是模型具有可读性,分类速度快,易于理解。决策树的思想主要来源于Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及有Breiman等人在1984年提出的CART算法。1.什么是决策树决策树简单来说就是带有判决规则(if-then)的一种树,可以依据树中的判决规则来预测未知样本的类…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

决策树是机器学习中一种基本的分类和回归算法,是依托于策略抉择而建立起来的树。其主要优点是模型具有可读性,分类速度快,易于理解。决策树的思想主要来源于Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及有Breiman等人在1984年提出的CART算法。

1.什么是决策树

决策树简单来说就是带有判决规则(if-then)的一种树,可以依据树中的判决规则来预测未知样本的类别和值。用一个网上通俗易懂的例子(相亲)来说明:

  • 女儿:年纪多大了?
  • 母亲:26
  • 女儿:长相如何?
  • 母亲:挺帅的
  • 女儿:收入如何?
  • 母亲:不算很高,中等情况
  • 女儿:是公务员不?
  • 母亲:是,在税务局上班
  • 女儿:那好,我去见见

    这个女孩的在决定是否去相亲的过程就是一个典型的分类决策过程。相当于通过年纪、长相、收入和是否公务员等标准来决定是否去相亲, 其决策过程可以用下面的决策树来表示:
    这里写图片描述
    简单来说,就是女孩会依据一定的规则来选择是否相亲。而且如果她事先将这个规则告诉自己的母亲,母亲就可以直接依据这个分类规则知道女儿是否想去参加这个相亲,即分类结果的

2.决策树模型和学习

定义: 决策树是一个属性结构的预测模型,代表对象属性和对象值之间的一种映射关系。它由节点(node)和有向边(directed edge)组成,其节点有两种类型:内节点(internal node)和叶节点(leaf node),内部节点表示一个特征或属性,叶节点表示一个类。
如上图所示的相亲例子,蓝色的椭圆内节点表示的是对象的属性,橘黄色的矩形叶节点表示分类结果(是否相亲),有向边上的值则表示对象每个属性或特征中可能取的值。

决策树的学习本质上是从训练集中归纳出一组分类规则,得到与数据集矛盾较小的决策树,同时具有很好的泛化能力。决策树学习的损失函数通常是正则化的极大似然函数,通常采用启发式方法,近似求解这一最优化问题。
决策树学习算法包含特征选择、决策树生成与决策树的剪枝。决策树表示的是一个条件概率分布,所以深浅不同的决策树对应着不同复杂程度的概率模型。决策树的生成对应着模型的局部选择(局部最优),决策树的剪枝对应着全局选择(全局最优)。决策树常用的算法有ID3,C4.5,CART,下面通过一个简单的例子来分别介绍这几种算法。

这里写图片描述

上图是一个比较典型的决策树分类用的贷款申请样本数据集:样本特征x(i)x(i) 的类型有年龄是否有工作、是否有房子和信贷情况,样本类别y(i)y(i) 取值是两类是、否,最终的分类结果就是根据样本的特征来预测是否给予申请人贷款。在介绍算法之前,我们先介绍几个相关的概念:

决策树原理详解_决策树的理解

决策树原理详解_决策树的理解

3.算法介绍

ID3算法

在前面我已经介绍了信息增益计算的方法,在ID3算法中,我们通过信息增益来选取相应的特征,首先计算每个特征对样本类别的信息增益:
决策树原理详解_决策树的理解
这里写图片描述
从图中可以看到,有房子的是肯定能够借到贷款的,没房子的,要依据别的条件继续判断。在没有房子的样本中,我们继续计算每个特征在此表上的增益,这样一直到所有样本完全分开就能得到一个适应样本集的决策树。本示例的最终决策树为:
这里写图片描述

算法具体实现将在下一章进行详细的说明。ID3算法只有树的生成,没有树的剪枝,所以容易产生过拟合现象。

C4.5算法

C4.5算法与ID3算法在整体流程上很相似,不同之处在于特征选择用的是信息增益,然后最后有剪枝的过程。依据信息增益率,我们来计算上述例子:

决策树原理详解_决策树的理解

通过上述计算可以看出,增益比最大的还是第三个特征:房子,因此还是选择第三个特征作为最优特征进行初始决策。

CART算法

CART算法主要有两部分组成:
(1) 决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量打。这与ID3算法类似,不同之处也是特征选取的方式;
(2) 决策树的剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,此时用损失函数最小作为剪枝的标准。
CART算法可以用于回归,即建立回归树。在终于分类时,其算法流程与ID3较为类似,不同的是特征选取,选择的是最小基尼指数。

4.决策树剪枝

决策树生成算法是递归地生成决策树,知道不能终止。这样产生的决策树往往分类精细,对训练数据集分类准确,但是对未知数据集却没有那么准确,有比较严重的过拟合问题。因此,为了简化模型的复杂度,使模型的泛化能力更强,需要对已生成的决策树进行剪枝。

决策树原理详解_决策树的理解
决策树的剪枝,就是在α确定时,选择损失函数最小的决策树。当α确定时,子树越大,模型复杂度越高,往往与训练数据拟合越好,但是在未知数据集上表现可能会较差;相反,子树越小,模型复杂度越低,训练数据拟合不好,但是泛化能力好。

转自:https://blog.csdn.net/zx10212029/article/details/49529843?utm_source=copy

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195860.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • SSL协议原理详解

    SSL协议原理详解SSL可参考:SSL技术原理SSL简介SSL和TLS:SSL(SecureSocketsLayer)安全套接层。是由Netscape公司于1990年开发,用于保障WordWideWeb(WWW)通讯的安全。主要任务是提供私密性,信息完整性和身份认证。1994年改版为SSLv2,1995年改版为SSLv3.TLS(TransportLayerSecurity)安全传输层协…

  • linux 通配符

    linux 通配符*–代表所有字符?-通配符,代表一个字符,一个?代表只匹配一个字符????4个?代表匹配4个字符;分号两个命令之间的分隔符#文件里面的注释|管道~用户家目录-上一次目

  • linux内核版本介绍_ubuntu内核版本查看

    linux内核版本介绍_ubuntu内核版本查看问题是否有Ubuntu版本列表,默认对应Linux内核版本?答案14.10WartyWarthog2.6.85.04HoaryHedgehog2.6.105.10BreezyBadger2.6.126.06DapperDrake2.6.156.10EdgyEft2.6.177.04FeistyFawn2.6.207.10GutsyGibbon2.6.228…

  • 项目开发过程中什么是开发环境、测试环境、生产环境、UAT环境、仿真环境?「建议收藏」

    项目开发过程中什么是开发环境、测试环境、生产环境、UAT环境、仿真环境?「建议收藏」项目开发过程中什么是开发环境、测试环境、生产环境、UAT环境、仿真环境?最近在公司项目开发过程中总用到测试环境,生产环境和UAT环境等,然而我对环境什么的并不是很理解它的意思,一直处于开发阶段,出于好奇,本人搜集了自己所了解的一些知识分享给各位,如果有不齐全的地方,请在评论下方留言!一、开发环境:开发环境是程序猿们专门用于开发的服务器,配置…

  • Java静态全局变量与全局变量的区别[通俗易懂]

    Java静态全局变量与全局变量的区别[通俗易懂]Static全局变量与普通的全局变量有什么区别?答:  全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个原文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量…

    2022年10月23日
  • python deepcopy函数实现_python 多线程

    python deepcopy函数实现_python 多线程我有一个非常简单的python例程,它涉及循环遍历大约20000个纬度、经度坐标的列表,并计算每个点到参考点的距离。defcompute_nearest_points(lat,lon,nPoints=5):”””FindthenearestNpoints,giventheinputcoordinates.”””points=session.query(PointInd…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号