在决策树应用一文中,在构建决策分类树应用决策算法时,介绍了基尼系数(Gini Index)和基于熵(Entropy)两种算法。本文通过实例来更加深入的介绍一下这两个算法。
仍然以简单的数据为例:
| id | 喜欢颜色 | 是否有喉结 | 身高 | 性别 |
|---|---|---|---|---|
| 1 | 绿 | 否 | 165 | 女 |
| 2 | 蓝 | 是 | 170 | 男 |
| 3 | 粉 | 否 | 172 | 女 |
| 4 | 绿 | 是 | 175 | 男 |
基尼系数
分别对 喜欢颜色 是否有喉结 求基尼系数如下:
喜欢的颜色
| id | 喜欢颜色 | 性别 |
|---|---|---|
| 1 | 绿 | 女 |
| 2 | 蓝 | 男 |
| 3 | 粉 | 女 |
| 4 | 绿 | 男 |
对于姓别女分类而言,数据如下:
| id | 喜欢颜色 | 性别 |
|---|---|---|
| 1 | 绿 | 女 |
| 3 | 粉 | 女 |
其中绿色的占比为0.5 ,粉色的占比也为0.5,则特征喜欢的颜色相对于类别女的基尼系数为:1 - (0.5^2 + 0.5^2) = 0.5。①
对于姓别男分类而言,数据如下:
| id | 喜欢颜色 | 性别 |
|---|---|---|
| 2 | 蓝 | 男 |
| 4 | 绿 | 男 |
其中蓝色的占比为0.5 ,绿色的占比也为0.5,则特征喜欢的颜色相对于类别男的基尼系数为:1 - (0.5^2 + 0.5^2) = 0.5。②
最终特征喜欢的颜色对性别类别的基尼系数为 (① + ②) / 2 = (0.5 + 0.5) / 2 = 0.5。 ③
是否有喉结
| id | 是否有喉结 | 性别 |
|---|---|---|
| 1 | 否 | 女 |
| 2 | 是 | 男 |
| 3 | 否 | 女 |
| 4 | 是 | 男 |
对于姓别女分类而言,数据如下:
| id | 是否有喉结 | 性别 |
|---|---|---|
| 1 | 否 | 女 |
| 3 | 否 | 女 |
其中否的占比为1,则特征 是否有喉结 相对于类别女的基尼系数为:1 - 1^2 = 0。④
对于姓别男分类而言,数据如下:
| id | 是否有喉结 | 性别 |
|---|---|---|
| 2 | 是 | 男 |
| 4 | 是 | 男 |
其中是的占比为1,则特征 是否有喉结 相对于类别男的基尼系数为:1 - 1^2 = 0。⑤
最终特征是否有喉结对性别类别的基尼系数为 (④ + ⑤) / 2 = (0 + 0) / 2 = 0。⑥
决策支持
综合③⑥得知对于性别分类而言特征是否有喉结的基尼系数为0,类别的基尼系数为0.5,所以基于当前数据集的决策时,第一个决策的特征应该是是否有喉结,即基尼系统越小,使用此特征进行决策效率越高。
实际的使用也是如何,通过基尼系数为0的特征是否有喉结决策时,可以直接决策中性别是男还是女,比使用特征喜欢颜色决策的效率更高。
基于熵(Entropy)
分别对 喜欢颜色 是否有喉结 求熵如下:
喜欢的颜色
| id | 喜欢颜色 | 性别 |
|---|---|---|
| 1 | 绿 | 女 |
| 2 | 蓝 | 男 |
| 3 | 粉 | 女 |
| 4 | 绿 | 男 |
对于姓别女分类而言,数据如下:
| id | 喜欢颜色 | 性别 |
|---|---|---|
| 1 | 绿 | 女 |
| 3 | 粉 | 女 |
其中绿色的占比为0.5 ,粉色的占比也为0.5,则特征喜欢的颜色相对于类别女的熵为:$$ - (0.5*log_{2}{0.5} + 0.5*log_{2}{0.5})$$ = - (-0.5 + -0.5) = 1。➊
对于姓别男分类而言,数据如下:
| id | 喜欢颜色 | 性别 |
|---|---|---|
| 2 | 蓝 | 男 |
| 4 | 绿 | 男 |
其中蓝色的占比为0.5 ,绿色的占比也为0.5,则特征喜欢的颜色相对于类别男的熵为:
$$ - (0.5*log_{2}{0.5} + 0.5*log_{2}{0.5})$$
即: - (-0.5 + -0.5) = 1。➋
最终特征喜欢的颜色对性别类别的熵为 (➊ + ➋) / 2 = (1 + 1) / 2 = 1。 ➌
是否有喉结
| id | 是否有喉结 | 性别 |
|---|---|---|
| 1 | 否 | 女 |
| 2 | 是 | 男 |
| 3 | 否 | 女 |
| 4 | 是 | 男 |
对于姓别女分类而言,数据如下:
| id | 是否有喉结 | 性别 |
|---|---|---|
| 1 | 否 | 女 |
| 3 | 否 | 女 |
其中否的占比为1,则特征 是否有喉结 相对于类别女的熵为:$$ - (1*log_{2}{1})$$
即: - (0) = 0。➍
对于姓别男分类而言,数据如下:
| id | 是否有喉结 | 性别 |
|---|---|---|
| 2 | 是 | 男 |
| 4 | 是 | 男 |
其中是的占比为1,则特征 是否有喉结 相对于类别男的熵为:
$$ - (1*log_{2}{1})$$
即: - (0) = 0。 = 0。➎
最终特征是否有喉结对性别类别的熵为 (➍ + ➎) / 2 = (0 + 0) / 2 = 0。➏
决策支持
综合③⑥得知对于性别分类而言特征是否有喉结的熵为0,类别的熵为1,所以基于当前数据集的决策时,第一个决策的特征应该是是否有喉结,即熵越小,使用此特征进行决策效率越高。
实际的使用也是如何,通过熵为0的特征是否有喉结决策时,可以直接决策中性别是男还是女,比使用特征喜欢颜色决策的效率更高。
对比
在实际的应用中,当处理类别分布不均匀的数据集时(比如在银行转账记录,只有不到1%的记录属于异常转账,其它的都属于正常转账),更推荐使用基尼系数;而当处理类别分布相对均匀的数据集时(比如不文明驾车中人群中中人的年龄分布都差不多),则倾向于用熵。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。