西瓜决策树

这是一个经典的西瓜数据集,让我们来求它的信息增益(ID3决策树算法)、决策树、信息增益率(C4.5决策树算法)、基尼指数

img


【信息增益】(ID3算法)

记住两个量"信息熵"和"信息增益"

[信息熵]表示信息的混乱程度,熵越大表明数据越混乱。我们分类的目的是为了使同一类别的数据尽可能纯净,因此追求尽量小的信息熵。

[信息增益]{.underline}表示分类前后信息熵的差值。分类前信息熵(entropy)是定值,分类后信息熵越小,信息增益越大,这也是我们所需要的。

entropy(D)表示未分类时数据D的信息熵

img

其中,Ci表示样本的分类变量取i的概率

回归到这个西瓜数据集,我们首先计算一下未进行分类前的信息熵entropy(D)

未分类时,我们怎么算样本的信息熵呢?

img

根据公式,我们要算样本所占的比例,我们还没对数据集进行分类时,首先对结果进行分类,发现有好瓜和坏瓜2种,分别占比好瓜8/17和坏瓜9/17

img

至于计算这个式子的值,分享两种方法:

①Excel表格

众所周知,Excel是一个强大的数据处理工具,我们可以利用其中公式来进行计算

令一列值为X,一列为函数值结果Y

img

img

②编程实现

以python语言编程设计实现为例,其他语言相似

img

编程实现略显繁琐,强推Excel表格,方便快捷。

至此,我们求得了未分类时数据D的信息熵entropy(D)=0.998

接下来求分类后的数据集的信息熵entropy(D,A)

img

A是代表按照属性A分类后,|Di|/|D|表示变量A取Di所占的比例


上实操:

西瓜数据集的属性集为{色泽、根蒂、敲声、纹理、脐部、触感}

我们从色泽这个属性来看,它有三个特征{青绿、乌黑、浅白}

按色泽这个属性分类,信息熵为:

img

前面的这三个6/17,6/17,5/1}比例分别对应三个特征{青绿、乌黑、浅白}所占比例,括号里求的是当前特征下的信息熵也就是entropy(Di)

img


同理,计算出其他属性的信息增益:

img


综上所述:

Gain(D,色泽) =0.109

Gain(D,根蒂) =0.143

Gain(D,敲声) =0.141

Gain(D,纹理) =0.403

Gain(D,脐部) =0.290

Gain(D,触感) =0.007

{纹理}属性的信息增益最大,即确定了决策树的根结点为纹理

img


纹理为清晰的子数据集D1=[1,2,3,4,5,6,8,10,151,2,3,4,5,6,8,10,15]有这9个样例

因为纹理属性已经确定了,所有还有{色泽、根蒂、敲声、脐部、触感}5个属性集

img

img

综上所述:

Gain(D1,色泽) =0.043

Gain(D1,根蒂) =0.458

Gain(D1,敲声) =0.331

Gain(D1,脐部) =0.458

Gain(D1,触感) =0.458

其中{根蒂、脐部、触感}属性的信息增益最大,即确定了决策树的根结点{纹理}为清晰的子结点为这三个其中一个,因为三者信息增益相同,所以任选其一。

这里,我们选择{根蒂}为其子结点

img


同理,纹理为清晰,根蒂为稍蜷的子数据集D1_1=[6,8,15]有这3个样例

因为纹理、根蒂属性已经确定了,所有还有{色泽、敲声、脐部、触感}4个属性集

img

img

综上所述:

Gain(D1\_ 1,色泽) =0.251

Gain(D1\_ 1,敲声) =0

Gain(D1\_ 1,脐部) =0

Gain(D1\_ 1,触感) =0.251

其中{色泽、触感}属性的信息增益最大,即确定了决策树的结点{根蒂}为稍糊的子结点为这两个其中一个,因为两者信息增益相同,所以任选其一。

这里,我们选择{色泽}为其子结点

img


同理,纹理为清晰,根蒂为稍蜷,色泽为乌黑的子数据集D1_1_1=[8,15]有这2个样例

因为纹理、根蒂、色泽属性已经确定了,所有还有{敲声、脐部、触感}3个属性集

img

综上所述:

Gain(D1\_ 1\_ 1,敲声) =0

Gain(D1\_ 1\_ 1,脐部) =0

Gain(D1\_ 1\_ 1,触感) =1

其中{触感}属性的信息增益最大,即确定了决策树的结点{色泽}为乌黑的子结点{触感}为其子结点

至此,纹理为清晰这条分支到达叶子结点,

这条分支分类结束,决策树如图所示。

img


纹理为稍糊的子数据集D2=[7,9,13,14,17]有这5个样例

因为纹理属性已经确定了,所有还有{色泽、根蒂、敲声、脐部、触感}5个属性集

img

综上所述:

Gain(D2,色泽) =0.322

Gain(D2,根蒂) =0.373

Gain(D2,敲声) =0.322

Gain(D2,脐部) =0.171

Gain(D2,触感) =0.722

其中{触感}属性的信息增益最大,即确定了决策树的根结点{纹理}为稍糊的子结点{触感}为其子结点

至此,所有结点都到了叶子结点,分类结束。西瓜数据集的决策图如图所示。

img



【信息增益率】(C4.5决策树算法)

假设将"编号"也作为一个候选划分属性,它将产生1,2...,17个分支

它的信息增益为:

img

