基尼杂质,一个关于基尼杂质的简单解释:
什么是基尼杂质(举例说明)以及它如何被用来训练决策树。
如果您查看scikit-learn中的DecisionTreeClassifier类的文档,您会看到criteria参数如下:
RandomForestClassifier文档也说明了同样的问题。他们都提到,默认的标准是“基尼”的基尼杂质。那是什么? !
决策树🌲
训练决策树包括迭代地将当前数据分成两个分支。假设我们有以下数据点:
数据集
现在,我们有5个蓝色和5个绿色的树枝。
我们在x = 2处分开:
一个完美的分割
这是一个完美的分裂!它将我们的数据集完美地分成两个分支:
左支,带5个蓝色。
右支,5个绿色。
如果我们在x = 1.5处分割呢?
一个不完美的分割
这个不完美的分割将我们的数据集分成以下几个分支:
- 左支,4个蓝色。
- 右支,有1个蓝色和5个绿色。
很明显,这种分裂更糟,但我们如何量化它呢?
如果我们添加第三个类,red,那么能够衡量拆分的质量就变得更加重要。想象一下这样的分裂:
- 分支1,有3个蓝色,1个绿色,1个红色。
- 分支2,有3个绿色和1个红色。
对比一下这个分裂:
- 分支1,有3个蓝色,1个绿色,2个红色。
- 分支2,有3个绿色。
哪个分割更好?这不再是显而易见的。我们需要一种方法来定量评估分裂的好坏。
基尼杂质
这就是基尼杂质指标的用处。
假设我们:
- 在我们的数据集中随机选择一个数据点
- 根据数据集中的类分布对其进行随机分类。对于我们的数据集,我们将其分类为蓝色 \frac{5}{10}和绿色 \frac{5}{10},因为每种颜色我们都有5个数据点。
我们错误分类数据点的概率是多少?这个问题的答案是基尼杂质。
例1:整个数据集
我们来计算整个数据集的基尼杂质。如果随机选择一个数据点,它要么是蓝色的(50%),要么是绿色的(50%)。
现在,我们根据类分布对数据点进行随机分类。因为每种颜色都有5种,所以我们将其分为蓝色和绿色各占50%。
我们错误分类数据点的概率是多少?
我们只在上面的两个事件中对其进行了错误的分类。所以总概率是25% + 25% = 50%。所以Gini杂质是0.5。
公式
如果我们有C总类和p(i)是选择一个具有i类的数据点的概率,那么基尼杂质被计算为:
G = \sum_{i=1}^C p(i)*(1-p(i))
例如,我们设C=2,p(1)=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
与我们计算的相匹配!
例子2:完美的分割
让我们回到完美的分割。分裂后两分支的基尼杂质是什么?
左分支只有蓝色,所以它的基尼杂质是:
G_{left} =1∗(1−1)+0∗(1−0)= 0
右分支只有绿色,所以它的基尼杂质是:
G_{right} =0∗(1−0)+1∗(1−1)= 0
两个分支都有0个杂质!完美分割将含有0.5杂质的数据集转化为含有0杂质的2个分支。
基尼系数为0的杂质是最低也是最好的杂质。只有当所有的东西都是相同的类别时(例如,只有蓝色或绿色),它才能实现。
例3:不完美的分割
最后,让我们回到我们不完美的分裂。
左分支只有蓝色,所以我们知道G_{left}= 0。
右分支右1个蓝色和5个绿色,所以:
G_{right} = \frac{1}{6} * (1-\frac{1}{6}) +\frac{5}{6} * (1-\frac{5}{6}) = \frac{5}{18}= 0.278
选择最佳分割
终于到了回答我们之前提出的问题的时候了:我们如何定量地评估拆分的质量?
这又是一个不完美的分裂:
我们已经计算了基尼系数杂质:
- 分割前(整个数据集):0.5
- 左分支:0
- 正确的分支:0.278
我们将通过对每个分支中含有多少元素的杂质进行加权来确定拆分的质量。由于左分支有4个元素,右分支有6个元素,得到:
(0.4∗0)+(0.6∗0.278)=0.167
因此,我们用这个分裂“除去”的杂质的量是:
0.5−0.167= 0.333
我把这个值称为基尼系数。这是用来在决策树中选择最佳分割的!更高的基尼系数=更好的分配。例如,很容易验证数据集上完美分割的基尼系数为0.5> 0.333。
回顾
Gini杂质是根据数据集中的类分布对数据集中随机选择的元素进行随机标记后,对其进行错误分类的概率。它的计算为:
G = \sum_{i=1}^C p(i)*(1-p(i))
其中C是类的个数,p(i)是随机抽取第i类元素的概率。
当训练决策树时,通过最大化基尼系数(Gini Gain)来选择最佳分割,基尼系数的计算方法是将原始杂质减去分支上的加权杂质。