【机器学习300问】135、决策树算法ID3的局限性在哪儿?C4.5算法做出了怎样的改进?

        ID3算法是一种用于创建决策树的机器学习算法,该算法基于信息论中的信息增益概念来选择最优属性进行划分。信息增益是原始数据集熵与划分后数据集熵的差值,熵越小表示数据集的纯度越高。有关ID3算法的详细步骤和算法公式在我之前的文章中谈到,大家可以回顾一下:

【机器学习300问】33、决策树是如何进行特征选择的?icon-default.png?t=N7T8https://blog.csdn.net/qq_39780701/article/details/136660493

本文想讨论的是,ID3算法的局限性,以及为了避免其局限,人们提出的改进算法——C4.5

一、ID3算法的局限性

        废话不多说,让我们直接列出其局限性,然后通过一个具体的任务例子来感受一下,在特定场景下ID3是如何犯错的。

(1)偏好特征值多的属性

        ID3使用信息增益作为属性选择的指标,这一度量倾向于选择取值较多的属性,即使这些属性并不一定最具区分能力,可能导致生成的决策树偏向局部最优解而非全局最优。

(2)计算成本高

        随着数据集规模的增大,ID3算法的计算成本显著增加,对每个特征,都需要计算其信息增益,这涉及到了对数据集的遍历和对数运算,特别是在大数据集上,这一步骤可能相当耗时。

二、举例说明ID3的局限性

        第二点计算成本高,就不用说了,很直观就能感受到。主要是第一个“偏好选择特征值多的属性”是个什么意思呢?下面看个例子:

        有10个样本,三个特征(姓名、身高、体重),目标是预测性别(男、女)。为了明确说明问题,假设数据集中姓名的特征值最多,且姓名与性别之间没有明显的关联,而身高和体重则与性别有较强的关联性。

假设数据集
姓名身高(cm)体重(kg)性别
A17070
B16970
C18080
D15550
E17575
F16052
G17885
H16357
I17166
J15853

(1)计算性别的信息熵

        首先,计算整个数据集关于性别的熵。数据集中有5个男性和5个女性,因此熵为:

 H(D)=-\frac{5}{10}log_2 \frac{5}{10}-\frac{5}{10}log_2 \frac{5}{10}=1.0

(2)分别计算三种属性的信息增益 

① 计算按照身高属性来划分性别的信息增益

        假设身高在一定程度上与性别相关联,我们以身高170cm为阈值来进行划分。则从表中可知:

  • 男生5人,大于等于170的有4人,小于170的有1人。
  • 女生5人,大于等于170的有1人,小于170的有4人。

通过条件信息熵的公式计算得出: 

\frac{5}{10}[-\frac{4}{5}log_2\frac{4}{5}-\frac{1}{5}log_2\frac{1}{5}]+\frac{5}{10}[-\frac{1}{5}log_2\frac{1}{5}-\frac{4}{5}log_2\frac{4}{5}]\approx 0.72

再用H(D)减去条件信息熵得到信息增益:

IG(h)=1.0-0.72=0.28

② 计算按照体重属性来划分性别的信息增益

        我们按照体重大于等于70,和小于70来划分男生和女生,可以从表中得知,通过这样的阈值:

  • 体重大于等于70的子集熵为0(全为男性)
  • 体重小于70的子集熵也为0(全为女性)

IG(w)=1.0-0=1

③ 计算按照姓名属性来划分性别的信息增益

        由于姓名是高度特定的,假设每个姓名都独一无二,且与性别无关联。由于有10个不同的姓名,总的信息增益计算如下:

先算出条件信息熵:

\frac{1}{10}\times [-\frac{1}{1}log_2\frac{1}{1}]\times 10=0

再相减得到信息增益:

IG(g)=1.0-0=1

 (3)对比信息增益选择节点属性

        从上面的例子可以看出,ID3算法将姓名这种我们人类明显能看出和性别划分没什么关系的属性的信息增益也计算的非常高,在这个例子中,甚至和体重属性拥有一样的信息增益,显然不合理!

        根据ID3算法的逻辑,如果仅考虑信息增益大小,算法可能会错误地认为姓名是一个有效的特征,因为它考虑了每个特征的取值数量,而没有充分评估这些特征对目标变量的实际区分能力。

