决策树算法:ID3,C4.5,CART

news2025/1/13 19:55:28

目录

ID3

C4.5

CART

总结


对于基本树我将大致从以下四个方面介绍每一个算法:思想、划分标准、剪枝策略,优缺点

ID3

ID3 算法是建立在奥卡姆剃刀(用较少的东西,同样可以做好事情)的基础上:越是小型的决策树越优于大的决策树。

1.1 思想

从信息论的知识中我们知道:期望信息越小,信息熵越大,从而样本纯度越低

ID3 算法的核心思想就是以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间(C4.5 也是贪婪搜索)。

其大致步骤为:

  1. 初始化特征集合和数据集合;

  2. 计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点

  3. 更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);

  4. 重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。

1.2 划分标准

ID3 使用的分类标准是信息增益,它表示得知特征 A 的信息而使得样本集合不确定性减少的程度。

数据集的信息熵:

图片

其中  表示集合 D 中属于第 k 类样本的样本子集。

针对某个特征 A,对于数据集 D 的条件熵 H(D|A) 为:

图片

其中  表示 D 中特征 A 取第 i 个值的样本子集, 表示  中属于第 k 类的样本子集。

信息增益 = 信息熵 - 条件熵:

图片

信息增益越大表示使用特征 A 来划分所获得的“纯度提升越大”。

1.3 缺点

  • ID3 没有剪枝策略,容易过拟合;

  • 信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;

  • 只能用于处理离散分布的特征;

  • 没有考虑缺失值。

C4.5

C4.5 算法最大的特点是克服了 ID3 对特征数目的偏重这一缺点,引入信息增益率来作为分类标准。

2.1 思想

C4.5 相对于 ID3 的缺点对应有以下改进方式:

  • 引入悲观剪枝策略进行后剪枝;

  • 引入信息增益率作为划分标准

  • 将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;

  • 对于缺失值的处理可以分为两个子问题:1. 在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)2. 选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)

    • 针对问题一,C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;

    • 针对问题二,C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。

2.2 划分标准

利用信息增益率可以克服信息增益的缺点,其公式为

2.3 剪枝策略

为什么要剪枝:过拟合的树在泛化能力的表现非常差。

2.3.1 预剪枝

在节点划分前来确定是否继续增长,及早停止增长的主要方法有:

  • 节点内数据样本低于某一阈值

  • 所有节点特征都已分裂;

  • 节点划分前准确率比划分后准确率高。

预剪枝不仅可以降低过拟合的风险而且还可以减少训练时间,但另一方面它是基于“贪心”策略,会带来欠拟合风险。

2.3.2 后剪枝

在已经生成的决策树上进行剪枝,从而得到简化版的剪枝决策树。

C4.5 采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。C4.5 通过训练数据集上的错误分类数量来估算未知样本上的错误率。

后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但同时其训练时间会大的多。

2.4 缺点

  • 剪枝策略可以再优化;

  • C4.5 用的是多叉树,用二叉树效率更高;

  • C4.5 只能用于分类;

  • C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;

  • C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。

CART

ID3 和 C4.5 虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但是其生成的决策树分支、规模都比较大,CART 算法的二分法可以简化决策树的规模,提高生成决策树的效率。

3.1 思想

CART 包含的基本过程有分裂,剪枝和树选择。

  • 分裂:分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;

  • 剪枝:采用代价复杂度剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象,直到只剩下根节点。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;

  • 树选择:用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证)。

CART 在 C4.5 的基础上进行了很多提升。

  • C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;

  • C4.5 只能分类,CART 既可以分类也可以回归

  • CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;

  • CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;

  • CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。

3.2 划分标准

熵模型拥有大量耗时的对数运算,基尼指数在简化模型的同时还保留了熵模型的优点。基尼指数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(率)正好相反。

 

3.3 缺失值处理

模型对于缺失值的处理会分为两个子问题:

1. 在特征值缺失的情况下进行划分特征的选择?

2. 选定该划分特征,对于缺失该特征值的样本如何处理?

对于问题 1,CART 一开始严格要求分裂特征评估时只能使用在该特征上没有缺失值的那部分数据,在后续版本中,CART 算法使用了一种惩罚机制来抑制提升值,从而反映出缺失值的影响(例如,如果一个特征在节点的 20% 的记录是缺失的,那么这个特征就会减少 20% 或者其他数值)。

