在决策树应用一文中,在构建决策分类树应用决策算法时,介绍了基尼系数(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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。