决策树精讲

news2024/11/15 23:02:25

一、决策树的构造

决策树的构造是一个递归的过程,有三种情形会导致递归返回:(1)当前结点包含的样本全属于同一类别,这时直接将该结点标记为叶结点,并设为相应的类别;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该结点标记为叶结点,并将其类别设为该结点所含样本最多的类别;(3)当前结点包含的样本集合为空,不能划分,这时也将该结点标记为叶结点,并将其类别设为父结点中所含样本最多的类别。算法的基本流程如下图所示:

可以看出:决策树学习的关键在于如何选择划分属性,不同的划分属性得出不同的分支结构,从而影响整颗决策树的性能。属性划分的目标是让各个划分出来的子结点尽可能地"纯",即属于同一类别。因此下面便介绍量化纯度的具体方法,决策树最常用的算法是三种:ID3,C4.5和CART。

二、ID3算法

ID3算法使用信息增益为准则来选择划分属性,"信息熵(information entropy)"是度量样本结合纯度的常用指标,假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为:

假定通过属性划分样本集D,产生了V个分支结点,v表示其中第v个分支结点,易知:分支结点包含的样本数越多,表示该分支结点的影响力越大。故可以计算出划分后相比原始数据集D获得的"信息增益(information gain)"。

信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

缺点:

  • 无剪枝策略,容易过拟合;
  • 信息熵的设定使得更多取值种类数的特征的信息增益会很大。因为更多取值情况代表了树要分裂非常多的叶子结点,并且每个叶子结点上的样本数很少,越小的数据自己其"纯度"显然越容易高,导致了信息增益会很大。
  • 只能用于处理离散分布的特征并且只能处理分类问题
  • 没有考虑缺失值

三、C4.5算法

上面我们已经提到了,ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。因此C4.5算法使用了"增益率"(gain ratio)来选择划分属性,来避免这个问题带来的困扰。增益率定义为:

但是使用增益率可能产生另外一个问题,就是如果属性取值数目较少,我们来想一个比较极端的例子,假如属性只取一个值,属性熵就是0.我们知道一个数除以一个接近0的数,会变成无穷大。所以增益率可能会偏好取值比较少的属性。因此C4.5采用了一个启发式的算法,先从候选属性中找出高于平均水平的属性,再从高于平均水平的属性中选择增益率最高的属性。

3.1 连续值处理

C4.5算法讲连续的属性进行离散化,离散化策略就是二分法。

对于离散变量,在前一轮被当作划分属性之后,下一轮就不能当作候选属性来被选作划分属性了,但是连续变量在这一轮当作划分属性之后,下一轮仍然可以当作候选属性来被选作划分属性。

3.2 缺失值处理