信息增益率计算主要分两个部分,一个是我们上面已经求过的信息增益,一部分是$IV(a)$称为属性$a$的固有值,属性$a$的可能取值数目越多即V越大,$IV(a)$的值通常要大,所以选择增益率可能对可取值数目较少的属性有所偏好

注意:固有值IV(a)是基于当前节点所包含的样本子集来重新计算的,因此它会随着递归划分而改变。

[为什么增益率会偏好"取值少"的属性?]{.underline}

当一个属性的取值很少(如只有2个取值),它的$IV(a)$通常较小(因为划分比较粗略),所以即使信息增益不高,增益率也可能较高。

相反,一个取值很多的属性虽然信息增益高,但由于$IV(a)$很大,增益率反而可能被拉低。

所以,增益率倾向于选择那些取值较少但有一定信息增益的属性。

这种倾向可能导致:过早地选择了"不太重要"的属性而忽视了某些虽然取值多但真正有用的属性。


C4.5决策树算法的解决办法是:

这个策略分为两个步骤:

步骤1:筛选------只考虑信息增益高于平均值的属性

•首先计算所有候选属性的信息增益;

•计算这些增益的平均值;

•只保留那些信息增益高于平均值的属性。

✅作用:

•淘汰掉那些虽然增益率高但实际信息贡献小的属性(比如某些取值少但几乎不提供分类信息的属性);

•保证选中的属性至少有一定的信息价值。

步骤2:在筛选后的集合中选择增益率最高的

•在第一步筛选出的"高信息增益"属性中,再根据增益率排序;

•选出增益率最高的那个作为最终划分属性。

✅作用:

•利用增益率避免对多值属性的过度偏好;

•同时确保所选属性具有足够的信息增益(不是"虚高"的增益率)。


我们使用西瓜集来实测一下:

img

综上所述:

Gain(D,色泽) =0.109	IV(色泽) =1.579

Gain(D,根蒂) =0.143	IV(根蒂) =1.412

Gain(D,敲声) =0.141	IV(敲声) =1.332

Gain(D,纹理) =0.403	IV(纹理) =1.463

Gain(D,脐部) =0.290	IV(脐部) =1.548

Gain(D,触感) =0.007	IV(触感) =0.768

首先筛选出信息增益高于平均值的

这六个属性的信息增益平均值为:

(0.109+0.143+0.141+0.403+0.209+0.007)/6=0.169

高于平均值的有{根蒂、敲声、纹理、脐部}4个属性

选择其中增益率高的:

Gain\_ ratio(D,根蒂) =0.143/1.412=0.101

Gain\_ ratio(D,敲声) =0.141/1.332=0.106

Gain\_ ratio(D,纹理) =0.403/1.463=0.275

Gain\_ ratio(D,脐部) =0.209/1.548=0.135

{纹理}属性的信息增益率最大,即确定了决策树的根结点为纹理

img


纹理为清晰的子数据集D1=[1,2,3,4,5,6,8,10,15]有这9个样例

因为纹理属性已经确定了,所有还有{色泽、根蒂、敲声、脐部、触感}5个属性集

注意:固有值IV(a)是基于当前节点所包含的样本子集来重新计算的,因此它会随着递归划分而改变。

img

img

综上所述:

Gain(D1,色泽) =0.043	IV(色泽) =1.392

Gain(D1,根蒂) =0.458	IV(根蒂) =1.351

Gain(D1,敲声) =0.331	IV(敲声) =1.224

Gain(D1,脐部) =0.458	IV(脐部) =1.351

Gain(D1,触感) =0.458	IV(触感) =0.918

这五个属性的信息增益平均值为:

(0.043+0.458+0.331+0.458+0.458)/5=0.3496

高于平均值的有{根蒂、脐部、触感}3个属性

选择其中增益率高的:

Gain\_ ratio(D,根蒂) =0.458/1.351=0.339

Gain\_ ratio(D,脐部) =0.458/1.351=0.339

Gain\_ ratio(D,触感) =0.458/0.918=0.499

{触感}属性的信息增益率最大,即确定了决策树的根结点为清晰分支的结点为触感

img


触感为软粘的子数据集D1_1=[6,10,15]有这3个样例

因为纹理、触感属性已经确定了,所有还有{色泽、根蒂、敲声、脐部}4个属性集

img

综上所述:

上面四个属性信息增益相同,信息增益率也相同

随机选择一个,我选择的是{色泽}属性

img


img

三者随便选其一作为子结点,所以,决策树如下图:

img


同理,纹理为稍糊的子数据集D2=[7,9,13,14,17]有这5个样例

因为纹理属性已经确定了,所有还有{色泽、根蒂、敲声、脐部、触感}5个属性集

img

img

综上所述:

Gain(D1,色泽) =0.322

Gain(D1,根蒂) =0.373

Gain(D1,敲声) =0.322

Gain(D1,脐部) =0.171

Gain(D1,触感) =0.722

这五个属性的信息增益平均值为:

(0.322+0.373+0.322+0.171+0.722)/5=0.382

高于平均值的有{触感}这个属性

即确定了决策树的根结点{纹理}为稍糊的子结点{触感}为其子结点

至此,所有结点都到了叶子结点,分类结束。西瓜数据集的决策图如图所示。

img



【基尼指数】(CART决策树算法)

img

img

其他一样像之前ID3和C4.5决策树算法一样计算,不再赘述。

posted @ 2025-11-17 21:47  落下的秋叶林  阅读(272)  评论(0)    收藏  举报