视频来自B站:StatQuest - Decision Trees
一、建立决策树
现在有一组数据,是病人的健康程度,即胸痛、血液循环、动脉阻塞,以及该病人是否有心脏病,现在我们要用这组数据建立一个决策树,来预测一个人是否有心脏疾病,数据如下:
决策树是由许多的yes/no节点组成的树状分类器,该例子中病人有三个健康因素,这三个因素可以都可以组成节点,每个节点的统计方式是,例如chest pain,判断病人是否有胸痛,其中有144个样本通过yes,即有胸痛统计到左叶子节点,有159个样本通过no,即无胸痛统计到右叶子节点,在144个有胸痛的样本中,有105个样本有心脏病,39个无心脏病,在159个无胸痛的样本中,有34个有心脏病,125个无心脏病,其他节点统计结果如下:
注意:chest pain 、good blood circulation、blocked arteries三个因素的总数不同,因为一些病人可能同时没有三种测量数据。
二、基尼系数
观察发现,三种节点,没有一个节点可以100%的用来判断是否有心脏疾病,这种节点是"impure",为了判断哪种节点更好,我们需要来比较各个节点的“impurity”程度,当然有很多种方法来测量这种“impurity”程度,这里使用基尼系数(Gini)
下面我们来计算chest pain节点左叶的基尼系数:
采用同样的方式,计算chest pain节点右叶的基尼系数:
G
i
n
i
_
r
i
g
h
t
_
l
e
a
f
=
1
−
(
34
34
+
125
)
−
(
125
34
+
125
)
=
0.336
\begin{aligned} Gini\_right\_leaf &= 1 - ( \frac{34}{34 + 125})- ( \frac{125}{34 + 125}) \\ &= 0.336 \end{aligned}
Gini_right_leaf=1−(34+12534)−(34+125125)=0.336
那么chest pain节点的基尼系数怎么计算呢,整个节点的基尼系数是左右leaf的基尼系数的加权平均值,即
如果,我们来假设chest pain是个很"pure"的节点,即144个有胸痛的病人都有心脏病,159个无胸痛的病人都没有心脏病,那么这样"pure"的节点的基尼系数是:
G
i
n
i
_
l
e
f
t
_
l
e
a
f
=
1
−
(
144
144
+
0
)
−
(
0
144
+
0
)
=
0
\begin{aligned} Gini\_left\_leaf &= 1 - ( \frac{144}{144 + 0})- ( \frac{0}{144 + 0}) \\ &= 0 \end{aligned}
Gini_left_leaf=1−(144+0144)−(144+00)=0
G
i
n
i
_
r
i
g
h
t
_
l
e
a
f
=
1
−
(
0
0
+
159
)
−
(
159
0
+
159
)
=
0
\begin{aligned} Gini\_right\_leaf &= 1 - ( \frac{0}{0 + 159})- ( \frac{159}{0 + 159}) \\ &= 0 \end{aligned}
Gini_right_leaf=1−(0+1590)−(0+159159)=0
G
i
n
i
=
0
Gini = 0
Gini=0
发现,基尼系数越小,节点纯度越大。
这样,我们可以得到三个节点的基尼系数:
三、决策树左分支
计算后发现,Good Blood Circulation的基尼系数最小,因此我们使用Good Blood Circulation作为决策树的根节点root
决策树有了根节点后,就可以开始第一个节点的比较,通过判断病人是否血液循环良好,我们发现,有164个循环好,其中127个没有心脏病,37个有心脏病,133个血液循环不好,其中100个有心脏病,33个没有心脏病,如下图:
接下来,就需要chest pain 和 blocked arteries 来进一步区分,对于节点Good Circ的左叶子节点,共164个样本,我们需要针对这164个样本,分布计算chest pain和blocked arteries的基尼系数,如下图
通过比较二者的基尼系数,发现blocked arteries的基尼系数最小,因此blocked arteries节点连接到根节点的左叶子节点上
现在左分支上就剩下chest pain了,因此将chest pain连接到Blocked的左叶子节点上,发现,chest pain 表现很好,
但是在Blocked的右叶子节点是,发现计算chest Pain的基尼系数时,发现为0.29,而计算13/102叶子节点的基尼系数是,为0.2,也就是在13/102叶子节点后面加入chest Pain节点,反而增加了节点的"impurity"的程度,因此该节点到这里结束,
我们完成了决策树左分支的建立,
四、决策树的建立
用同样的方法,将决策树的右节点建立起来