【学习笔记】决策树 (1.简介+基本构建思想)

news2025/1/17 23:06:22

简单问题引入

如何判断今天是什么季节?春天、夏天、秋天、冬天?

如果是我们的话,可以通过日期一下子知道今天的季节——“7月份,所以是夏天!”大概是这样的发言。

但如果不让你通过日期来判断呢?选择还是很多的,比如说根据气温来判断或许也可行?如果今天天气非常非常冷,我可以认为,这一定是冬天;今天天气太热了,一定需要一根雪糕来解暑的程度,这一定是夏天;天气适宜的时候,难办了——可能是春天,可能是夏天,这个时候我们可以看看窗外,窗外的树上的叶子越来越多了,向着枝繁叶茂发展,那一定是春天;如果叶子越来越少,不断凋零,那想必一定是秋天。

我们来对这个不允许使用时间的判断方法进行解读。

我们发现,我们一共利用了周遭环境的两个属性:一是气温,气温有很高、很低和适宜三种情况;二是树叶生长情况,有不断生长和不断凋零两种状态。

我们可以通过这个判断方法画出如下的一个判断机制。
在这里插入图片描述
不难发现,这是一个树形结构。继续观察的话,可以发现更多的性质:

  1. 所有的叶子结点都是我们的选项
  2. 所有的非叶子结点都是一个对属性的判断(气温和树叶长落,这是我们刚刚对周遭环境分析出来的两个属性)
  3. 每一条边都是一个属性的判断,一个非叶子结点向各个子节点连接的边表示了对这个非叶子结点所讨论的属性的各种可能的情况。

这一棵树生动形象地将我们的判断过程表现了出来,从根节点不断进行判断可以一路走到叶子结点,从而得到我们所求的答案。这棵树就是一棵决策树

如果我们把这样的一棵树丢给计算机,当我们想知道今天属于什么季节的时候,把今天的气温、树叶长落的两个属性的属性值告诉这台计算机,计算机从根节点就可以一路走向叶子结点,从而告诉我们今天是春天、夏天、秋天,还是冬天。

这就是一棵决策树在做的事。

我们在训练模型的过程中对决策树有两种操作:一种是构造决策树,一种是利用决策树将所给的测试数据进行判断。

构建决策树简介

在训练模型的过程中,我们要通过所给的测试数据进行决策树的搭建。已知有 x x x个属性,利用决策树进行类别判断的时候,我们本质上是分别判断这 x x x个属性分别是什么来把类别看出来。为了提高分类的效率,我们希望可以尽可能早地排除尽可能多的错误选项

还是拿上图的决策树举例,判断季节我们用了两个属性,第一次判断,我们通过气温是很低、很高、适宜,将四个季节分为了三类;第二次判断利用了树叶的长落情况,区分了气温适宜的两个季节。

从判断的顺序来看,我们的顺序是先判断气温,后判断树叶长落。

或许我们可以反过来?是不是也可以先判断树叶长落,后判断气温呢?如果我们先判断树叶长落,那么决策树大概是这个样子:
在这里插入图片描述
看上去也是一种可行的方案。

不妨观察和最开始的那一棵决策树相比有什么区别。

  1. 无论是春夏秋冬哪一个季节,第二种决策树都要进行所有属性的判断,而第一种决策树,如果气温很高或很低,我们可以只需要对气温的判断就能知道季节。
  2. 对于第二种决策树,在作为第二个属性进行判断的气温属性,对应不同的树叶张落情况,其值域不太相同,当树叶生长时,气温的情况为适宜、很高;当树叶枯落时,气温的情况为适宜、很低。

从我们前面提到的需求来看(尽可能早地排除尽可能多的错误选项),第一个决策树会更好一些。

从决策树的应用角度考虑会更加清晰:通常使用决策树时都会给一组关于各个属性的数据,站在根节点上的时候,我们可选的选项为所有的选项,每当我们进行判断时,我们希望当前可选的选项要变得尽可能小。

从决策树的构建角度来看:通常我们会通过给定的很多很多组关于各个属性的数据(带有最终的选项的答案)去训练出一棵决策树,我们如何选定当前应该先进行哪一个属性的判断,使得我判断完之后,分类的效果最好,即对于这个属性的每一个可选值,其筛选出来的所有组数据的最终选项最倾向于统一。

什么叫最倾向于统一呢?还是以判断四季的情景为例,比如说训练决策树的过程中,我通过气温进行当前情况下的下一次判断,分类出来所有测试集数据选项如下:

