文章目录
一. 决策树算法简介
决策树是一种常见的机器学习算法,通过模拟人类思考的树状模式,通过对特征值的一次次判断划分最终得到想要的答案。因此本算法的重点就在于选取最优特征值对目标进行划分,而后递归地进行这一步,直到最后仅剩下同一类型的目标或者目标不可再分。
决策树算法中常见的选取特征值方法有三种:
- ID3算法
- C4.5算法
- CART算法
本文将对这三种方法进行简要介绍
二. ID3算法
2.1 算法简介
ID3算法全称Iterative Dichotomiser 3,即迭代二叉树算法第三代,是通过计算信息增益选出最优特征值。并以此递归地进行分类直到完成决策树地构建。
2.2 信息增益
信息增益(Information Gain)是用于特征选择的一个重要指标,其衡量了知道信息特征后类别不确定性减少的程度。信息增益即原始数据的熵与条件熵之差,计算公式是
G
a
i
n
(
T
,
A
)
=
H
(
T
)
−
H
(
T
∣
A
)
Gain(T,A) = H(T) - H(T|A)
Gain(T,A)=H(T)−H(T∣A)
此处的Gain(T,A) 就是集合T基于条件A的信息增益,H则表示熵,H(T) 表示原始数据的熵,H(T|A) 表示条件熵
2.2.1 熵
熵描述了一个系统中的混乱程度高低,当熵的数值高时,系统的混乱程度高,反之则有序程度高。其计算公式通常表示为
H
(
X
)
=
−
∑
i
=
1
n
p
(
x
i
)
⋅
l
o
g
2
p
(
x
i
)
H(X) = -\sum\limits_{i=1}^np(x_i)\cdot log_2p(x_i)
H(X)=−i=1∑np(xi)⋅log2p(xi)
简单来说,这个公式是在计算每个可能事件发生所带来的信息量的期望值。此处的**p(xi)表示的是X条件下第i个事件发生的概率,则熵的计算公式即该条件下各个事件发生的期望值的和的取反。如下表,如要计算条件温度的熵,则需要计算热、温暖、冷三个事件的期望值。
天气 | 温度 | 湿度 | 风速 | 是否下雨 |
---|---|---|---|---|
晴朗 | 热 | 高 | 弱 | 否 |
阴天 | 温暖 | 高 | 强 | 是 |
雨天 | 冷 | 正常 | 强 | 是 |
晴朗 | 温暖 | 高 | 弱 | 否 |
晴朗 | 冷 | 正常 | 弱 | 是 |
而当我们根据上述公式计算得到每个事件的熵,我们可以根据下列公式得到该条件的条件熵
H
(
T
∣
X
)
=
∑
x
∈
X
p
(
x
)
H
(
T
∣
X
=
x
)
H(T|X) = \sum\limits_{x\in X}p(x)H(T|X=x)
H(T∣X)=x∈X∑p(x)H(T∣X=x)
即每个事件的熵的和乘上发生的额概率,最后求和即可得到条件X的条件熵
2.2.2 例子
接下来我们以上面的表格为例子,进行计算的示例。
在这个数据集中,总共有四个条件,目的是判断是否下雨,首先我们需要计算整个数据集的熵。在这个数据集中,五天里有三天下雨,两天不下雨,根据公式可得
H
(
T
)
=
−
(
3
5
l
o
g
2
3
5
+
2
5
l
o
g
2
2
5
)
≈
1.351
H(T) = -(\dfrac{3}{5}log_2\dfrac{3}{5} +\dfrac{2}{5}log_2\dfrac{2}{5})\approx1.351
H(T)=−(53log253+52log252)≈1.351
则可得整个数据集的熵为1.351,之后我们需要依此计算每个条件的条件熵,以风速为例,风速条件有两个事件,依次用H1和H2表示风速强和弱的熵。首先数据集中有两天是强风,其中两天都下雨,则有
H
1
=
−
1
l
o
g
2
1
=
0
H_1 = -1log_21 = 0
H1=−1log21=0
因为只要风速是强的,就一定会下雨,则此处的熵为0,根据上述式子的计算也可得这一结论,接下来计算风速弱的条件熵,共有三天风速弱,其中两天没有下雨一天下雨,则有
H
2
=
−
(
2
3
l
o
g
2
2
3
+
1
3
l
o
g
2
1
3
)
≈
0.918
H_2 = -(\dfrac{2}{3}log_2\dfrac{2}{3}+\dfrac{1}{3}log_2\dfrac{1}{3})\approx0.918
H2=−(32log232+31log231)≈0.918
此时便能计算条件风速的条件熵
H
(
T
∣
风速
)
=
2
5
⋅
H
1
+
3
5
⋅
H
2
=
0.551
H(T|风速) = \dfrac{2}{5}\cdot H_1+\dfrac{3}{5}\cdot H_2 = 0.551
H(T∣风速)=52⋅H1+53⋅H2=0.551
则有条件风速下的信息增益
G
a
i
n
(
T
∣
风速
)
=
H
(
T
)
−
H
(
T
∣
风速
)
=
1.351
−
0.551
=
0.8
Gain(T|风速) = H(T)-H(T|风速)=1.351-0.551=0.8
Gain(T∣风速)=H(T)−H(T∣风速)=1.351−0.551=0.8
2.3 决策树构建
前面已经提到过,ID3法是通过选取最佳特征值作为划分的节点,而此处的最佳特征值的选取标准就是信息增益的高低,当我们计算完各个条件的信息增益后,我们选取信息增益最大的那个条件作为第一次划分的条件
仍以上面的数据集为例子,由计算可得
条件 | 信息增益 |
---|---|
天气 | 0.8002 |
温度 | 0.551 |
湿度 | 0.8002 |
风速 | 0.8 |
此时可得天气和湿度的信息增益最大,二者都可作为第一次划分的条件,这里我们选择天气,则可得
由此即可构成一个简单的决策树,但我们发现在晴朗中并不是一定不下雨,由此我们可以考虑对其进行深化,但是当晴朗条件下,有
温度 | 湿度 | 风速 | 是否下雨 |
---|---|---|---|
晴朗 | 热 | 高 | 弱 |
晴朗 | 温暖 | 高 | 弱 |
晴朗 | 冷 | 正常 | 弱 |
根据计算得
条件 | 信息增益 |
---|---|
温度 | 0 |
风速 | 0 |
湿度 | 0 |
可知信息增益皆为0,无法继续深化。
由于数据集比较小,较为容易出现这种情况,但当数据集较大时,我们可以依照上述流程继续深化,直到
- 信息增益低于一定阈值
- 叶子结点达到一定纯度
三. C4.5算法
3.1 算法简介
C4.5算法是ID3算法的改良版,区别于ID3算法使用信息增益选取最优项,C4.5算法使用信息增益率来作为选取的指标。
3.2 信息增益率
3.2.1 固有值
首先我们需要知道,在计算中,当一个条件下有多个取值,就会导致数据集分割成较多个子集,因而使得每个自己会相对的纯净,由此整个条件的熵就会变小,使信息增益率变大。这便让信息增益成为选取最优值得指标时会偏向于选取值多的选项,而这在一定程度上是不公平的。
而信息增益率相较于信息增益的提升,就在于**固有值(SplitInfo)**这一概念的引入。
固有值反映了属性分裂后各子集的均匀性,固有值越大,说明属性的值越分散、分裂后的子集大小差异越大。在信息增益率的计算中,将固有值作为分母,可以平衡信息增益的结果,避免选择那些可能导致非均匀分裂的属性。这样,信息增益率就能够更公平地评估不同属性的有效性,帮助我们构建更平衡的决策树。
其计算公式为
S
p
l
i
t
I
n
f
o
=
−
∑
v
∈
V
∣
v
∣
∣
V
∣
l
o
g
2
∣
v
∣
∣
V
∣
SplitInfo=-\sum\limits_{v\in V}\dfrac{|v|}{|V|}log_2\dfrac{|v|}{|V|}
SplitInfo=−v∈V∑∣V∣∣v∣log2∣V∣∣v∣
其中V代指整个数据集,v代指V的子集,
∣
v
∣
∣
V
∣
\frac{|v|}{|V|}
∣V∣∣v∣即该条件下某个取值的子集占总集的多少。
3.2.2 公式
信息增益率即在信息增益的基础上,除以固有值,公式如下
G
a
i
n
R
a
t
i
o
(
S
,
A
)
=
G
a
i
n
(
S
,
A
)
S
p
l
i
t
I
n
f
o
(
S
,
A
)
GainRatio(S,A) =\dfrac{Gain(S,A)}{SplitInfo(S,A)}
GainRatio(S,A)=SplitInfo(S,A)Gain(S,A)
3.3 相较于信息增益的优化
- 减少偏向:减少了对多属性取值的偏好,在选取属性上更加公平
- 平衡分裂:属性分裂的集合大小差距很大时会导致固有值很高,使得信息增益率变小,这促使算法选取能分裂更加均匀的子集的属性
- 提高泛化能力:信息增益率减少了对多值属性的偏好,有助于构建更加平衡的决策树,这样的决策树通常具有更好的泛化能力,能够更好地适应未见过的数据。
- 防止过拟合:信息增益率有助于避免过度分裂的情况,这种情况通常会导致模型过于复杂,从而过拟合训练数据。通过选择信息增益率高的属性,C4.5算法能够构建出更简洁、更有效的决策树。
四. CART算法
4.1 算法简介
该算法通过**基尼指数(Gini Index)**选取特征值,由该算法的最大特点是生成的决策树都为二叉树,这意味着在每一步的决策中,CART算法只考虑“是”或“否”的分支,即使一个特征有多个取值,也会将数据分为两部分。
4.2 基尼指数
在决策树中,基尼指数用于衡量数据集的不纯度,它表示随机选择一个样本,该样本被错误分类的概率,基尼指数越小,数据集的纯度越高。其计算公式如下
G
i
n
i
(
S
)
=
1
−
∑
k
=
1
n
p
k
2
Gini(S)=1-\sum\limits_{k=1}^np_k^2
Gini(S)=1−k=1∑npk2
此处的n是数据集中类别的个数,pk是第k种类别所占比例。
4.3 依据基尼指数选取特征值
就如同上面提到的那样,基尼指数越低表示数据集越纯,分类效果也就越好,因此,我们需要选择基尼指数最低的值作为最优特征值。
公式为
G
i
n
i
(
S
,
A
)
=
∑
v
∣
s
∣
∣
S
∣
G
i
n
i
(
S
v
)
Gini(S,A)=\sum\limits_{v}\dfrac{|s|}{|S|}Gini(S_v)
Gini(S,A)=v∑∣S∣∣s∣Gini(Sv)
此处的s为S的子集
由于基尼指数是进行二分,所以,在取值只有两个的属性中,我们可以只进行以此计算;而当取值大于两个时,我们需要对取值进行单独计算。