一、简介
决策树,英文名为Decision Tree,是一种有监督分类算法。在决策树算法中,需要先构建一个树形结构,其中每个结点都代表某一特征值的一种结果,故命名为决策树。决策树是机器学习中的一个重要分类方法。
二、原理
首先看一个例子,根据一个人的年龄、信用等级、收入、是否是学生,来判断他是否会买电脑:
RID | Age | Credit_Rating | Income | Student | Buy_Computer |
---|---|---|---|---|---|
1 | youth | fair | high | no | no |
2 | youth | excellent | high | no | no |
3 | middle_aged | fair | high | no | yes |
4 | senior | fair | medium | no | yes |
5 | senior | fair | low | yes | yes |
6 | senior | excellent | low | yes | no |
7 | middle_aged | excellent | low | yes | yes |
8 | youth | fair | medium | no | no |
9 | youth | fair | low | yes | yes |
10 | senior | fair | medium | yes | yes |
11 | youth | excellent | medium | yes | yes |
12 | middle_aged | excellent | medium | no | yes |
13 | middle_aged | fair | high | yes | yes |
14 | senior | excellent | medium | no | no |
15 | youth | excellent | high | yes | yes |
将上述表格中的前14组数据作为训练集,第15组作为测试集,将Age、Credit_Rating、Income、Student作为特征,将Buy_Computer作为标记,利用决策树算法,我们可以构建出如下树结构:
根据这个树,我们就可以根据已知特征值一步步推出标记值。例如对于第15组数据,我们就可以根据生成的决策树按照False → False → True → False的顺序推出,这个人会购买电脑。
那么我们该如何生成决策树呢?生成决策树时,最关键的一步就是选择让哪个特征的哪个值作为根节点。在此之前,我们需要了解什么是信息熵(Information Entropy)。
在高中的化学课上,我们知道了熵表示混乱程度,信息熵类似,它表示的是事件的不确定性:信息熵越大,事件的不确定性就越大,那么确定它所需要的信息量就越大。例如对于Age = middle_aged
的实例,其信息熵为0,因为其是否会购买电脑的不确定性为0,即所有Age = middle_aged
的实例都会购买电脑。
那么怎么计算信息熵呢?信息熵的计算公式为:
E
n
t
r
o
p
y
(
X
)
=
−
∑
i
=
1
n
P
(
x
i
)
log
2
P
(
x
i
)
{Entropy(X)=-\sum_{i=1}^{n}{P(x_i)\log{_2P(x_i)}}}
Entropy(X)=−i=1∑nP(xi)log2P(xi)
由该公式可知,信息熵的取值区间为
[
0
,
log
2
n
]
{[0,\log{_2n}]}
[0,log2n]。
举个例子,假如要预测世界杯的32支球队中哪一支会夺冠,假设每支球队夺冠的概率相同,均为
1
32
{\frac{1}{32}}
321,则根据公式可以算出,信息熵为5,恰好为最大值,这说明当所有事件发生的概率均相同时,我们从中获得的信息量最少,不确定性最大。
让我们回到根节点的选择。根节点的选择有多种算法,常见的有ID3、C4.5、CART等,这里主要讲解ID3算法。ID3算法是通过计算每个特征的信息增益(Information Gain),选择其中最大的作为根节点。公式如下:
I
G
(
a
)
=
E
n
t
r
o
p
y
(
D
)
−
E
n
t
r
o
p
y
a
(
D
)
{IG(a)=Entropy(D)-Entropy_a(D)}
IG(a)=Entropy(D)−Entropya(D)
I
G
(
a
)
{IG(a)}
IG(a)为某特征的信息增益,
E
n
t
r
o
p
y
(
D
)
{Entropy(D)}
Entropy(D)为原始的信息熵,
E
n
t
r
o
p
y
a
(
D
)
{Entropy_a(D)}
Entropya(D)为按特征
a
{a}
a划分的信息熵,其中
E
n
t
r
o
p
y
a
(
D
)
{Entropy_a(D)}
Entropya(D)为:
E
n
t
r
o
p
y
a
(
D
)
=
∑
t
S
v
S
E
n
t
r
o
p
y
(
S
v
)
{Entropy_a(D)=\sum_{t}\frac{S_v}{S}{Entropy(S_v)}}
Entropya(D)=t∑SSvEntropy(Sv)
其中
t
{t}
t为特征
a
{a}
a取值的种数,
S
{S}
S为实例总数,
v
{v}
v为特征
a
{a}
a的某种取值,
S
v
{S_v}
Sv为在所有实例中该种取值的个数。
继续之前的例子,我们来计算特征Age的信息增益。
E
n
t
r
o
p
y
(
D
)
=
−
(
9
14
log
2
(
9
14
)
+
5
14
log
2
(
5
14
)
)
=
0.940
b
i
t
s
{Entropy(D)=-(\frac{9}{14}\log_2(\frac{9}{14})+\frac{5}{14}\log_2(\frac{5}{14}))=0.940bits}
Entropy(D)=−(149log2(149)+145log2(145))=0.940bits
E
n
t
r
o
p
y
A
g
e
(
D
)
=
−
5
14
×
(
2
5
log
2
(
2
5
)
+
3
5
log
2
(
3
5
)
)
−
4
14
×
(
4
4
log
2
(
4
4
)
+
0
4
log
2
(
0
4
)
)
−
5
14
×
(
3
5
log
2
(
3
5
)
+
2
5
log
2
(
2
5
)
)
{Entropy_{Age}(D)=-\frac{5}{14}×(\frac{2}{5}\log_2(\frac{2}{5})+\frac{3}{5}\log_2(\frac{3}{5}))-\frac{4}{14}×(\frac{4}{4}\log_2(\frac{4}{4})+\frac{0}{4}\log_2(\frac{0}{4}))-\frac{5}{14}×(\frac{3}{5}\log_2(\frac{3}{5})+\frac{2}{5}\log_2(\frac{2}{5}))}
EntropyAge(D)=−145×(52log2(52)+53log2(53))−144×(44log2(44)+40log2(40))−145×(53log2(53)+52log2(52))
=
0.694
b
i
t
s
{=0.694bits}
=0.694bits
I
G
(
A
g
e
)
=
E
n
t
r
o
p
y
(
D
)
−
E
n
t
r
o
p
y
A
g
e
(
D
)
=
0.940
−
0.694
=
0.246
b
i
t
s
{IG(Age)=Entropy(D)-Entropy_{Age}(D)=0.940-0.694=0.246bits}
IG(Age)=Entropy(D)−EntropyAge(D)=0.940−0.694=0.246bits
同理可得:
I
G
(
C
r
e
d
i
t
‾
R
a
t
i
n
g
)
=
E
n
t
r
o
p
y
(
D
)
−
E
n
t
r
o
p
y
C
r
e
d
i
t
‾
R
a
t
i
n
g
(
D
)
=
0.048
b
i
t
s
{IG(Credit\underline{\hspace{0.5em}}Rating)=Entropy(D)-Entropy_{Credit\underline{\hspace{0.35em}}Rating}(D)=0.048bits}
IG(CreditRating)=Entropy(D)−EntropyCreditRating(D)=0.048bits
I
G
(
I
n
c
o
m
e
)
=
E
n
t
r
o
p
y
(
D
)
−
E
n
t
r
o
p
y
I
n
c
o
m
e
(
D
)
=
0.029
b
i
t
s
{IG(Income)=Entropy(D)-Entropy_{Income}(D)=0.029bits}
IG(Income)=Entropy(D)−EntropyIncome(D)=0.029bits
I
G
(
S
t
u
d
e
n
t
)
=
E
n
t
r
o
p
y
(
D
)
−
E
n
t
r
o
p
y
S
t
u
d
e
n
t
(
D
)
=
0.151
b
i
t
s
{IG(Student)=Entropy(D)-Entropy_{Student}(D)=0.151bits}
IG(Student)=Entropy(D)−EntropyStudent(D)=0.151bits
由此可见,
I
G
(
A
g
e
)
>
I
G
(
C
r
e
d
i
t
‾
R
a
t
i
n
g
)
>
I
G
(
I
n
c
o
m
e
)
>
I
G
(
S
t
u
d
e
n
t
)
{IG(Age)>IG(Credit\underline{\hspace{0.5em}}Rating)>IG(Income)>IG(Student)}
IG(Age)>IG(CreditRating)>IG(Income)>IG(Student),故应选择特征
A
g
e
{Age}
Age作为根节点。