在这里插入图片描述
观察到,很低和很高把最后的结果分成大部分为冬和全部为夏,全部为夏是最理想的,因为这完全起到了分类的效果,很多个冬里混了一个秋也还算不错,因为我们也能大体看出他应该是什么。气温适宜这个里面,一半是春,一半是秋,就有点混乱,不知道是春还是秋了。

这样,对于先进行气温属性的判断,最后的分类是否统一,就看很低、适宜、很高分类后的选项综合到一起是否倾向于统一。也就是说,要看气温属性的判断结果是不是统一,要综合看很低、适宜、很高的分类里面选项是否倾向于都是同一个选项。我们喜欢的就是倾向于同一个选项的,因为这符合尽可能早地排除尽可能多的错误选项的思想。

对于每一个非叶子结点,我们把所有当前还没有判断的属性的这样的是否统一的度量比较一下,选择一个最统一的属性作为当前情况的下一个判断的属性。

于是自然而然地引出了训练决策树的方法:我们通过训练集,从根节点开始构造。根节点处选择一个分类后最倾向于统一的属性,然后按照可选值域进行向下扩展,对于每一个子树的根节点,继续用同样的方法找出还没有判断过的属性中最倾向于统一的属性,把那个属性作为这个节点的判断属性。以此类推直到每一个分支都分出唯一的选项。

我们这里采用的是一个“统一”的定性的分析,但是在实现过程中,我们需要一个定量操作来判断他的“统一”性,于是引入了的概念。

大学物理中在热力学章节里学过这个概念,大体上是描述一个状态是否稳定。我们经常听到一个词叫做“熵增”,就是描述一个过程变得更加不稳定,或者更加混乱。

在决策树中也有这一概念。我们用来表示当前分类的混乱程度(这和熵原本的含义是相近的)。

是表示随机变量不确定性的度量。换句话说,就是当前物体内部的混乱程度。

H ( x ) H(x) H(x)表示 x x x状态的熵,那么有公式

H ( x ) = − ∑ i = 1 n p i × log ⁡ 2 p i H(x)=-\displaystyle\sum\limits_{i=1}^n p_i\times \log_2 p_i H(x)=i=1npi×log2pi

p i p_i pi表示 x x x状态中某一个选项出现的概率(或许频率这个词更好?)。

我们通常都用以 2 2 2为底的 log ⁡ \log log来算,但有少数情况也可以采用其他的底数,比如说差值太小太小,精度要求太高之类的情况。

熵是一个表示混乱程度的变量,也就是说我们希望熵本身越小越好。

引入熵的概念之后,我们可以通过熵来定量地观察接下来判断哪一个属性会使熵最小,每一个属性都计算出一个熵,选择一个熵最小的属性,用于下一个判断。

借用该视频中的一个例子,来看如何通过熵来构建一棵决策树。

例:给定14天的天气、温度、湿度、风的强度以及当天是否打球的数据,目标是构造一棵决策树。

14天的数据
不难发现,这个列表中,outlook、temperature、humidity、windy是自变量,play是因变量。换句话说,前四个是属性,最后一个是选项,选项有两种,分别是no和yes。

构造决策树,相当于考察各个属性之间的判断顺序。我们需要通过这些数据集来判断先进行哪一个属性的分类会使整体的熵最小。想看谁的熵最小,就需要对于每一个属性都假设其为第一个进行分类的属性,然后计算分类后的熵,再看看哪一个可以使当前熵下降的最多(和看哪一个的熵最小没有什么区别)。

4种属性的熵值计算方法相同,仅以outlook属性为例。以outlook属性为根节点处的分类属性后,大概分成了这个样子:

在这里插入图片描述
首先,我们计算一下选定第一个分类的属性之前的熵值。根据数据,数据集中有9天在打球,5天没有打球。此时的熵套入公式,为:

− 9 14 log ⁡ 2 9 14 − 5 14 log ⁡ 2 5 14 = 0.940 -\frac{9}{14}\log_2 \frac{9}{14}-\frac{5}{14}\log_2 \frac{5}{14}=0.940 149log2149145log2145=0.940

其中, 9 14 \frac{9}{14} 149为打球的概率, 5 14 \frac{5}{14} 145为不打球的概率。这两个数都是公式中 p i p_i pi中的取值。

接下来看sunny中有5天的数据记录,其中有2天打球,3天不打球,求得sunny情况下的熵为
− 2 5 log ⁡ 2 2 5 − 3 5 log ⁡ 2 3 5 = 0.971 -\frac{2}{5}\log_2 \frac{2}{5}-\frac{3}{5}\log_2 \frac{3}{5}=0.971 52log25253log253=0.971