对于问题 2,CART 算法的机制是为树的每个节点都找到代理分裂器,无论在训练数据上得到的树是否有缺失值都会这样做。在代理分裂器中,特征的分值必须超过默认规则的性能才有资格作为代理(即代理就是代替缺失值特征作为划分特征的特征),当 CART 树中遇到缺失值时,这个实例划分到左边还是右边是决定于其排名最高的代理,如果这个代理的值也缺失了,那么就使用排名第二的代理,以此类推,如果所有代理值都缺失,那么默认规则就是把样本划分到较大的那个子节点。代理分裂器可以确保无缺失训练数据上得到的树可以用来处理包含确实值的新数据。

3.4 剪枝策略

采用一种“基于代价复杂度的剪枝”方法进行后剪枝,这种方法会生成一系列树,每个树都是通过将前面的树的某个或某些子树替换成一个叶节点而得到的,这一系列树中的最后一棵树仅含一个用来预测类别的叶节点。然后用一种成本复杂度的度量准则来判断哪棵子树应该被一个预测类别值的叶节点所代替。这种方法需要使用一个单独的测试数据集来评估所有的树,根据它们在测试数据集熵的分类性能选出最佳的树。

超详细决策树算法解析—ID3、C4.5、CART

总结

最后通过总结的方式对比下 ID3、C4.5 和 CART 三者之间的差异。

除了之前列出来的划分标准、剪枝策略、连续值确实值处理方式等之外,我再介绍一些其他差异:

  • 划分标准的差异:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺点,偏向于特征值小的特征,CART 使用基尼指数克服 C4.5 需要求 log 的巨大计算量,偏向于特征值较多的特征。

  • 使用场景的差异:ID3 和 C4.5 都只能用于分类问题,CART 可以用于分类和回归问题;ID3 和 C4.5 是多叉树,速度较慢,CART 是二叉树,计算速度很快;

  • 样本数据的差异:ID3 只能处理离散数据且缺失值敏感,C4.5 和 CART 可以处理连续性数据且有多种方式处理缺失值;从样本量考虑的话,小样本建议 C4.5、大样本建议 CART。C4.5 处理过程中需对数据集进行多次扫描排序,处理成本耗时较高,而 CART 本身是一种大样本的统计方法,小样本处理下泛化误差较大 ;

  • 样本特征的差异:ID3 和 C4.5 层级之间只使用一次特征,CART 可多次重复使用特征;

  • 剪枝策略的差异:ID3 没有剪枝策略,C4.5 是通过悲观剪枝策略来修正树的准确性,而 CART 是通过代价复杂度剪枝。

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

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

相关文章

Qt --- 显示相关设置 窗口属性等

主界面,窗口 最小化 最大化 关闭按钮、显示状态自定义: setWindowFlags(Qt::CustomizeWindowHint); setWindowFlags(Qt::WindowCloseButtonHint); //只要关闭按钮 setWindowFlags(Qt::WindowFlags type) Qt::FrameWindowHint:没有边框的窗口 Qt::Window…

8年测试经验之谈 —— 接口自动化测试requests

1.什么是requests? requests是一个Python第三方库,处理URL资源特别方便 2.安装requests pip3 install requests 如果遇到Permission denied安装失败,请加上sudo重试 3.使用requests 3.1get请求方法 3.1.1基本的get请求 import reques…

RFID读写头在工业产线中的应用有哪些

现如今,随着RFID技术的发展,成本的降低,RFID技术在工业上的应用已经是一件很常见的事情了,越来越多的企业、工厂选择将RFID技术应用在工业生产中,助力企业/工厂加速迈步走向信息化、自动化。 在工业产线中&#xff0c…

向量数据库(第 2 部分):了解其内部结构

这是关于向量数据库的系列文章中的第二篇。正如本系列的第一篇所提到的,2023年上半年关于向量数据库的营销(不幸的是,有些是炒作)非常多,如果你正在阅读这篇文章,你可能对向量数据库在底层是如何工作的&…

gitee创建仓库并上传代码实操记录

1、创建demo库 2、复制地址 3、下载到本地 4、复制文件至demo文件夹下 5、设置忽略文件 编辑文件.gitignore 替换为: # Created by .ignore support plugin (hsz.mobi) /target/* !.mvn/wrapper/maven-wrapper.jar src/test/ ### STS ### .apt_generated .clas…

决策树算法:它们无处不在【01/2】

一、说明 本文首先叙述决策树的概念,进而展开决策树的原理,以及支持理论信息熵,对决策树进行全面描述,如果 您想知道的有关决策树、理论和实施的所有信息,请看此文。 二、介绍 “两条路在一片树林里分道扬镳&#xff0…

k8s之工作负载、Deployment、DaemonSet、StatefulSet、Job、CronJob及GC

