【机器学习300问】136、C4.5虽然改善了ID3决策树算法的部分缺点,但还是有不足,请问还有更好的算法吗?CART算法构建决策树

news2024/12/23 7:06:08

一、C4.5算法仍存在的不足

(1)计算效率不高

        C4.5使用的信息增益率计算涉及熵的对数计算,特别是当属性值数量大时,计算成本较高。

(2)处理连续数值属性不够高效

        ID3算法只能处理离散属性,需要预先对连续属性进行离散化处理。C4.5虽然也能处理连续属性,但效率不高。

二、CART算法原理

        分类与回归树(Classification And Regression Trees,CART)算法是一种决策树构建方法。同时适用于分类和回归任务。它是机器学习中的监督学习算法。

(1)算法核心思想

        CART算法的核心思想是通过递归地选择最佳特征和阈值来分割数据集,直至满足预设的停止条件,最终形成一个二叉树结构。这个树结构可以用来做分类或预测连续值的回归。

(2)什么是基尼不纯度?

        基尼不纯度(Gini Impurity)是衡量数据集中类别的混乱程度的一种指标,用于决策树算法中确定最佳分裂特征。其计算公式如下:

        假设数据集共有K个类别,第k类样本所占的比例为p_k(其中\sum_{k=1}^{K}p_k=1)则该数据集的基尼不纯度G计算公式为:

G=\sum_{k=1}^{K} p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2

这个公式的直观理解是:

  • 每一个类别的概率p_k越大,它“纯净”的贡献(即p_k^2)就越大,而基尼不纯度作为整体的“不纯净”程度就越小;
  • 反之,如果各类别分布均匀,每个类别的概率都很小,那么基尼不纯度就会接近其最大值1,表示数据集非常“混乱”。

        在决策树构建过程中,会选择使得分割后两个子集的加权基尼不纯度之和最小的特征作为最佳分割特征。

(3)算法步骤

        CART算法的工作过程主要分为以下三个步骤:

① 特征选择与阈值确定

        在每个节点上,算法会遍历所有特征的所有可能分割点,计算分割后的不纯度或误差,并选择使得不纯度或误差降低最多的特征和分割点。

  • 对于分类任务,CART使用基尼不纯度作为衡量标准来选择最佳分割特征和分割点。基尼不纯度越低表示数据划分后类别分布越纯净。
  • 对于回归任务,CART使用均方误差作为衡量标准,寻找使得各子集残差平方和最小的分割点。

② 树的生成

        从根节点开始,根据选定的特征和分割点划分数据集,然后对每个子集重复此过程,直到满足停止条件,如节点中的样本属于同一类别、达到预设的最大深度、子集中的样本数小于某个阈值等。

③ 树的剪枝

        为了避免过拟合,CART使用后剪枝策略。即先生成一棵完整的树,然后自底向上地检查是否可以通过合并某些子树来降低测试集上的误差。剪枝的目的是找到一个子树,它在训练集上的性能可能略差,但在未知数据上的泛化能力更强。

三、CART算法如何解决前辈们遗留的问题

(1)处理连续数值属性

        CART算法能够直接处理连续属性,通过选择最优的分割点来划分数据(即确定节点阈值),而ID3算法只能处理离散属性,需要预先对连续属性进行离散化处理。C4.5虽然也能处理连续属性,但CART在处理连续属性时更为直接和高效。

(2)同时支持分类与回归

        CART算法不仅适用于分类任务,还能处理回归问题,即预测连续数值,这是ID3和C4.5所不具备的能力。这一灵活性拓宽了CART的应用场景。

(3)计算效率高

        CART使用基尼不纯度作为分裂标准,计算上相对简单,避免了ID3和C4.5信息增益计算中的对数运算,从而提高了效率。基尼不纯度在处理类别不平衡的数据集时表现得更为稳健。

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

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

相关文章

一个CentOS“倒下去”,更多开源创新服务器操作系统站起来

“一切过往,皆为序章。” ——出自莎士比亚的戏剧《暴风雨》 CentOS 7将在2024年6月30日正式停更,这在某种程度上宣告了国外开源操作系统一个时代的结束。那么,这是不是必然意味着,一个属于我国自主创新的开源操作…

pg_rman:备份和恢复管理工具#postgresql培训

pg_rman 是 PostgreSQL 的在线备份和恢复工具。 pg_rman 项目的目标是提供一种与 pg_dump 一样简单的在线备份和 PITR 方法。此外,它还为每个数据库集群维护一个备份目录。用户只需一个命令即可维护包括存档日志在内的旧备份。 #PG培训#PG考试#postgresql考试#pos…

Java 基本数据类型【基础篇】

目录 Java 数据类型基本数据类型整数类型【byte、short、int、long】浮点类型【float、double】布尔类型【boolean】字符类型【char】 引用数据类型 Java 数据类型 Java 语言支持的数据类型分为两种:基本数据类型 和 引用数据类型。其数据类型结构如下图所示&#x…

python-20-零基础自学python-用类和while设计一个掷多次、多面骰子的工具的基础