rainy中有5天的数据记录,其中有3天打球,2天不打球,求得rainy情况下的熵为(不难看出其实和sunny一样)
− 3 5 log ⁡ 2 3 5 − 2 5 log ⁡ 2 2 5 = 0.971 -\frac{3}{5}\log_2 \frac{3}{5}-\frac{2}{5}\log_2 \frac{2}{5}=0.971 53log25352log252=0.971

overcast中有4天的数据记录,其中有4天打球,0天不打球,是最理想的统一状态,期望熵为0,但还是套一下公式看一看:
− 1 log ⁡ 2 1 = 0 -1\log_2 1=0 1log21=0

现在,outlook中的每一个取值中的熵算好了,现在要统合这三种情况的熵,将他们合为一个整体。具体的做法是,把三个熵按照其中数据集的大小加权起来求一个平均数。

换句话说,sunny在14组数据中出现了5次,权值就是\frac{5}{14};rainy在14组数据中出现了5次,权值就是\frac{5}{14};overcast在14组数据中出现了4次,权值就是\frac{4}{14}=\frac{2}{7}。

求得熵为加权平均数:
0.971 × 5 14 + 0.971 × 5 14 + 0 × 2 7 = 0.693 0.971\times \frac{5}{14}+0.971\times \frac{5}{14}+0\times \frac{2}{7}=0.693 0.971×145+0.971×145+0×72=0.693

那么这样分类之后,整体系统的熵值从原来的0.940下降至了0.693,变化量是0.247。

这里引入一个新的概念信息增益。不难看出,我们期待熵值下降,而且分类后熵值确实是下降,其下降的量是期待的数值,对我们来说属于一种增益,所以这个0.247就是这里的信息增益。

用同样的方式计算temperature、humidity、windy三个属性在作为第一次分类属性后系统的熵值,然后分别求得信息增益。

计算后求得,temperature分类后信息增益为0.029,humidity为0.152,windy为0.048。

不难看出,按照outlook属性作为第一次分类的属性,把outlook的分类放在根节点上,对系统而言是最优的。所以我们就把根节点设置为按照outlook分类。

那么接下来将问题分散到从根节点出发到sunny、rainy、overcast三棵子树上的子问题了。对于这些子问题,再分别计算temperature、humidity、windy三个属性给他们各自带来的信息增益,然后取那个信息增益最大的属性,作为这个子树里下一个要分类的属性。对于每一个子树,我们只尝试其祖先还没有进行分类的属性。这样以此类推,就可以建好整棵决策树。

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

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

相关文章

摸鱼快报:golang net/http中的雕虫小技

以后会开一个板块,摸鱼快报,快速记录这几周开发中雕虫小技, 也算一个错题集。1. 向开发环境localhost:3000种植cookie前端使用Create React App脚手架,默认以localhost:3000端口启动;后端使用golang-gin框架&#xff0…

python在多卡服务器中指定某块显卡允许程序 -- 本机为mac,服务器为Linux, nvidia

