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

【信息增益】(ID3算法)
记住两个量"信息熵"和"信息增益"
[信息熵]表示信息的混乱程度,熵越大表明数据越混乱。我们分类的目的是为了使同一类别的数据尽可能纯净,因此追求尽量小的信息熵。
[信息增益]{.underline}表示分类前后信息熵的差值。分类前信息熵(entropy)是定值,分类后信息熵越小,信息增益越大,这也是我们所需要的。
entropy(D)表示未分类时数据D的信息熵

其中,Ci表示样本的分类变量取i的概率
回归到这个西瓜数据集,我们首先计算一下未进行分类前的信息熵entropy(D)
未分类时,我们怎么算样本的信息熵呢?

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

至于计算这个式子的值,分享两种方法:
①Excel表格
众所周知,Excel是一个强大的数据处理工具,我们可以利用其中公式来进行计算
令一列值为X,一列为函数值结果Y


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

编程实现略显繁琐,强推Excel表格,方便快捷。
至此,我们求得了未分类时数据D的信息熵entropy(D)=0.998
接下来求分类后的数据集的信息熵entropy(D,A)

A是代表按照属性A分类后,|Di|/|D|表示变量A取Di所占的比例
上实操:
西瓜数据集的属性集为{色泽、根蒂、敲声、纹理、脐部、触感}
我们从色泽这个属性来看,它有三个特征{青绿、乌黑、浅白}
按色泽这个属性分类,信息熵为:

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

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

综上所述:
Gain(D,色泽) =0.109
Gain(D,根蒂) =0.143
Gain(D,敲声) =0.141
Gain(D,纹理) =0.403
Gain(D,脐部) =0.290
Gain(D,触感) =0.007
{纹理}属性的信息增益最大,即确定了决策树的根结点为纹理

纹理为清晰的子数据集D1=[1,2,3,4,5,6,8,10,151,2,3,4,5,6,8,10,15]有这9个样例
因为纹理属性已经确定了,所有还有{色泽、根蒂、敲声、脐部、触感}5个属性集


综上所述:
Gain(D1,色泽) =0.043
Gain(D1,根蒂) =0.458
Gain(D1,敲声) =0.331
Gain(D1,脐部) =0.458
Gain(D1,触感) =0.458
其中{根蒂、脐部、触感}属性的信息增益最大,即确定了决策树的根结点{纹理}为清晰的子结点为这三个其中一个,因为三者信息增益相同,所以任选其一。
这里,我们选择{根蒂}为其子结点

同理,纹理为清晰,根蒂为稍蜷的子数据集D1_1=[6,8,15]有这3个样例
因为纹理、根蒂属性已经确定了,所有还有{色泽、敲声、脐部、触感}4个属性集


综上所述:
Gain(D1\_ 1,色泽) =0.251
Gain(D1\_ 1,敲声) =0
Gain(D1\_ 1,脐部) =0
Gain(D1\_ 1,触感) =0.251
其中{色泽、触感}属性的信息增益最大,即确定了决策树的结点{根蒂}为稍糊的子结点为这两个其中一个,因为两者信息增益相同,所以任选其一。
这里,我们选择{色泽}为其子结点

同理,纹理为清晰,根蒂为稍蜷,色泽为乌黑的子数据集D1_1_1=[8,15]有这2个样例
因为纹理、根蒂、色泽属性已经确定了,所有还有{敲声、脐部、触感}3个属性集

综上所述:
Gain(D1\_ 1\_ 1,敲声) =0
Gain(D1\_ 1\_ 1,脐部) =0
Gain(D1\_ 1\_ 1,触感) =1
其中{触感}属性的信息增益最大,即确定了决策树的结点{色泽}为乌黑的子结点{触感}为其子结点
至此,纹理为清晰这条分支到达叶子结点,
这条分支分类结束,决策树如图所示。

