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

一、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.mzph.cn/pingmian/37769.shtml

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

相关文章

kafka学习笔记08

Springboot项目整合spring-kafka依赖包配置 有这种方式,就是可以是把之前test里的配置在这写上,用Bean注解上。 现在来介绍第二种方式: 1.添加kafka依赖: 2.添加kafka配置方式: 编写代码发送消息: 测试: …

c++11、14多线程从原理到线程池

c11、14多线程从原理到线程池 一.初识二.std::thread对象生命周期和线程等待与分离1.主线程不退出,thread对象被销毁,子线程仍然在运行。2.主线程阻塞,等待子线程退出3.子线程与主线程分离(守护线程) 三.线程创建的多种…

Nuxtjs3教程

起步 官方文档 官方目录结构 安装 npx nuxi@latest init <project-name>后面跟着提示走就行 最后yarn run dev 启动项目访问localhost:3000即可 路由组件 app.vue为项目根组件 <nuxt-page />为路由显示入口 将app.vue更改内容如下 <template><d…

C语言的数据结构:树与二叉树(哈夫曼树篇)

前言 上篇讲完了二叉树&#xff0c;二叉树的查找性能要比树好很多&#xff0c;如平衡二叉树保证左右两边节点层级相差不会大于1&#xff0c;其查找的时间复杂度仅为 l o g 2 n log_2n log2​n&#xff0c;在两边层级相同时&#xff0c;其查找速度接近于二分查找。1w条数据&am…

什么是中断?---STM32篇

目录 一&#xff0c;中断的概念 二&#xff0c;中断的意义 三&#xff0c;中断的优先级 四&#xff0c;中断的嵌套 如果一个高优先级的中断发生&#xff0c;它会立即打断当前正在处理的中断&#xff08;如果其优先级较低&#xff09;&#xff0c;并首先处理这个高优…

uniapp+php开发的全开源多端微商城完整系统源码.

uniappphp开发的全开源多端微商城完整系统源码. 全开源的基础商城销售功能的开源微商城。前端基于 uni-app&#xff0c;一端发布多端通用。 目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 采用该资源包做商城项目&#xff0c;可以节省大量的开发时间。 这…

周边美食小程序系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;美食店铺管理&#xff0c;菜品分类管理&#xff0c;标签管理&#xff0c;菜品信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;美食店铺&#…

基于SSM+Jsp的疫情居家办公OA系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

20-OWASP top10--XXS跨站脚本攻击

目录 什么是xxs&#xff1f; XSS漏洞出现的原因 XSS分类 反射型XSS 储存型XSS DOM型 XSS XSS漏洞复现 XSS的危害或能做什么&#xff1f; 劫持用户cookie 钓鱼登录 XSS获取键盘记录 同源策略 &#xff08;1&#xff09;什么是跨域 &#xff08;2&#xff09;同源策略…

容易涨粉的视频素材有哪些?容易涨粉的爆款短素材库网站分享

如何挑选社交媒体视频素材&#xff1a;顶级视频库推荐 在社交媒体上脱颖而出&#xff0c;视频素材的选择至关重要。以下是一些顶级的视频素材网站推荐&#xff0c;不仅可以提升视频质量&#xff0c;还能帮助你吸引更多粉丝。 蛙学网&#xff1a;创意的源泉 作为创意和独特性的…

Databend db-archiver 数据归档压测报告

Databend db-archiver 数据归档压测报告 背景准备工作Create target databend table启动 small warehouse准备北京区阿里云 ECSdb-archiver 的配置文件准备一亿条源表数据开始压测 背景 本次压测目标为使用 db-archiver 从 MySQL 归档数据到 Databend Cloud&#xff0c; 归档的…

【王佩丰 Excel 基础教程】第一讲:认识Excel

文章目录 前言一、Excel软件简介1.1、历史上的其他数据处理软件与 Microsoft Excel1.2、Microsoft Excel 能做些什么1.3、Excel 界面介绍 二、Microsoft Excel 的一些重要概念2.1、Microsoft Excel 的几种常见文件类型2.2、工作簿、工作表、单元格. 三、使用小工具&#xff1a;…

Python_Socket

Python Socket socket 是通讯中的一种方式&#xff0c;主要用来处理客户端与伺服器端之串连&#xff0c;只需要protocol、IP、Port三项目即可进行网路串连。 Python套件 import socketsocket 常用函式 socket.socket([family], [type] , [proto] ) family: 串接的类型可分为…

Java中的Checked Exception和Unchecked Exception的区别

在Java中&#xff0c;异常分为两大类&#xff1a;已检查异常&#xff08;Checked Exception&#xff09;和未检查异常&#xff08;Unchecked Exception&#xff09;。 已检查异常是在编译时必须被捕获或声明的异常。换句话说&#xff0c;如果你的方法可能会抛出某个已检查异常&…

韩顺平0基础学Java——第33天

p653-674 坦克大战 继续上回游戏 将每个敌人的信息&#xff0c;恢复成Node对象&#xff0c;放进Vector里面。 播放音乐 使用一个播放音乐的类。 第二阶段结束了 网络编程 相关概念 &#xff08;权当是复习计网了&#xff09; 网络 1.概念:两台或多台设备通过一定物理设备连…

龙芯久久派到手开机测试

今天刚拿到龙芯久久派&#xff0c;没看到文档&#xff0c;只有视频&#xff0c;我来写个博客&#xff0c;做个记录&#xff0c;免得以后忘记 1.连接usb转ttl串口与龙芯久久派&#xff0c;如图所示。 2.将usb转串口接到电脑USB口 也就是这个接电脑上 3.打开串口调试助手或Secu…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式4599张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4599 标注数量(xml文件个数)&#xff1a;4599 标注数量(txt文件个数)&#xff1a;4599 标注…

Android 11.0 修改系统显示大小导航栏消失

Android 11.0 修改系统显示大小导航栏消失 1.显示大小设置为大时&#xff0c;导航栏图标不显示。 设置为大&#xff0c;较大&#xff0c;最大时&#xff0c;导航栏图标不显示。 2.开始怀疑是导航栏被隐藏了&#xff0c;各种折腾无效。 3.发现&#xff1a; frameworks/base/pa…

amis源码 更新组件数据域的几种方法

更新组件数据域的几种方法&#xff1a; 默认都是合并数据&#xff0c;非覆盖(指定replace为true的才是覆盖)&#xff1a; const comp amisScoped.getComponentById(id);//或者getComponentByName(name) 1.comp.setData(values, replace); //更新多个值values&#xff0c; r…

Linux多进程和多线程(一)

进程 进程的概念 进程&#xff08;Process&#xff09;是操作系统对一个正在运行的程序的一种抽象。它是系统运行程序的最小单位&#xff0c;是资源分配和调度的基本单位。 进程的特点如下 进程是⼀个独⽴的可调度的活动, 由操作系统进⾏统⼀调度, 相应的任务会被调度到cpu …