学习内容:《python编程:从入门到实践》第二版 知识点:类、random、while循环、把while循环和类结合起来 练习内容: 练习9-13:骰子 创建一个Die类,它包含一个名为sides的属性,该属性的默认值…

【分布式计算框架 MapReduce】MapReduce 初级编程

目录 一、MapReduce 示例程序的导入并运行测试 二、准备 4 个小文件(文件大小分别为 1.7M,5.1M,3.4M,6.8M) 1. 第一种情况,默认分片:不修改程序代码,直接使用 WordCount 源程序 2…

kali Linux基本命令(超全)_kali linux命令

一、系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件- (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpu…

【UE 网络】RPC远程过程调用 入门篇

目录 0 引言1 RPC基本概念1.1 定义1.2 分类 2 RPC的使用2.1 Client RPC2.2 Server RPC2.3 Multicast RPC 🙋‍♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏💥 标题:【UE 网络】RPC远程过程调用 入门篇❣️ 寄语…

【JavaScript】JavaScript简介

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 JavaScript入门(1)————JavaScript简介开篇说明一、什么是JavaScript二、JavaScript的使用2.1 开发工具的选择…

UE5材质之HLSL:深度

UE4/5的Custom节点:在VScode使用HLSL(新手入门用)_vscode写hlsl-CSDN博客 效果: 材质节点: 自定义节点代码: float3 rayStepViewDir*-1; float4 inputTexTexture2DSample(TexObject,TexObjectSampler,uv)…

yolov8obb角度预测原理解析

预测头 ultralytics/nn/modules/head.py class OBB(Detect):"""YOLOv8 OBB detection head for detection with rotation models."""def __init__(self, nc80, ne1, ch()):"""Initialize OBB with number of classes nc and la…

(笔记)Error: qemu-virgl: Failed to download resource “qemu-virgl--test-image“解决方法

错误: > Downloading https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/FD12FLOPPY.zip curl: (22) The requested URL returned error: 404Error: qemu-virgl: Failed to download resource "qemu-virgl--test-image" D…

基于QT开发的气体成分检测数据记录软件

1、软件概述 气体成分检测数据记录软件用于实现多种气体分析仪及相关设备实时数据的获取、存储和传送。目前支持的设备主要有气体分析仪、多通道进样阀箱、冷阱处理系统和气体采样处理系统。   气体成分检测数据记录软件可以根据实际应用需要进行配置,以实现不同应…

【PyQt】20-QTimer(动态显示时间、定时关闭)

QTimer 前言一、QTimer介绍二、动态时间展示2.1 代码2.2 运行结果 三、定时关闭3.1 介绍他的两种用法1、使用函数或Lambda表达式2、带有定时器类型(高级) 3.2 代码3.3 运行结果 总结 前言 好久没学习了。 一、QTimer介绍 pyqt里面的多线程可以有两种实…

使用 MongoDB 剖析开放银行:技术挑战和解决方案

开放银行(或开放金融)在银行业掀起了一股颠覆性浪潮,它迫使金融机构(银行、保险公司、金融科技公司、企业甚至政府机构)迎接一个透明、协作和创新的新时代。这种模式转变要求银行与第三方提供商(TPP&#x…

RAID0、RAID1、RAID5、RAID10、软RAID

硬盘 连续空间 无法 扩容 每个raid对应每个raid卡,没有阵列卡就不能用raid lvm 非连续空间 可以动态扩容 raid 备份, 提高读写性能,不能扩容 raid 是磁盘的集合,按照排列组合的方法不 一,给 raid 去了不同的名字…

Webpack: 构建微前端应用

Module Federation 通常译作“模块联邦”,是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式,理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…

[OtterCTF 2018]Closure

既然你从内存中提取了密码,你能解密rick的文件吗? 密码是知道了,加密文件 ? flag 文件?dump 出来 已知这个勒索软件为HiddenTear,直接在网上找到解密程序HiddenTearDecrypter先将加密文件的末尾多余的0去掉…

javaScript利用indexOf()查找字符串的某个字符出现的位置

1 创建字符串 2 利用indexof()查询字符串的字符 3 利用while循环判断indexOf是否等于-1,不等于-1就打印一次并且索引号1去查下一个字符 //创建字符串var str1234567812311231;var indexstr.indexOf(1);//查询该字符while(index !-1)//indexOf()没有查到会返回-1{…

右键新建没有TXT文本文档的解决办法

电脑右键新建,发现没有txt了,我查网上办法都有点复杂,诸如注册表的,但是其实很简单,重启windows资源管理器就可以了。 点击重新启动,之后新建就有txt文档了。

基于Spring Boot的药房信息管理系统

1 项目介绍 1.1 研究的背景及意义 随着社会的飞速进步和药房行业竞争的白热化,传统的手工管理模式已难以适应药房信息管理的现代化需求。在计算机科学技术日臻完善的背景下,药房信息管理者们日益认识到运用计算机技术进行信息管理的迫切性和重要性。计…