当前决策树更新算法运用主要分为ID3、C4.5、CART三种,ID3、C4.5建立决策树依靠数据分类利用信息熵形成多叉树,CART则使用基尼指数形成二叉树,前者不适用于连续性数据分布,有一定局限性,后者运用较广。
决策树的建立在程序上本质上相当于很多嵌套的if else体系形成,通过不断分支最终将数据以一颗决策树作为规则进行分类。
一、ID3、C4.5
决策树中对信息进行分叉的参数被称作信息熵,表示随机变量分布的混乱程度,分布越混乱熵越大,计算公式如下:
E
n
t
(
D
)
=
−
∑
k
=
1
K
p
k
∗
l
o
g
2
p
k
Ent(D)=-\sum_{k=1}^{K}p_{k}*log_{2}p_{k}
Ent(D)=−k=1∑Kpk∗log2pk
以天气预报的数据集为例:
上述数据中特征标签为Play?分为yes和no两个标签共14条数据,其中yes有9个,no有5个,那么对于yes来说
p
k
p_{k}
pk为
9
14
\frac{9}{14}
149,对于no来说
p
k
p_{k}
pk为
5
14
\frac{5}{14}
145,因此信息熵
E
n
t
(
D
)
=
−
9
14
l
o
g
2
9
14
−
5
14
l
o
g
2
5
14
=
0.940286
Ent(D)=-\frac{9}{14}log_{2}\frac{9}{14}-\frac{5}{14}log_{2}\frac{5}{14}=0.940286
Ent(D)=−149log2149−145log2145=0.940286
再看特征数据以Outlook为例,Outlook主要分为sunny、overcast和rainy三个类,对于sunny来说,有2个yes3个no,故sunny中yes的
p
k
p_{k}
pk为
2
5
\frac{2}{5}
52,no的
p
k
p_{k}
pk为
3
5
\frac{3}{5}
53,信息熵为
H
(
D
s
u
n
n
y
)
=
−
2
5
l
o
g
2
2
5
−
3
5
l
o
g
2
3
5
=
0.970951
H(D^{sunny})=-\frac{2}{5}log_{2}\frac{2}{5}-\frac{3}{5}log_{2}\frac{3}{5}=0.970951
H(Dsunny)=−52log252−53log253=0.970951
同上,overcast及rainy的信息熵为
H
(
D
o
v
e
r
c
a
s
t
)
=
−
4
4
l
o
g
2
4
4
=
0
H(D^{overcast})=-\frac{4}{4}log_{2}\frac{4}{4}=0
H(Dovercast)=−44log244=0
H
(
D
r
a
i
n
y
)
=
−
2
5
l
o
g
2
2
5
−
3
5
l
o
g
2
3
5
=
0.970951
H(D^{rainy})=-\frac{2}{5}log_{2}\frac{2}{5}-\frac{3}{5}log_{2}\frac{3}{5}=0.970951
H(Drainy)=−52log252−53log253=0.970951
在决策树中,选择特征分叉先后顺序对最终结果是有很大影响的,因此对特征进行分叉的时候,需要优先将影响权重较大的特征进行分裂,再依次往下,能够减少特征之间相对的不确定性。这样的参数我们称为信息增益,计算公式如下:
G
a
i
n
(
D
)
=
E
n
t
(
D
)
−
E
n
t
(
D
′
)
Gain(D)=Ent(D)-Ent(D^{\prime})
Gain(D)=Ent(D)−Ent(D′)
以上述数据集为例,已知标签的信息熵为
E
n
t
(
D
)
=
−
9
14
l
o
g
2
9
14
−
5
14
l
o
g
2
5
14
=
0.940286
Ent(D)=-\frac{9}{14}log_{2}\frac{9}{14}-\frac{5}{14}log_{2}\frac{5}{14}=0.940286
Ent(D)=−149log2149−145log2145=0.940286,三个特征总共的信息熵为
E
n
t
(
D
′
)
=
5
14
∗
H
(
D
s
u
n
n
y
)
+
4
14
∗
H
(
D
o
v
e
r
c
a
s
t
+
5
14
∗
H
(
D
r
a
i
n
y
)
)
=
5
14
∗
0.970951
+
4
14
∗
0
+
5
14
∗
0.970951
=
0.693536
\begin{split} Ent(D^{\prime})&=\frac{5}{14}*H(D^{sunny})+\frac{4}{14}*H(D^{overcast}+\frac{5}{14}*H(D^{rainy})) \\ &=\frac{5}{14}*0.970951+\frac{4}{14}*0+\frac{5}{14}*0.970951 \\ &=0.693536 \end{split}
Ent(D′)=145∗H(Dsunny)+144∗H(Dovercast+145∗H(Drainy))=145∗0.970951+144∗0+145∗0.970951=0.693536
信息增益为
G
a
i
n
(
D
o
u
t
l
o
o
k
)
=
E
n
t
(
D
)
−
E
n
t
(
D
′
)
=
0.940286
−
0.693536
=
0.24675
\begin{split} Gain(D^{outlook})&=Ent(D)-Ent(D^{\prime}) \\ &=0.940286-0.693536 \\ &=0.24675 \end{split}
Gain(Doutlook)=Ent(D)−Ent(D′)=0.940286−0.693536=0.24675
同理计算temperature、humidity、windy的信息增益能够获取到这些特征信息进行分裂的时候,特征信息分裂的顺序,信息增益越大说明混乱程度下降得越多,需要优先分裂。
二、CART(Classification And Regression Tree)
当数据出现不重复的连续性数据时,若使用ID3、C4.5模式那么将会需要每一个数据单独分出来,这样算法处理复杂数据效果就很差。CART就能很好的解决这个问题。
以贷款数据为例:
基尼(Gini)指数是一个类似于信息熵的一个分类指标来划分属性,本质上Gini反映的是数据集中随机抽取的两个样本类别标签不一致的概率,Gini越小,分支节点包含样本属于同一样本的纯度就越高,计算公式如下:
G
i
n
i
(
T
i
)
=
1
−
∑
j
=
1
n
p
j
2
Gini(T_{i})=1-\sum_{j=1}^{n}p_{j}^{2}
Gini(Ti)=1−j=1∑npj2
以上述有房无房为例,共10条数据
G
i
n
i
(
t
1
)
=
1
−
(
3
/
3
)
2
−
(
0
/
3
)
2
=
0
Gini(t1)=1-(3/3)^{2}-(0/3)^{2}=0
Gini(t1)=1−(3/3)2−(0/3)2=0
G
i
n
i
(
t
2
)
=
1
−
(
4
/
7
)
2
−
(
3
/
7
)
2
=
0.4849
Gini(t2)=1-(4/7)^{2}-(3/7)^{2}=0.4849
Gini(t2)=1−(4/7)2−(3/7)2=0.4849
G
i
n
i
=
3
10
∗
0
7
10
∗
0.4849
=
0.343
Gini=\frac{3}{10}*0\frac{7}{10}*0.4849=0.343
Gini=103∗0107∗0.4849=0.343
而对于像年收入的连续分布特征信息就需要计算Gini指数来完成分裂选择。如下:
将连续的数据两两之间进行平均得到分界点,按分界点计算该分界点的Gini指数,依次完成所有数据的划分,看基尼指数最小的就是最适合分裂的分界点