1 在pychram环境变量中设置 在pycharm端操作,操作步骤如下: (1)操作右上角:Edit Configurations... (2)在 Edit Configurations界面可以选择设置哪个程序的cuda,如图: (3&#xff0…

java基于ssm框架开发的视频论坛网站源码

简介 Java基于ssm开发的视频论坛网站,普通用户可以浏览视频搜索视频评论点赞收藏视频,关注用户。还可以浏览新闻,发布帖子到论坛。 演示视频 https://www.bilibili.com/video/BV15T4y1P7kk/?p2&share_sourcecopy_web&vd_sourceed0…

【阶段三】Python机器学习24篇:机器学习项目实战:XGBoost回归模型

本篇的思维导图: 项目实战(XGBoost回归模型) 项目背景 为了降低不良贷款率,保障自身资金安全,提高风险控制水平,银行等金融机构会根据客户的信用历史资料构建信用评分卡模型给客户评分。根据客户的信用得分,可以预估客户按时还款的可能性,并据此决定是否发放贷款…

DX-BT18 双模蓝牙模块介绍

DX-BT18双模蓝牙模块简介DX-BT18 双模蓝牙模块是深圳大夏龙雀科技有限公司专为智能无线数据传输而打造,遵循蓝牙4.2标准协议的双模蓝牙模块(Dual-Mode) 同时支持 BT3.0 Classic 和 BT4.2 BLE模式。 DX-BT18模块应用于无线数据传输领域&#x…

72.全卷积神经网络(FCN)及代码实现

语义分割是对图像中的每个像素分类。 全卷积网络(fully convolutional network,FCN)采用卷积神经网络实现了从图像像素到像素类别的变换 。 与我们之前在图像分类或目标检测部分介绍的卷积神经网络不同,全卷积网络将中间层特征图的…

【正点原子FPGA连载】 第十九章 LED灯闪烁实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十九章 LED灯闪…

聊聊Go与TLS 1.3

除了一些综述类文章和译文,我的文章选题多来源于实际工作和学习中遇到的问题。这次我们来聊聊近期遇到一个问题:如何加快基于TLS安全通信的海量连接的建连速度?TLS(Transport Layer Security)传输安全层的下面是TCP层,我们首先可能会想到的是…

【魅力开源】第4集:今天不讲ODOO,今天讲“中小企业的信息化如何做”

文章目录前言一、中小企业很重要二、企业全要素三、信息化逐步全面覆盖1. 信息化落地路径2. 消除信息孤岛是信息化的关键环节3. 中小企业信息化正在从产品市场向服务市场转变最后前言 在软件公司打补丁,我并不快乐 看到中小企业挣扎现状,让我痛苦 能够帮…

2023年最新黑马程序员Java微服务项目--学成在线

正式上线Java微服务项目《学成在线》 项目对程序员的重要性 不用播妞多说了吧 更重要的是 这次是完整!实战!企业级!项目! 划重点:全新发布!正式上线! 《学成在线》项目以在线教育业务为基础…

Spring AOP【用户登陆统一验证功能】

Spring AOP【用户登陆统一验证功能】🍎一. 用户登陆统一验证功能🍒1.1 用户登录验证的几种方法🍒1.2 创建前端页面🍒1.3 创建登陆方法和欢迎进入方法🍒1.4 自定义一个拦截器🍒1.5 验证拦截功能&#x1f349…

API--应用层之间的应用程序接口

API的前言互联网的应用特点是具有开放式的业务体系结构之一。关键的技术就是网络控制与应用层之间的应用程序接口--API。通过API接口很多问题便水到渠成,迎刃而解 。API到底是一种什么技术呢具有开放式的业务体系结构将是下一代网络的重要特征之一。其中&#xff0c…

干货 | APP和小程序在开发有什么区别?

随着互联网的不断进步,移动终端在生活中的应用也越来越多。 据工信部数据显示,截至2022年11月底,国内市场监测到的APP数量为272万款,其中App Store(中国区)的APP数量为136万款,本土第三方应用商店(主要是安…

数据库连接池监控的另类方案

如果这篇对你有帮助,还请麻烦转发。谢谢。数据库的连接池的监控的重要性假如,我们在公有云上存在一个数据库数据库实例X。公有云配置中已经说明X所支持的最大连接数是1000。如果数据库X的实际连接数达到了1000,那么,新的连接就无法…

输入的文本就能演奏一段爵士乐? #Riffusion

riff diffusion 是 stable diffusion 的微调模型,以生成频谱图图像来转换音乐。能产生更精准的声音模型叫:Riffusion。它能对音频进行剪辑处理,或者是无限地修改提示符。Riffusion图源:riffusion 官网频谱图频谱图是音频声波的视…

【超分综述】

A comprehensive review on deep learning based remote sensing image super-resolution methods (基于深度学习的遥感图像超分辨率方法综述) 卫星图像是地球科学领域各种应用的重要地理信息源。然而,由于光学和传感器技术的局限性以及传感器和设备更新的高成本&…

迅为i.MX8M Mini开发板debug调试方法(Qir trl RIL驱动不工作)

可能导致 Quectel RIL 操作失败的原因有很多。一些常见的原因如下所示,用于故障排除。 1 输入以下命令用于检查 ril daemon 的状态。如果未返回任何值,或者返回了 Stopped 或 Restarting 等 值而不是 Running,则表明 RIL 守护进程未运行。 ge…

时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测

时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测 目录 时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测预测效果基本介绍环境配置程序设计模型效果参考资料预测效果 基本介绍 使用时间注意卷积神经网络进行…

2023版大数据学习路线图(适合自学)

随着信息产业的迅猛发展,大数据应用逐渐落地,行业人才需求量逐年扩大。大数据成为目前最具前景的高薪行业之一,大数据分析工程师、大数据开发工程师等大数据人才也成为市场紧缺型人才,薪资一涨再涨。很多人想要加入到大数据开发行…

学会这几个方法,帮你轻松完成工作

方法一:分节 分节有比分页更体贴入微的分节功能。 “节”在word中是很重要的,它代表着文档中的标记。 分页只是视觉上产生了一个新页,分节让Word在内容上建立一个个不同的区域。 操作方法: 鼠标光标定位在需要分节的文档位置…