纹理为稍糊的子数据集D2=[7,9,13,14,17]有这5个样例
因为纹理属性已经确定了,所有还有{色泽、根蒂、敲声、脐部、触感}5个属性集

综上所述:
Gain(D2,色泽) =0.322
Gain(D2,根蒂) =0.373
Gain(D2,敲声) =0.322
Gain(D2,脐部) =0.171
Gain(D2,触感) =0.722
其中{触感}属性的信息增益最大,即确定了决策树的根结点{纹理}为稍糊的子结点{触感}为其子结点
至此,所有结点都到了叶子结点,分类结束。西瓜数据集的决策图如图所示。

【信息增益率】(C4.5决策树算法)
假设将"编号"也作为一个候选划分属性,它将产生1,2...,17个分支
它的信息增益为:

信息增益率计算主要分两个部分,一个是我们上面已经求过的信息增益,一部分是$IV(a)$称为属性$a$的固有值,属性$a$的可能取值数目越多即V越大,$IV(a)$的值通常要大,所以选择增益率可能对可取值数目较少的属性有所偏好
注意:固有值IV(a)是基于当前节点所包含的样本子集来重新计算的,因此它会随着递归划分而改变。
[为什么增益率会偏好"取值少"的属性?]{.underline}
当一个属性的取值很少(如只有2个取值),它的$IV(a)$通常较小(因为划分比较粗略),所以即使信息增益不高,增益率也可能较高。
相反,一个取值很多的属性虽然信息增益高,但由于$IV(a)$很大,增益率反而可能被拉低。
所以,增益率倾向于选择那些取值较少但有一定信息增益的属性。
这种倾向可能导致:过早地选择了"不太重要"的属性而忽视了某些虽然取值多但真正有用的属性。
C4.5决策树算法的解决办法是:
这个策略分为两个步骤:
步骤1:筛选------只考虑信息增益高于平均值的属性
•首先计算所有候选属性的信息增益;
•计算这些增益的平均值;
•只保留那些信息增益高于平均值的属性。
✅作用:
•淘汰掉那些虽然增益率高但实际信息贡献小的属性(比如某些取值少但几乎不提供分类信息的属性);
•保证选中的属性至少有一定的信息价值。
步骤2:在筛选后的集合中选择增益率最高的
•在第一步筛选出的"高信息增益"属性中,再根据增益率排序;
•选出增益率最高的那个作为最终划分属性。
✅作用:
•利用增益率避免对多值属性的过度偏好;
•同时确保所选属性具有足够的信息增益(不是"虚高"的增益率)。
我们使用西瓜集来实测一下:

综上所述:
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
{纹理}属性的信息增益率最大,即确定了决策树的根结点为纹理

纹理为清晰的子数据集D1=[1,2,3,4,5,6,8,10,15]有这9个样例
因为纹理属性已经确定了,所有还有{色泽、根蒂、敲声、脐部、触感}5个属性集
注意:固有值IV(a)是基于当前节点所包含的样本子集来重新计算的,因此它会随着递归划分而改变。


综上所述:
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
{触感}属性的信息增益率最大,即确定了决策树的根结点为清晰分支的结点为触感

触感为软粘的子数据集D1_1=[6,10,15]有这3个样例
因为纹理、触感属性已经确定了,所有还有{色泽、根蒂、敲声、脐部}4个属性集

综上所述:
上面四个属性信息增益相同,信息增益率也相同
随机选择一个,我选择的是{色泽}属性


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

同理,纹理为稍糊的子数据集D2=[7,9,13,14,17]有这5个样例
因为纹理属性已经确定了,所有还有{色泽、根蒂、敲声、脐部、触感}5个属性集


综上所述:
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
高于平均值的有{触感}这个属性
即确定了决策树的根结点{纹理}为稍糊的子结点{触感}为其子结点
至此,所有结点都到了叶子结点,分类结束。西瓜数据集的决策图如图所示。

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


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

浙公网安备 33010602011771号