对于缺失值,我们需要解决两个问题:(1)如何在属性值缺失的情况下进行划分属性选择?(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?

3.3 剪枝处理

从决策树的构造流程中我们可以直观地看出:不管怎么样地训练集,决策树总是能很好地讲各个类别分离开来,这时就会遇到之前提到过地问题:过拟合(overfitting),即太依赖训练样本。剪枝(pruning)则是决策树算法对付过拟合地主要手段,剪枝的策略有两种如下:

  • 预剪枝(prepruning):在构造的过程中先评估,再考虑是否分支。
  • 后剪枝(post-pruning):在构造好一颗完整的决策树后,自底向上,评估分支的必要性。

评估指的是性能度量,即决策树的泛化性能。之前提到:可以使用测试集作为学习器泛化性能的近似,因此可以讲数据集划分为训练集和测试集。预剪枝表示在构造数的过程中,对一个节点考虑是否分支时,首先计算决策树不分枝时在测试集上的性能,再计算分支之后的性能,若分支对性能没有提升,则选择不分支(即剪枝)。后剪枝则表示再构造好一颗完整的决策树后,从最下面的节点开始,考虑该节点分支对模型的性能是否有提升,若无则剪枝,即将该节点标记为叶子节点,类别标记为其包含样本最多的类别。

上图分别表示不剪枝处理的决策树,预剪枝决策树和后剪枝决策树。预剪枝处理使得决策树的很多分支被剪掉,因此大大降低了训练时间开销,同时降低了过拟合的风险,但另一方面由于剪枝同时剪掉了当前节点后续子节点的分支,因此预剪枝”贪心“的本质阻止了分支的展开,在一定程度上带来了欠拟合的风险。而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自底向上遍历了所有节点,并计算性能,训练时间开销相比预剪枝大大提升。

C4.5算法采用的后剪枝。

C4.5算法虽然解决了ID3的一些缺陷,但是其本身也有一些不足:

(1)C4.5生成的是多叉树,一个父节点可以有多个子节点。计算的时候,运算效率没有二叉树高;

(2)C4.5使用熵模型,里面有大量的对数运算。如果是连续值的属性,还涉及到排序运算,运算量很大。

四、CART(classification and rregression tree)

CART既可以处理分类问题,有可能处理回归问题。对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。

4.1 回归树的生成

每个叶子节点都对应一个样本的小区域,对应的y值就是这些样本的目标值的均值。在预测阶段,一个样本落到一个叶子节点之后,该区域的目标值的均值就是该样本的预测值。

4.2 分类树的生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

因此我们每次都选GINi(D,A)最小的特征A作为划分属性。

4.3 CART剪枝

CART剪枝算法从"完全生长"的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测。CART剪枝算法由两步组成:首先从生成算法产生的决策树 �0 底端开始不断剪枝,直到�0的根节点,形成一个子树序列 {�0,�1,...,��} ;然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

缺失值的处理参考下面的文章:

马东什么:决策树 ID3 C4.5 cart 总结45 赞同 · 16 评论文章正在上传…重新上传取消

马东什么:ID3、c4.5、cart、rf到底是如何处理缺失值的?32 赞同 · 7 评论文章

最后说明下基尼指数、熵、分类误差率三者之间的关系

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

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

相关文章

消息队列选型——为什么选择RabbitMQ

前言 MQ消息是目前分布式系统必不可少的组件,但是面对市面上众多的MQ组件,我们该用什么呢?我以实际项目的需求触发,介绍今天的主角——rabbitMQ。同时也会告知又有哪些优势和不足。事不宜迟,就开始今天的学习吧 目录…

ghost cms配置qq邮箱

背景: 在ghost cms中使用qq邮箱作为注册、登录、订阅等邮件发送方。 1 修改配置 在config.*.json文件中,添加mail配置 "mail": {"from": "xxxxxxqq.com","transport": "SMTP","options"…

Qt6 FFmpeg入门1 - 环境配置

目录 环境配置ffmpeg 下载qt 配套环境配置代码测试 环境配置 文章更新时间:2023/06/24 ffmpeg 下载 由于大部分的关于配置 ffmpegqt 环境的文章都停留在 2021 年,且许多方法均已过时,现在介绍一个最新的方法,并分析槽点供大家参考…

ElementUI在对话框中新增数据,使用rules校验规则进行校验,再点击完修改之后,在进行新增校验会报错

1.新增与修改使用同一个对话框,当修改完成一条数据后,重新打开新增的对话框,通过ElementUI的rules检验会报错 解决方案:在对应的rules校验中每个字段添加trigger: blur 即可解决上述问题,注意:下面的xxx代表需要校验的…

设计模式-05.01-行为型-观察者模板

观察者模式【常用】 我们常把 23 种经典的设计模式分为三类:创建型、结构型、行为型。前面我们已经学习了创建型和结构型,从今天起,我们开始学习行为型设计模式。我们知道,创建型设计模式主要解决“对象的创建”问题,…

工具篇7--RocketMq消息模型介绍

文章目录 前言:一、RocketMq是什么?二、RocketMq 模型介绍:1.RocketMq 模型图:2.RocketMq 生产者:2.1 生产者消费发送流程:2.2 生产者消息发送:2.2.1 同步发送普通消息:2.2.1 异步发…

AI大模型及算力要求

AI大模型对算力的要求非常高,需要高性能的硬件设备和分布式训练技术来支持。随着AI技术的不断发展,未来可能会出现更大、更复杂的模型,对算力的要求也将更高。今天和大家分享几个大模型及算力要求,希望对大家有所帮助。北京木奇移…

DETR系列:RT-DETR实战部署

上篇文章介绍RT-detr的论文内容(RT-DETR 论文解析),本篇文章介绍算法复现、tensorRT加速、python调用部署、训练等方法。 RT-DETR实战部署 1.复现模型详情2.环境准备3.训练4.部署5.测试 1.复现模型详情 本次复现主要测试下表中RT-DETR-R50和…

Kafka集群模式核心概念

文章目录 1.Kafka集群模式下Broker|主题|分区|副本的概念1.1.Broker|主题|分区|副本的概念1.2.创建一个Topic指定3个副本数1.3.多副本的Topic详细信息描述 2.集群模式下以消费者组消费Topic中各分区消息的概念2.1.分消费者组消费各分区的概念2.2.集群模式下消息的发送和消费 3.…

Go 语言中 Context 的作用和使用方法详解

KDP(数据服务平台)是一款由 KaiwuDB 独立自主研发的数据服务产品,以 KaiwuDB 为核心,面向 AIoT 场景打造的一站式数据服务平台,满足工业物联网、数字能源、车联网、智慧产业等行业核心业务场景下数据采集、处理、计算、…

在Azure SQL DB/Azure托管实例里快速查询各数据库大小以及每个数据库下表的大小

目录 (一)前言 (二)正文 1. 环境: 2. 查看实例下每个数据库的空间大小 (1) SQL语法 (2)运行结果 3. 查看特定数据库下每张表的大小 (1)SQ…

一个sql中的一张表,最多只会走一个索引吗

目录 先给结论 做实验 1.根据时间范围查询 什么是key_len? 2.根据时间范围和 is_delete 查询 最左匹配原则 2.根据时间范围和 blog_type 查询 如果加上id会怎么样 并不是索引一定会走 1.IN子表数量过多 2.单次查询超过30% 先给结论 先说结论,…

设计模式第14讲——享元模式(Flyweight)

目录 一、什么是享元模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 代码结构 5.1 Bike——抽象享元类(FlyWeight) 5.2 具体享元类(ConcreteFlyWeight) 5.3 BikeFactory——享元…

layui框架学习(28:穿梭框模块)

Layui模块中的穿梭框模块transfer主要支撑穿梭框组件的显示、交互等操作。所谓穿梭框是指左右各有一个复选框列表,可以将左侧选中的项目移动到右边,后者将右侧的选中项移回左边的控件,其样式类似下图所示(参考文献5-6)…

TI AM62x工业开发板规格书(单/双/四核ARM Cortex-A53 + 单核ARM Cortex-M4F,主频1.4GHz)

1 评估板简介 创龙科技TL62x-EVM是一款基于TI Sitara系列AM62x单/双/四核ARM Cortex-A53 单核ARM Cortex-M4F多核处理器设计的高性能低功耗工业评估板,由核心板和评估底板组成。处理器ARM Cortex-A53(64-bit)主处理单元主频高达1.4GHz,ARM Cortex-M4F实…

如何使用 Flink SQL 探索 GitHub 数据集|Flink-Learning 实战营

为进一步帮助开发者学习使用 Flink,Apache Flink 中文社区近期发起 Flink-Learning 实战营项目。本次实战营通过真实有趣的实战场景帮助开发者实操体验 Flink,课程包括实时数据接入、实时数据分析、实时数据应用的场景实。并结合小松鼠助教模式&#xff…

USR-C216 WIIF连接手机

复位后连接USR-C216无线 浏览器输入10.10.100.254 账号密码为admin 客户端模式服务器地址无效,默认就行 打开手机网络调试助手选择客户端模式,输入10.10.100.254,端口8899 可以透传了 关于AT指令,先发“”,然后3s内发…

【数据管理架构】什么是 OLTP?

OLTP(在线事务处理)支持在 ATM 和在线银行、收银机和电子商务以及我们每天与之交互的许多其他服务背后进行快速、准确的数据处理。 什么是 OLTP? OLTP 或在线事务处理允许大量人员(通常通过 Internet)实时执行大量数据…

基于Vue+Node.js的宠物领养网站的设计与开发-计算机毕设 附源码83352

基于VueNode.js的宠物领养网站的 摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络…

【国产FPGA应用】紫光Pango Design联合 Modelsim 仿真方法

Modelsim 是 FPGA 开发中重要的 EDA 设计仿真工具,主要用于验证数字电路设计是否正确。我们经常用Xilinx的ISE或者Vivado与Modelsim进行联合仿真,其实国产FPGA开发工具也可以与Modelsim进行联合仿真,对于设计比较复杂的应用还是非常方便的&am…