决策树1
基本概念
在介绍决策树之前,我们需要先学习生成决策树中必不可上的一环—信息熵。
熵表示的是混乱的程度,对应在分类问题上可以看做集合中标签不确定的程度。对一个标签的集合,其中个标签的比例相当,没有哪一个标签的比例太高或太低,这样确定某一个标签的种类就越难。或者说这个集合中标签的纯度。
为了表示这种不确定的程度,我们引入信息熵的概念。
设X是一个取有限个值的离散随机变量,其概率分布为:
P
(
X
=
x
i
)
=
p
i
,
i
=
1
,
2
,
.
.
.
,
n
P(X=x_i)=p_i, i=1,2, ... , n
P(X=xi)=pi,i=1,2,...,n
则随机变量X的熵定义为:
H
(
X
)
=
−
∑
p
i
∗
l
o
g
p
i
,
i
=
1
,
2
,
.
.
.
,
n
H(X)=- ∑ p_i * logp_i, i=1,2, ... , n
H(X)=−∑pi∗logpi,i=1,2,...,n
H
(
X
)
H(X)
H(X)与
p
p
p的关系用图像表示如上
从图上可以看出,当
P
=
0
P=0
P=0或
P
=
1
P=1
P=1时,
H
(
p
)
=
0
H(p)=0
H(p)=0,随机变量完全没有不确定性,当
p
=
0.5
p=0.5
p=0.5时,
H
(
p
)
=
1
H(p)=1
H(p)=1,此时随机变量的不确定性最大。
条件熵:
条件熵(conditional entropy):表示在一直随机变量X的条件下随机变量Y的不确定性度量。
设随机变量 ( X , Y ) (X, Y) (X,Y),其联合概率分布为$ P(X, Y) = p_{ij}(i=1,2, … , n; j=1,2, … , m) , 随 机 变 量 ,随机变量 ,随机变量X 给 定 的 条 件 下 随 机 变 量 给定的条件下随机变量 给定的条件下随机变量Y 的 条 件 熵 的条件熵 的条件熵H(Y|X)$,定义为X给定条件下Y的条件概率分布的熵对X的数学期望:
H ( Y ∣ X ) = ∑ p i ∗ H ( Y ∣ X = x i ) H(Y|X)=∑ p_i*H(Y|X=x_i) H(Y∣X)=∑pi∗H(Y∣X=xi)
信息增益为 G a i n ( X ) = H ( X ) − H ( Y ∣ X ) Gain(X) = H(X)-H(Y|X) Gain(X)=H(X)−H(Y∣X)
ID3算法:
ID3算法按照划分的最大信息增益作为划分数据集的依据。求未划分前的数据集的信息熵,然后分别求按照每个特征划分后的条件熵(在按照某一个特征划分的条件下,划分后数据集的熵),信息增益就是划分后的熵减去划分前的熵,那个标签的信息增益最大,接下来就按找那个特征划分。因为熵代表的信息的不确定性,我们不断的根据特征划分数据集,剩下的单个数据集会越来越同一,越来越规整,这使得整体熵不断的减少,按照每次最大的信息增益就是一种贪心算法。以为划分后的数据集的大小小于以前的数据集,并且具有同样的结构,能再一次用最大信息增益做划分,采用了分而治之的思想。
决策树是模拟决策过程中的选择,下面通过一个例子说明:
R I D RID RID | a g e age age | i n c o m e income income | s t u d e n t student student | c r e d i t _ r a t i n g credit\_rating credit_rating | C l a s s : b u y _ c o m p u t e r Class:buy\_computer Class:buy_computer |
---|---|---|---|---|---|
1 | youth | high | no | fair | no |
2 | youth | high | no | excellent | no |
3 | middle_aged | high | no | fair | yes |
4 | senior | medium | no | fair | yes |
5 | senior | low | yes | fair | yes |
6 | senior | low | yes | excellent | no |
7 | middle_aged | low | yes | excellent | yes |
8 | youth | medium | no | fair | no |
9 | youth | low | yes | fair | yes |
10 | senior | medium | yes | fair | yes |
11 | youth | medium | yes | excellent | yes |
12 | middle_aged | medium | no | excellent | yes |
13 | middle_aged | high | yes | fair | yes |
14 | senior | medium | no | excellent | no |
以上为训练集的数据D。
H ( D ) = − ( 5 14 l o g ( 5 14 ) + 9 14 l o g 9 14 ) = 0.940 位 H(D) =-(\frac{5}{14} log(\frac{5}{14})+\frac{9}{14}log{\frac{9}{14}})=0.940位 H(D)=−(145log(145)+149log149)=0.940位
同时可以求出每个特征下的条件熵
H ( D ∣ a g e ) = ∑ j = 1 j = v P ( D j ) H ( D j ) = P ( y o u t h ) ∗ D ( y o u t h ) + P ( m i d d l e _ a g e d ) ∗ D ( m i d d l e _ a g e d ) + P ( s e n i o r ) ∗ D ( s e n i o r ) H(D|age) = \sum_{j=1}^{j =v} P(D_j) H(D_j) =P(youth)*D(youth) +P(middle\_aged) *D(middle\_{aged}) +P(senior)*D(senior) H(D∣age)=∑j=1j=vP(Dj)H(Dj)=P(youth)∗D(youth)+P(middle_aged)∗D(middle_aged)+P(senior)∗D(senior)
= − ( 5 14 l o g 2 ( 2 5 l o g 2 ( 2 5 ) + 3 5 l o g 2 ( 3 5 ) ) + 4 14 l o g 2 ( 0 ) + 5 14 l o g 2 ( 3 5 l o g 2 ( 3 5 ) + 2 5 l o g 2 ( 3 5 ) ) ) =-(\frac{5}{14} log_2(\frac{2}{5} log_2(\frac{2}{5})+\frac{3}{5}log_2(\frac{3}{5}))+\frac{4} {14} log_2(0)+\frac{5}{14}log_2(\frac{3}{5} log_2(\frac{3}{5})+\frac{2}{5} log_2(\frac{3}{5}))) =−(145log2(52log2(52)+53log2(53))+144log2(0)+145log2(53log2(53)+52log2(53)))
= 0.694 位 =0.694位 =0.694位
因此如果按age划分,划分后的信息熵为
0.694
0.694
0.694,信息增益
G
a
i
n
(
a
g
e
)
=
H
(
D
)
−
H
(
D
∣
a
g
e
)
=
0.246
Gain(age) = H(D)-H(D|age)=0.246
Gain(age)=H(D)−H(D∣age)=0.246,其他的income,student,credit_rating的信息增益为
0.029
,
0.152
,
0.058
0.029,0.152,0.058
0.029,0.152,0.058,按照划分的信息增益最大的原则我们选择age做为换分的结点,然后按age将数据集D换分成三个子数据集。
计算着三个子节点的信息熵,将每个子节点按照其他的分类继续重复求信息增益,然后再选择其中的信息增益最大的作为下一个划分的节点。
如果按照最大信息增益作为划分数据集的依据会出现问题。依然是上面的例子,我们 g a i n ( R I D ) = 0.940 gain(RID) = 0.940 gain(RID)=0.940,RID的信息增益大于其他的任何一个特征,并且因为换分后的条件熵为0,表示数据已经完全的换分清楚,每个子节点的标签数据都是单一的一种。但根据常识,我们肯定是不能按照我们排序的标签作为分类的依据的,因为排序的顺序是可以变化的,但能说我的序号变了,我就不买电脑了或反过来我就买电脑了。这显然是矛盾的。
所以根据上面的例子,我们发现按照ID3算法进行决策树分类,决策树倾向于按照某一个具有大量值的特征。但如果这个特征是无用的,那么我们就不能使用ID3算法了。
C4.5算法
考虑到这个问题,C4.5在IC3的基础上引入了信息增益率的概念。
G
a
i
n
R
a
t
e
(
A
)
=
g
a
i
n
(
A
)
H
s
p
l
i
t
A
(
D
)
GainRate(A) = \frac{gain(A)} {H_{splitA}(D)}
GainRate(A)=HsplitA(D)gain(A)
将ID3算法计算出来的信息增益gain除以按照标签A分类的数据集的信息熵。
H
s
p
l
i
t
A
(
D
)
=
−
(
4
14
l
o
g
2
(
4
14
)
+
6
14
l
o
g
2
(
6
14
)
+
4
14
l
o
g
2
(
4
14
)
)
=
1.557
H_{splitA}(D) = -(\frac{4}{14}log_2(\frac{4}{14})+\frac{6}{14}log_2(\frac{6}{14})+\frac{4}{14}log_2(\frac{4}{14})) = 1.557
HsplitA(D)=−(144log2(144)+146log2(146)+144log2(144))=1.557
g
a
i
n
(
i
n
c
o
m
e
)
=
0.029
gain(income) = 0.029
gain(income)=0.029,因此
G
a
i
n
R
a
t
i
o
(
i
n
c
o
m
e
)
=
0.029
/
1.557
=
0.019
GainRatio(income) = 0.029/1.557=0.019
GainRatio(income)=0.029/1.557=0.019
而RID没有信息增益比,所以解决了上面的问题。
CART算法
在CART算法中我们使用基尼指数(Gini)去衡量数据划分和训练集的不纯度。
G i n i ( D ) = 1 − ∑ k = 1 n ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D) = 1- \sum_{k = 1} ^n(\frac {|C_k|}{|D|})^2 Gini(D)=1−∑k=1n(∣D∣∣Ck∣)2
我们选择换分基尼指数最小的作为划分的依据。如果按照A划分
G i n i ( D ∣ A ) = ∑ i = 1 n D i D G i n i ( D i ) Gini(D|A) =\sum_{i = 1}^{n} \frac{D_i}{D} Gini(D_i) Gini(D∣A)=∑i=1nDDiGini(Di)
依然选择上面表的数据集,我们可以得到
G i n i ( D ) = 1 − ( 5 14 ) 2 − ( 9 14 ) 2 = 0.459 Gini(D) = 1-(\frac{5}{14})^2-(\frac{9}{14})^2 =0.459 Gini(D)=1−(145)2−(149)2=0.459
按照income划分后的基尼指数为(在CART算法中,我们必须将特征的值分成两份,如果特征值不值两个,我们需要将每个划分的基尼系数都计算出来,然后选择最大的基尼系数作为接下来的划分。)
G
i
n
i
(
D
∣
i
n
c
o
m
e
(
{
l
o
w
,
m
e
d
i
u
m
}
{
h
i
g
h
}
)
)
=
P
(
{
l
o
w
,
m
e
d
i
u
m
}
)
∗
G
i
n
i
(
{
l
o
w
,
m
e
d
i
u
m
}
)
+
P
(
{
h
i
g
h
}
)
∗
G
i
n
i
(
{
h
i
g
h
}
)
Gini(D|income(\{low,medium\}\{high\})) = P(\{low,medium\})*Gini(\{low,medium\})+P(\{high\})*Gini(\{high\})
Gini(D∣income({low,medium}{high}))=P({low,medium})∗Gini({low,medium})+P({high})∗Gini({high})
根据划分最大的基尼系数
G
i
n
i
(
D
∣
i
n
c
o
m
e
(
{
l
o
w
,
m
e
d
i
u
m
}
{
h
i
g
h
}
)
)
=
10
14
(
1
−
(
7
10
)
2
−
(
3
10
)
2
)
+
4
14
(
1
−
(
2
4
)
2
−
(
2
4
)
2
)
=
0.443
Gini(D|income(\{low,medium\}\{high\})) =\frac{10}{14}(1-(\frac{7}{10})^2-(\frac{3}{10})^2)+\frac{4}{14}(1-(\frac{2}{4})^2-(\frac{2}{4})^2)=0.443
Gini(D∣income({low,medium}{high}))=1410(1−(107)2−(103)2)+144(1−(42)2−(42)2)=0.443
用类似的划分得到
{
l
o
w
,
h
i
g
h
}
{
m
e
d
i
u
m
}
,
{
m
e
d
i
u
m
,
h
i
g
h
}
{
l
o
w
}
\{low,high\}\{medium\},\{medium,high\}\{low\}
{low,high}{medium},{medium,high}{low}得到
G
i
n
i
(
D
∣
i
n
c
o
m
e
(
{
l
o
w
,
m
e
d
i
u
m
}
{
h
i
g
h
}
)
)
=
0.458
,
G
i
n
i
(
D
∣
i
n
c
o
m
e
(
{
m
e
d
i
u
m
,
h
i
g
h
}
{
l
o
w
}
)
)
=
0.450
Gini(D|income(\{low,medium\}\{high\})) = 0.458, Gini(D|income(\{medium,high\}\{low\})) = 0.450
Gini(D∣income({low,medium}{high}))=0.458,Gini(D∣income({medium,high}{low}))=0.450
所以产生的划分为
{
l
o
w
,
m
e
d
i
u
m
}
{
h
i
g
h
}
\{low,medium\}\{high\}
{low,medium}{high}。划分后的数据集可以继续按照最大基尼指数的方法划分。
对决策树算法的比较:
特征:ID3算法只能处理离散特征,C4.5算法和CART算法可以处理离散特征也能处理连续特征。因为C4.5算法采用了连续值离散技术,将连续特征的取值排序后,选择分位点,与分位点比较大小后进行布尔二值化,即可将连续值转化为离散值。CART算法在每次计算基尼指数时,都会将值做划分成两部分,所以每个后续节点会分裂成连个节点,形成二叉树。
回归还是分类:ID3,C4.5算法只能处理分类问题,CART算法既可以处理分类也可以处理回归,在分类时采用基尼指数作为度量,在回归中采用平方误差度量,每次选择能最大程度减少基尼指数与平方误差的特征作为划分的依据。
奥卡姆剃刀原则
如果多个模型对预测的效果完全相同,我们选择模型简单的哪一个。