Gini Impurity——基尼杂质是什么,怎样应用于决策树
本文翻译自Victor Zhou @victorczhou 的A Simple Explanation of Gini Impurity
作者Victor Zhou的博客地址:https://victorzhou.com/
Decision Tree 决策树
训练一个决策树,简单来讲就是将一份数据递归分成两份的过程。
这是一份数据范例,包含了5个小蓝点和5个小绿点。
以 x = 2 作为分割线:
这是一个完美的分割线,将数据划分成两份:
- 左边 只包含5个小蓝点
- 右边 只包含5个小绿点
如果以 x = 1.5 作为分割线,做一次数据划分:
这种并不完美的划分,将数据分成:
- 左边 包含4个小蓝点
- 右边 包含1个小蓝点、4个小绿点
直觉上,这种划分就很糟糕。问题来了,怎样量化这样划分的好坏程度呢?
如果再引入一种颜色的点:小红点。做出以下两种划分方案:
方案1 | 方案2 | |
---|---|---|
分区1 | 蓝色3个 绿色1个 红色1个 | 蓝色3个 绿色1个 红色2个 |
分区2 | 绿色3个 红色1个 | 绿色3个 |
哪一种方案更好就不是很明显了,我们需要一种方法来量化分析这种划分的好坏程度。
Gini Impurity 基尼杂质/基尼不纯度/基尼系数
操作如下:
- 随机从我们的数据范例中挑选一种颜色的点,然后
- 根据它的颜色在数据范例中的分布,随机将它归类到不同颜色。 因为每种颜色有5个点, 我们将数据范例,归类成 蓝色点5/10,绿色点5/10 。
那么,第2步分类错误的概率是多少呢?解决这个问题就需要Gini Impurity.
例1: 整个数据范例
首先计算完整数据范例的Gini Impurity。
随机选取颜色点,得到的结果是蓝色50%, 绿色50%。
现在,随机的将每个点分类到蓝色类和绿色类。因为每个颜色都有5个点,所以归类时划分到蓝色有50%划分到绿色有50%。
事件 | 概率 |
---|---|
选取蓝色, 归类蓝色 ✓ | 25% |
选取蓝色, 归类绿色 ❌ | 25% |
选取绿色, 归类蓝色 ❌ | 25% |
选取绿色, 归类绿色 ✓ | 25% |
最后,计算一下分类失败的概率是多少。总共失败事件有2例,总概率是25% + 25% = 50%,所以得到Gini Impurity = 0.5。
公式化
一份数据有C个类型,p(i)是选取一个点是类型i的概率,计算Gini Impurity 的公式就是:
G
=
Σ
i
+
1
C
p
(
i
)
∗
(
1
−
p
(
i
)
)
G = \Sigma_{i+1}^{C}p(i)*(1-p(i))
G=Σi+1Cp(i)∗(1−p(i))
对于例1,C = 2, p(i) = 0.5, p(2) = 0.5, 公式:
G
=
p
(
1
)
∗
(
1
−
p
(
1
)
)
+
p
(
2
)
∗
(
1
−
p
(
2
)
)
=
0.5
∗
(
1
−
0.5
)
+
0.5
∗
(
1
−
0.5
)
=
0.5
G = p(1) * (1 - p(1)) + p(2) * (1 - p(2)) \\ = 0.5 * (1 - 0.5) + 0.5 * (1 - 0.5) = 0.5
G=p(1)∗(1−p(1))+p(2)∗(1−p(2))=0.5∗(1−0.5)+0.5∗(1−0.5)=0.5
与之前表格统计的结果一致。
例2 完美划分方案
回到最开始的完美划分,计算一下Gini Impurity。
左边只有蓝色点,它的Gini Impurity计算如下:
G
l
e
f
t
=
1
∗
(
1
−
1
)
+
0
∗
(
1
−
0
)
=
0
G_{left} = 1 * (1 - 1) + 0 * (1 - 0) = 0
Gleft=1∗(1−1)+0∗(1−0)=0
右边只有绿色点,它的Gini Impurity计算如下:
G
r
i
g
h
t
=
0
∗
(
1
−
0
)
+
1
∗
(
1
−
1
)
=
0
G_{right} = 0 * (1 - 0) + 1 * (1 - 1) = 0
Gright=0∗(1−0)+1∗(1−1)=0
总的Gini Impurity是0 。 所以完美划分方案,将原来的Gini Impurity 从 0.5 下降到 0。
Gini Impurity 最低就是0,同时也是最好的划分结果。 同一个区域内,颜色种类完全一致,才可以获得Gini Impurity = 0。
例3 不完美划分方案
左边只有蓝色点,所以
G
l
e
f
t
=
0
G_{left} = 0
Gleft=0
右边有1个蓝色,5个绿色,所以
G
r
i
g
h
t
=
1
6
∗
(
1
−
1
6
)
+
5
6
∗
(
1
−
5
6
)
=
5
18
=
0.278
G_{right} = \frac{1}{6} * (1 - \frac{1}{6}) + \frac{5}{6} * (1 - \frac{5}{6})\\ = \frac{5}{18}\\ = 0.278
Gright=61∗(1−61)+65∗(1−65)=185=0.278
选择最佳划分方案
现在,我们就可以回答最开始问题了。怎么量化分析划分方案的好坏?
再看一次不完美划分:
我们已经计算了以下Gini Impurity:
- 划分前,G = 0.5
- 划分后左边, G = 0
- 划分后右边, G = 0.278
这次划分的好坏,可以通过G值乘以左右各占的权重所得到最终结果来决定。
左边有4个点,
W
l
e
f
t
=
0.4
W_{left} = 0.4
Wleft=0.4右边有6个点
W
r
i
g
h
t
=
0.6
W_{right} = 0.6
Wright=0.6
G
=
0.4
∗
0
+
0.6
∗
0.278
=
0.167
G = 0.4 * 0 + 0.6 * 0.278 = 0.167
G=0.4∗0+0.6∗0.278=0.167
通过这次划分,清理掉的杂质是 0.5 - 0.167 = 0.333,这个值称为Gini Gain (Gini 收益)。通过这个值,就可以选择最佳的决策树。Gini Gain的数值越高,该划分效果越好。 举个例子,完美划分方案 的Gini Gain是0.5, 不完美划分方案 的Gini Gain是0.333,很容易确定 完美划分方案 效果更好。
总结
Gini Impurity 就是将来自数据集合中的某种随机结果应用到数据集合中的随机数据所得到预期误差率。它的计算公式是:
G
=
Σ
i
+
1
C
p
(
i
)
∗
(
1
−
p
(
i
)
)
G = \Sigma_{i+1}^{C}p(i)*(1-p(i))
G=Σi+1Cp(i)∗(1−p(i))
C是数据类型的种类,p(i)是随机一个数据是类型i的概率。
当训练一个决策树时,选择最佳划分方案的依据就是:Gini Gain 越高越好。
Gini Gain = 原Gini Impurity - 划分后Gini Impurity
划分后Gini Impurity = sum(各个分区所占权重 * 分区Gini Impurity)
本文翻译自Victor Zhou @victorczhou 的A Simple Explanation of Gini Impurity