二、C4.5算法如何改进的?

        C4.5算法通过引入一个新的属性选择度量——信息增益率(Gain Ratio),改进了ID3算法中“偏好特征值多的属性”的缺点。C4.5算法使用“增益率”(Gain Ratio)来选择属性,增益率是对信息增益进行规范化的一个指标。

(1)信息增益(与ID3相同)

        通过选择具有最高信息增益的属性来分割数据。信息增益【分子】由下式给出:

Gain(D, A) = H(D) - H(D|A)

        其中,H(D)是数据集D的信息熵,H(D|A)是在属性A给定的条件下D的信息熵。

(2)分裂信息(Split Information)

        分裂信息度量了分裂(即按属性A的不同取值划分数据集)的信息量,定义为:

SplitInfo(D, A) = -\sum_{v=1}^{V} \frac{|D^v|}{|D|} \log_2 \frac{|D^v|}{|D|}

        其中,在属性A上有V个不同的取值,|D^v|是属性A上取值为v的集合的大小。这个分裂信息,可以理解成属性本身的混乱程度【分母】

(3)增益率(Gain Ratio)

        为了减少对多值属性的偏向,C4.5算法使用增益率选择属性,定义为:

GainRatio(D, A) = \frac{Gain(D, A)}{SplitInfo(D, A)}

        C4.5算法就是选择增益率最大的属性作为分割属性。

        C4.5算法还引入了树的剪枝过程,以简化决策树结构和减少过拟合现象。剪枝是在构建完整的决策树后进行的,它通过移除掉决策树中那些能够将训练集分类效果提升而对验证集分类效果不产生大的影响的节点来实现。这样,C4.5算法生成的决策树通常比ID3算法生成的决策树泛化能力更强。

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

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

相关文章

探索 Electron:将 Web 技术带入桌面应用

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能…

关于Java依赖版本升级的相关问题解决(持续更新)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

VMware Workstation 安装 Centos 虚拟机

1. 下载 VMware Workstation 直接上网找官网下载即可 2. 下载 Centos 镜像 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 3.打开 VMware 创建虚拟机 3.1点击创建虚拟机 3.2 选择自定义安装 3.3 选择使用 Workstation 的版本 版本越高兼容性越低但性能越好,一…

Linux磁盘分区方案

如下: /boot 分区:存放Linux系统启动有关程序,建议大小100MB。 /usr 分区:存放Linux系统中的应用程序,数据较多,建议大于3GB。 /var 分区:存放Linux系统中经常变化的数据及日志文件&#xff0c…

智慧校园-实训管理系统总体概述

智慧校园实训管理系统,专为满足高等教育与职业教育的特定需求而设计,它代表了实训课程管理领域的一次数字化飞跃。此系统旨在通过革新实训的组织结构、执行流程及评估标准,来增强学生的实践操作技能和教师的授课效率,为社会输送具…

Leetcode 701:二叉搜索树的插入操作

给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 //遍历二叉搜索树,遇到空结点&#…

python如何把一个函数的返回值,当成这个函数的参数值

python如何把一个函数的返回值,当成这个函数的参数值 1. 递归调用 递归是一种函数自己调用自己的方法。在递归调用中,你可以将前一次调用的返回值作为下一次调用的参数。 def recursive_function(x):# 函数逻辑if 条件满足:return 结果else:return rec…

用mn查看单例模式符号表——动态加载的动态链接库中的单例

nm - display name list(symbol table) 问题 有一个疑问由来已久,单例分单线程安全,多线程安全。那么如果动态加载链接库,单例还能保证只存在唯一实例吗? 于是,打算写代码验证一下 验证 1. 代码准备 总共有三个文…

数据结构-分析期末选择题考点(图)

我是梦中传彩笔 欲书花叶寄朝云 目录 图的常见考点(一)图的概念题 图的常见考点(二)图的邻接矩阵、邻接表 图的常见考点(三)拓扑排序 图的常见考点(四)关键路径 图的常见考点&#x…

c语言实现贪吃蛇小游戏

