决策树的基尼系数计算过程
1、基尼指数的计算
在介绍具体的计算之前,先从一个例子入手吧。
先看看下面这个数据,我们需要通过前三列的特征来推断出最后一列是yes,no
1、数据
Chest Pain | Good Blood Circulation | Blocked Arteries | Heart Disease |
---|---|---|---|
No | No | No | No |
Yes | Yes | Yes | Yes |
Yes | Yes | No | No |
Yes | No | ??? | Yes |
etc… | etc… | etc… | etc… |
2、统计
-
Chest Pain
-
true
Heart Disease
- Yes:105
- No:39
-
false
Heart Disease
- Yes:34
- No:125
-
-
Good Blood Circulation
-
true
Heart Disease
- Yes:37
- No:127
-
false
Heart Disease
- Yes:100
- No:33
-
-
Blocked Arteries
-
true
Heart Disease
- Yes:92
- No:31
-
false
Heart Disease
- Yes:45
- No:129
-
在统计数据的时候,若遇见缺失值,最简单的办法就是先跳过这个缺失值
从统计的数据可以看出,在某一特征的条件下,无论是true或者false都有患有Heart Disease的人,同时也都有健康的人。且这两个分布是不同,有的true中患有Heart Disease的多一些,有的false中患有Heart Disease的多一些,则就要引出另一个概念—纯度。刚刚将的那种情况其实就是不纯的,那么我们接下来的操作就是对其不断的提纯。
接下来引出基尼指数的概念:基尼指数遵循最小的准则,计算得到的基尼指数越小,则越纯。接下来则以该特征作为决策树的一个分支。但若当前节点的基尼指数小于待划分节点的基尼指数时,则不需要划分。
3、基尼指数的基本公式
Single_gini = 1 − ( a a + b ) 2 − ( b a + b ) 2 1-(\dfrac{a}{a+b})^2-(\dfrac{b}{a+b})^2 1−(a+ba)2−(a+bb)2
Gini_Index = Single_gini_true * a + b a + b + c + d \dfrac{a+b}{a+b+c+d} a+b+c+da+b + Single_gini_false * c + d a + b + c + d \dfrac{c+d}{a+b+c+d} a+b+c+dc+d
4、上述例子的计算过程
第一次分支
-
Chest Pain
Gini_index = 0.364
-
Good Blood
Gini_indx = 0.360
-
Blocked Arteries
Gini_index = 0.381
有上面这些结果可知,我们第一次分叉应该选择Good Blood这个特征,因为前面我们提到,在同一情况下一个特征的基尼指数越小,其纯度也就越高,也就越具有代表性,分类的效果也就越好。上面三个例子相比较,我们应该选择Good Blood这个作为决策树的一个分支。
第二次分支
我们第一次是以Good Blood为分支的那么,假设选定该分支的true,那么其基尼指数,用上面的公式可以得到大概是0.35(false分支上的计算也是同理,这里我们只进行true分支上的基尼指数的计算)
进行分支后我们对剩余的两个特征的值进行统计
-
Chest Pain
-
true
Heart Disease
- Yes:13
- No:98
-
false
Heart Disease
- Yes:24
- No:29
-
-
Blocked Arteries
-
true
Heart Disease
- Yes:24
- No:25
-
false
Heart Disease
- Yes:13
- No:102
-
并在此基础上,我们进行第二次分支
接下来来计算Chest Pain和Blocked Arteries这两类特征在Good Blood这类特征的分支下的基尼指数
-
Chest Pain
Gini_index = 0.3
-
Blocked Arteries
Gini_index = 0.29
因为0.29<0.3<0.35,故我们选择Blocked Arteries作为 Good Blood的true分支下的一个分支节点
第三次分支
假设选定该分支的true,那么其基尼指数,用上面的公式可以得到大概是0.5
进行分支后我们对剩余的特征的值进行统计
-
Chest Pain
-
true
Heart Disease
- Yes:17
- No:3
-
false
Heart Disease
- Yes:7
- No:22
-
并在此基础上,我们进行第三次分支
接下来来计算Chest Pain这类特征在Blocked Arteries这类特征的分支下的基尼指数
-
Chest Pain
Gini_index = 0.33
因为0.33<0.5,故我们选择Chest Pain作为Blocked Arteries的true分支下的一个分支节点
但假如选定的分支是false,那么其基尼指数计算得到大概是0.2
-
Chest Pain
-
true
Heart Disease
- Yes:7
- No:26
-
false
Heart Disease
- Yes:6
- No:76
-
接下来来计算Chest Pain这类特征在Blocked Arteries这类特征的分支下的基尼指数
-
Chest Pain
Gini_index = 0.29
因为0.29>0.2故该节点不需要分支,因为分支的目的是提纯,而提纯,则是选择使基尼指数变小的那个特征,而0.29>0.2基尼系数上升,没有达到提纯的目的,故不需要分支。
学习视频:https://www.bilibili.com/video/BV17J411C7zZ?p=59