V1.0
决策树的概念
决策树是属于用树的形式,在树的每一个内部节点上使用1个划分标准,对在该节点上待划分的样本进行划分,划分成2个类别,2堆样本可以作为叶子节点,认为其中样本都属于某个分类,也可以继续使用另1个划分标准继续划分。
决策树的每个结点的划分标准是通过学习得到的,不需要人工进行设计。
决策树具体划分到何时停止,可以通过决策树的超参数来进行设定,常用的超参数包括决策树的最大深度以及叶子节点最小样本数等。
决策树的结构
决策树的根节点上包含所有待划分样本,决策树中的非叶子节点会进行会进行样本划分,称为内部节点。叶子节点上的样本,经过了其父节点(内部节点)的划分,预测为同1种分类。
决策树的构建
决策树由根节点不断向下递归构建,不断由父节点生成子节点,子节点可以成为叶子节点,终止划分,也可以成为内部节点,继续划分构建子树。
划分标准的选择
在每个内部节点上要进行样本的划分,需要确定2个关键点:
- 根据样本的哪个特征维度进行划分,具体来说,即根据样本特征向量的哪1个维度进行划分
- 用于划分的特征维度的阈值是多少
每次分裂1个节点上的样本,需要使用1种方法从划分节点的样本中选取特征维度及阈值。可行的方法可以使用类似其他机器学习的方法最小化1种损失度量,使用某个节点上损失最小的划分方式作为该节点的划分方式。这种划分方式需要能够使得尽可能将某1种或某几种样本较为完全的分离出来。
决策树使用最小化信息熵或者最小化基尼系数的方式来选取1个节点上的划分标准,对每个划分标准都可以求其信息熵或者其基尼系数,并将其进行比较。
对于每1种划分标准所划分出来的左右两堆样本,在每堆样本中统计各个类别的样本的数量,占这堆样本总数的比例,将其作为概率,并以这堆样本中各个类别的概率,来求信息熵或者基尼系数。将左右两堆样本的信息熵或者基尼系数加和,得到这种划分标准的总损失。
信息熵
信息熵的公式如下:
H
(
P
)
=
−
∑
i
=
1
n
P
i
⋅
log
P
i
H(P)=-\sum_{i=1}^n{P_i\cdot{\log{P_i}}}
H(P)=−i=1∑nPi⋅logPi
信息熵表示一个概率系统的中的事件的概率分散程度,概率系统中的各个事件中概率越集中于1个事件或少数某几个事件时信息熵越小。概率系统中各个事件的概率分布越平均,且事件数量越多,信息熵越大。
基尼系数
基尼系数(Gini Index)的公式如下:
G
i
n
i
(
P
)
=
1
−
∑
i
=
1
n
P
i
2
Gini(P)=1-\sum_{i=1}^n{{P_i}^2}
Gini(P)=1−i=1∑nPi2
基尼系数也可以表示一个概率系统中事件概率的分散程度。当事件概率分布完全集中时,即有1个事件的概率是
1
1
1,其他事件若有概率为
0
0
0,此时基尼系数取得最大值
1
1
1。
当概率系统中的事件的概率越分散时,各个事件的概率的平方之和越小,基尼系数越大。
如果划分的2堆样本各自的内部样本分类更集中,集中于某种样本或某几种样本,则这种划分是更有效的,信息熵越小(或基尼系数越小)。
内部节点进行划分时需要对其分割的左右两堆样本分别求其信息熵或基尼系数,并以此作为这种划分标准的损失,每个待划分的节点需要选取最优的划分标准,即损失最小的划分标准。
划分标准举例
举1个内部节点划分的例子。设样本有2个维度,共有3个分类A,B和C,各分类分别有 { 5 , 5 , 5 } \{5,5,5\} {5,5,5}个样本,使用标准 S 1 S_1 S1划分的结果如下,左边的的堆中有A,B,C样本 { 4 , 1 , 0 } \{4, 1, 0\} {4,1,0}个,右边有样本 { 1 , 4 , 5 } \{1, 4, 5\} {1,4,5}个,这是1个比较有效的划分,有效的将A样本划分了出来。
划分标准1的信息熵为:
H
(
S
1
L
e
f
t
)
=
−
1.0
∗
log
1.0
=
0
H
(
S
1
R
i
g
h
t
)
=
−
(
0.1
∗
log
0.1
+
0.4
∗
log
0.4
+
0.5
∗
log
0.5
)
≈
0.3010
H
(
S
1
)
=
H
(
S
1
L
e
f
t
)
+
H
(
S
1
R
i
g
h
t
)
=
0.3010
\begin{align} H(S_{1_{Left}})&=-1.0*\log{1.0}=0\\ H(S_{1_{Right}})&=-(0.1*\log{0.1}+0.4*\log{0.4}+0.5*\log{0.5})\approx0.3010\\ H(S_1)&=H(S_{1_{Left}})+H(S_{1_{Right}})=0.3010\\ \end{align}
H(S1Left)H(S1Right)H(S1)=−1.0∗log1.0=0=−(0.1∗log0.1+0.4∗log0.4+0.5∗log0.5)≈0.3010=H(S1Left)+H(S1Right)=0.3010
再来看另1种划分标准,同样A,B,C 的3种样本,左边的堆中有A,B,C样本分别为 { 2 , 2 , 2 } \{2, 2, 2\} {2,2,2}个,右边的堆种有A、B、C样本 { 3 , 3 , 3 } \{3, 3, 3\} {3,3,3}个,这不是1个很有效的划分标准,因为没有能够使得某种样本或某几种样本被区分出来,左右两堆样本的信息熵较大。
划分标准
S
2
S_2
S2的信息熵为:
H
(
S
2
L
e
f
t
)
=
−
(
1
3
∗
log
1
3
+
1
3
∗
log
1
3
+
1
3
∗
log
1
3
)
≈
0.4771
H
(
S
2
R
i
g
h
t
)
=
−
(
1
3
∗
log
1
3
+
1
3
∗
log
1
3
+
1
3
∗
log
1
3
)
≈
0.4771
H
(
S
2
)
=
H
(
S
2
L
e
f
t
)
+
H
(
S
2
R
i
g
h
t
)
=
0.9542
\begin{align} H(S_{2_{Left}})&=-(\frac{1}{3}*\log{\frac{1}{3}}+\frac{1}{3}*\log{\frac{1}{3}}+\frac{1}{3}*\log{\frac{1}{3}})\approx0.4771\\ H(S_{2_{Right}})&=-(\frac{1}{3}*\log{\frac{1}{3}}+\frac{1}{3}*\log{\frac{1}{3}}+\frac{1}{3}*\log{\frac{1}{3}})\approx0.4771\\ H(S_2)&=H(S_{2_{Left}})+H(S_{2_{Right}})=0.9542\\ \end{align}
H(S2Left)H(S2Right)H(S2)=−(31∗log31+31∗log31+31∗log31)≈0.4771=−(31∗log31+31∗log31+31∗log31)≈0.4771=H(S2Left)+H(S2Right)=0.9542
在这种情况下,选择划分标准
S
1
S_1
S1更好,因为其将A类样本更好的划分了出来(分类中混杂的B类样本可以进一步进行划分),左右2堆样本中种类更集中,信息熵更小。
节点划分标准的选择流程
循环选取特征维度 i 各个样本按特征维度 i 进行从小到大排序 循环选取排序后的第 k 个样本的维度 i 的数值将 x k , i 作为阈值,将该节点上的样本划分为 2 堆 划分的 2 堆样本分别求信息熵 H L e f t 和 H R i g h t ,并加和得到该划分的信息熵损失 H 若 H 优于现在的保存结果 保存信息熵 H ,划分特征维度 i ,以及划分阈值 x k , i \begin{align} &循环选取特征维度\ {i}\ \\ &\quad{各个样本按特征维度\ {i}\ 进行从小到大排序}\\ &\quad循环选取排序后的第\ k\ 个样本的维度\ i\ 的数值将x_{k,i}作为阈值,将该节点上的样本划分为2堆\\ &\quad划分的2堆样本分别求信息熵H_{Left}和H_{Right},并加和得到该划分的信息熵损失\ H\ \\ &\quad若\ H\ 优于现在的保存结果\\ &\quad\quad保存信息熵\ H\ ,划分特征维度\ i\ ,以及划分阈值x_{k,i} \end{align} 循环选取特征维度 i 各个样本按特征维度 i 进行从小到大排序循环选取排序后的第 k 个样本的维度 i 的数值将xk,i作为阈值,将该节点上的样本划分为2堆划分的2堆样本分别求信息熵HLeft和HRight,并加和得到该划分的信息熵损失 H 若 H 优于现在的保存结果保存信息熵 H ,划分特征维度 i ,以及划分阈值xk,i
决策树分裂过程的停止
一般来说,如果不加控制,决策树可以分裂到叶子节点中只有1个样本。
可以通过控制超参数来使得决策树的分裂过程提前终止,这些超参数包括决策树的最大深度,决策树的最大叶子节点数(即决策树的最大叶子结点总数),内部节点分裂所需要的最小样本数(一个节点中的样本需要大于等于这个数量才能进行分裂,不然将作为叶子节点),叶子节点中的最小样本数等。