源码 /** * FileName: snakec* Author:PowerKing * Version&#xff1a;V1.0* Date:2024.6.28* Description: 贪吃蛇小游戏*/#include <curses.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h>/*贪吃蛇游戏 */#define UP 1…

c++ 递归

递归函数是指在函数定义中调用自身的函数。C语言也支持递归函数。 下面是一个使用递归函数计算阶乘的例子&#xff1a; #include <iostream> using namespace std;int factorial(int n) {// 基本情况&#xff0c;当 n 等于 0 或 1 时&#xff0c;阶乘为 1if (n 0 || n…

S32K3 工具篇2:如何在S32DS中使用Segger JLINK下载

S32K3 工具篇2&#xff1a;如何在S32DS中使用Segger JLINK下载 一&#xff0c; S32DS中JLINK下载1.1 Segger JLINK 驱动1.2 S32DS JLINK驱动路径配置1.3 S32DS JLINK debug configuration1.4 S32DS JLINK debug S32K3板子结果 二&#xff0c; JLINK驱动实现S32K344代码下载2.1 …

mysql数据库备份-使用自带工具mysqldump备份工具,mysqlimport/source导入工具

MysqlLimport介绍 MySCLimport是MysQL数据库中的一个命令行工具&#xff0c;用于将数据从外部文件导入MySQL数据库中的表中。它可以导入多种格式的数据&#xff0c;包括CSV、TXT、XML和SQL文件等。本文将介绍MySQLimport的用法&#xff0c;并通过代码示例演示如何使用它来导入…

高考落幕,暑期西北行,甘肃美食等你来尝

高考结束&#xff0c;暑期来临&#xff0c;西北之旅成为许多人的热门选择。而来到甘肃&#xff0c;除了领略壮丽的自然风光和深厚的历史文化&#xff0c;甘肃特产和传统面点以其独特的风味和传统的制作工艺也为游客们带来了一场地道的甘肃美食体验。 平凉的美食&#x…

c++ try 函数

在C中&#xff0c;try函数用于捕获和处理异常。以下是一个演示try函数的示例&#xff1a; #include <iostream> #include <stdexcept>double division(int x, int y) {if (y 0) {throw std::runtime_error("Divide by zero error");}return x / y; }in…

005-GeoGebra基础篇-GeoGebra的点

新手刚开始操作GeoGebra的时候一般都会恨之入骨&#xff0c;因为有些操作不进行学习确实有些难以凭自己发现。 目录 一、点的基本操作1. 通过工具界面添加点2. 关于点的选择&#xff08;对象选择通用方法&#xff09;&#xff08;1&#xff09;选择工具法&#xff08;2&#xf…

Vue3使用jsbarcode生成条形码,以及循环生成条形码

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是前端菜鸟的自我修养&#xff01;今天给大家分享Vue3使用jsbarcode生成条形码&#xff0c;以及循环生成条形码&#xff0c;介绍了JsBarcode插件的详细使用方法&#xff0c;并提供具体代码帮助大家深入理解&#xff0c;彻…

【Docker】集群容器监控和统计 CAdvisor+lnfluxDB+Granfana的基本用法

集群容器监控和统计组合&#xff1a;CAdvisorlnfluxDBGranfana介绍 CAdvisor&#xff1a;数据收集lnfluxDB&#xff1a;数据存储Granfana&#xff1a;数据展示 ‘三剑客’ 安装 通过使用compose容器编排&#xff0c;进行安装。特定目录下新建文件docker-compose.yml文件&am…

日志分析-windows系统日志分析

日志分析-windows系统日志分析 使用事件查看器分析Windows系统日志 cmd命令 eventvwr 筛选 清除日志、注销并重新登陆&#xff0c;查看日志情况 Windows7和Windowserver2008R2的主机日志保存在C:\Windows\System32\winevt\Logs文件夹下&#xff0c;Security.evtx即为W…

【OCPP】ocpp1.6协议第4.8章节Start Transaction的介绍及翻译

目录 4.8、开始交易Start Transaction-概述 Start Transaction StartTransaction.req 请求消息 StartTransaction.conf 确认消息 交易管理流程 小结 4.8、开始交易Start Transaction-应用场景 1. 公共充电站 场景要点: 2. 商业充电设施 场景要点: 3. 住宅充电桩 …