文章目录 1、工作负载1.1、定义1.2、分类 2、Deployment2.1、定义2.2、Deployment创建2.3、Deployment 更新机制2.3.1、比例缩放(Proportional Scaling)2.3.2、HPA(动态扩缩容)2.3.2.1、需要先安装metrics-server2.3.2.2、配置hpa…

【LeetCode】1448.统计二叉树中好节点的数目

题目 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 输入:root [3,1,4,3,null,1,5] 输出:4 …

java开发之fastjson

依赖 <!-- fastjson依赖 --> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> <…

php_webshell免杀--从0改造你的AntSword

0x00 前言&#xff1a; 为什么会有改造蚁剑的想法&#xff0c;之前看到有做冰蝎的流量加密&#xff0c;来看到绕过waf&#xff0c;改造一些弱特征&#xff0c;通过流量转换&#xff0c;跳过密钥交互。 但是&#xff0c;冰蝎需要反编译去改造源码&#xff0c;再进行修复bug&am…

CSS3盒模型+flex

1.盒模型 标准盒模型: wwidthpaddingborderhheightpaddingborder 怪异盒模型(ie盒模型) wwidth包含了(paddingborder)hheight包含了(paddingborder) 2.CSS3弹性盒(重点新版弹性盒) 弹性盒: 设置为弹性盒后,父元素为容器,子元素为项目弹性盒中存在两根轴,默认水平为主轴,垂…

.netcore grpc截止时间和取消详解

一、截止时间概述 截止时间功能让 gRPC 客户端可以指定等待调用完成的时间。 超过截止时间时&#xff0c;将取消调用。 设定一个截止时间非常重要&#xff0c;因为它将提供调用可运行的最长时间。它能阻止异常运行的服务持续运行并耗尽服务器资源。截止时间对于构建可靠应用非…

Qt跨平台无边框窗口探索记录

一、前言 实现的效果为&#xff1a;通过黑色矩形框预操作&#xff0c;鼠标释放时更新窗口。效果图如下&#xff1a; 1.功能 1.1 已实现功能 8个方向的缩放标题栏拖动标题栏双击最大化/正常窗口窗口最小尺寸预操作框颜色与背景色互补多屏幕默认标题栏 1.2 待开发功能 拖动到…

张驰咨询:六西格玛培训哪家好?2024年最新推荐榜单来了!

随着2024年的到来&#xff0c;越来越多的企业和个人开始关注六西格玛&#xff08;6σ&#xff09;管理&#xff0c;以提高工作效率和质量。那么&#xff0c;在众多提供六西格玛培训的机构中&#xff0c;哪家好呢&#xff1f;张驰咨询将为您详细解析。 一、六西格玛培训背景 六…

vue项目引入svg组件全过程

文件格式 svg下方对应 .svg index.vue svg-icon 组件 <template><svg:viewBox"viewBox"xmlns"http://www.w3.org/2000/svg"xmlns:xlink"http://www.w3.org/1999/xlink"ref"svg"class"svg-icon":class"class…

Java 小白也能学会OOM内存溢出问题 排查分析

前言 最近在学习群里面&#xff0c;有聊到近几天排查生产问题上面的OOM事故。 有兄弟私聊问到怎么看。 其实非常简单&#xff0c;但是我想了下是不是有很多人没接触过&#xff1f;或者是望而生畏&#xff1f; 那么&#xff0c;就来做个简单的小教程示例吧。 正文 简单写个Us…

深层次分析字符数组和字符串的区别是什么?

前言 &#xff08;1&#xff09;休闲时刻刷B站&#xff0c;看到一个卖课的&#xff0c;发视频问&#xff0c;char arr1[]{‘H’,‘E’,‘L’,‘L’,‘O’};和char arr2[]“HELLO”;区别是什么。 &#xff08;2&#xff09;看那个卖课博主一顿分析&#xff0c;最后成功得出&…

2.linux字符设备

目录 设计字符设备 文件系统调用系统IO的内核处理过程 硬件层原理 驱动层原理 文件系统层原理 设备号的组成与哈希表 Hash Table&#xff08;哈希表、散列表&#xff0c;数组和链表的混合使用&#xff09; 设备号管理 关键的数据结构&#xff1a;char_device_struct&a…

每日一题:leetcode 1448 统计二叉树中好节点的数目

给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff1a;4 解释&a…

kafak消费数据,webSocket实时推送数据到前端

1.导入webSocket依赖 <!--websocket依赖包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 2.编写webSocket类 package com.skyable.device.co…