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

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

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

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

一、ID3算法的局限性

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

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

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

(2)计算成本高

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

二、举例说明ID3的局限性

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

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

姓名 身高(cm) 体重(kg) 性别
A 170 70
B 169 70
C 180 80
D 155 50
E 175 75
F 160 52
G 178 85
H 163 57
I 171 66
J 158 53
[假设数据集]

(1)计算性别的信息熵

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

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

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

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

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

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

再用减去条件信息熵得到信息增益:

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

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

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

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

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

先算出条件信息熵:

再相减得到信息增益:

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

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

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

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

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

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

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

其中,是数据集的信息熵,是在属性给定的条件下的信息熵。

(2)分裂信息(Split Information)

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

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

(3)增益率(Gain Ratio)

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

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

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

相关推荐
无脑敲代码,bug漫天飞4 分钟前
COR 损失函数
人工智能·机器学习
盼海7 分钟前
排序算法(五)--归并排序
数据结构·算法·排序算法
HPC_fac130520678161 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
网易独家音乐人Mike Zhou4 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
Swift社区7 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Kent_J_Truman8 小时前
greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用
算法
IT 青年8 小时前
数据结构 (1)基本概念和术语
数据结构·算法
Dong雨8 小时前
力扣hot100-->栈/单调栈
算法·leetcode·职场和发展
SoraLuna9 小时前
「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解
开发语言·算法·macos·cangjie
老艾的AI世界9 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