决策树的基尼系数计算过程

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、统计

  1. Chest Pain
  1. true
    Heart Disease
  1. Yes:105
  2. No:39
  1. false
    Heart Disease
  1. Yes:34
  2. No:125
  1. Good Blood Circulation
  1. true
    Heart Disease
  1. Yes:37
  2. No:127
  1. false
    Heart Disease
  1. Yes:100
  2. No:33
  1. Blocked Arteries
  1. true
    Heart Disease
  1. Yes:92
  2. No:31
  1. false
    Heart Disease
  1. Yes:45
  2. No:129

在统计数据的时候,若遇见缺失值,最简单的办法就是先跳过这个缺失值

从统计的数据可以看出,在某一特征的条件下,无论是true或者false都有患有Heart Disease的人,同时也都有健康的人。且这两个分布是不同,有的true中患有Heart Disease的多一些,有的false中患有Heart Disease的多一些,则就要引出另一个概念—纯度。刚刚将的那种情况其实就是不纯的,那么我们接下来的操作就是对其不断的提纯。

接下来引出基尼指数的概念:基尼指数遵循最小的准则,计算得到的基尼指数越小,则越纯。接下来则以该特征作为决策树的一个分支。但若当前节点的基尼指数小于待划分节点的基尼指数时,则不需要划分。

3、基尼指数的基本公式

Single_gini = python中基尼系数的计算 基尼系数的简单算法_机器学习

Gini_Index = Single_gini_true * python中基尼系数的计算 基尼系数的简单算法_python中基尼系数的计算_02 + Single_gini_false * python中基尼系数的计算 基尼系数的简单算法_python_03

4、上述例子的计算过程

第一次分支
  1. Chest Pain
    Gini_index = 0.364
  2. Good Blood
    Gini_indx = 0.360
  3. Blocked Arteries
    Gini_index = 0.381

有上面这些结果可知,我们第一次分叉应该选择Good Blood这个特征,因为前面我们提到,在同一情况下一个特征的基尼指数越小,其纯度也就越高,也就越具有代表性,分类的效果也就越好。上面三个例子相比较,我们应该选择Good Blood这个作为决策树的一个分支。

第二次分支

我们第一次是以Good Blood为分支的那么,假设选定该分支的true,那么其基尼指数,用上面的公式可以得到大概是0.35(false分支上的计算也是同理,这里我们只进行true分支上的基尼指数的计算)

进行分支后我们对剩余的两个特征的值进行统计

  1. Chest Pain
  1. true
    Heart Disease
  1. Yes:13
  2. No:98
  1. false
    Heart Disease
  1. Yes:24
  2. No:29
  1. Blocked Arteries
  1. true
    Heart Disease
  1. Yes:24
  2. No:25
  1. false
    Heart Disease
  1. Yes:13
  2. No:102

并在此基础上,我们进行第二次分支

接下来来计算Chest Pain和Blocked Arteries这两类特征在Good Blood这类特征的分支下的基尼指数

  1. Chest Pain
    Gini_index = 0.3
  2. Blocked Arteries
    Gini_index = 0.29

因为0.29<0.3<0.35,故我们选择Blocked Arteries作为 Good Blood的true分支下的一个分支节点

第三次分支

假设选定该分支的true,那么其基尼指数,用上面的公式可以得到大概是0.5

进行分支后我们对剩余的特征的值进行统计

  1. Chest Pain
  1. true
    Heart Disease
  1. Yes:17
  2. No:3
  1. false
    Heart Disease
  1. Yes:7
  2. No:22

并在此基础上,我们进行第三次分支

接下来来计算Chest Pain这类特征在Blocked Arteries这类特征的分支下的基尼指数

  1. Chest Pain
    Gini_index = 0.33

因为0.33<0.5,故我们选择Chest Pain作为Blocked Arteries的true分支下的一个分支节点

但假如选定的分支是false,那么其基尼指数计算得到大概是0.2

  1. Chest Pain
  1. true
    Heart Disease
  1. Yes:7
  2. No:26
  1. false
    Heart Disease
  1. Yes:6
  2. No:76

接下来来计算Chest Pain这类特征在Blocked Arteries这类特征的分支下的基尼指数

  1. Chest Pain
    Gini_index = 0.29

因为0.29>0.2故该节点不需要分支,因为分支的目的是提纯,而提纯,则是选择使基尼指数变小的那个特征,而0.29>0.2基尼系数上升,没有达到提纯的目的,故不需要分支。

学习视频:https://www.bilibili.com/video/BV17J411C7zZ?p=59