决策树
总述
决策树是一种基本的分类与回归方法,本节主要讨论用于分类的决策树。决策树呈树状结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树。预测时,对新的数据,利用决策树模型进行分类。决策树通常包含3个步骤:特征选择、决策树的生成和决策树的修剪。
1 决策树模型与学习
1.1 决策树模型
分类决策树模型是一种对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部节点表示一个特征或属性,叶结点表示一个类。
用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每一个子结点对应着该特征的一个取值。如此递归地对实例进行测试与分配,直至达到叶结点。最后将实例分到叶结点的类中。
1.2 决策树与if-then规则
决策树可以看成if-then规则的集合。由决策树的根结点到叶结点的每一条路径构建一条规则;路径上内部节点的特征对应着规则的条件,而叶结点对应着规则的结论。这些if-then规则互斥且完备,每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。
1.3 决策树与条件概率分布
决策树还表示给定特征条件下类的条件概率分布。这一条件概率分布定义在特征空间的一个划分上。将特征空间划分为互不相交的单元(cell)或区域(region),并在每个单元定义一个类的概率分布就构成一个条件概率分布。决策树的一条路径对应于划分中的一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。假设 X X X表示特征的随机变量, Y Y Y为表示类的随机变量,那么这个条件概率分布可表示为 p ( Y ∣ X ) p(Y|X) p(Y∣X)。 X X X取值于给定划分单元的集合, Y Y Y取值于类的集合。各叶结点(单元)上的条件概率往往偏向于某一类,即属于某一类的概率较大。决策树分类时将该结点的实例强行分到条件概率大的那一类。
1.3 决策树的学习
决策树学习,假设给定训练数据集
D
=
D=
D={
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
(x_1,y_1), (x_2,y_2), ..., (x_N,y_N)
(x1,y1),(x2,y2),...,(xN,yN)}。其中,
x
i
=
(
x
i
1
,
x
i
2
,
.
.
.
,
x
i
n
)
T
x_i=(x_i^1, x_i^2, ..., x_i^n)^T
xi=(xi1,xi2,...,xin)T为输入实例(特征向量),
n
n
n个特征个数;
y
i
∈
y_i∈
yi∈{
1
,
2
,
.
.
.
,
K
1, 2, ..., K
1,2,...,K}为类标记,
i
=
1
,
2
,
.
.
.
,
N
i=1, 2, ..., N
i=1,2,...,N,
N
N
N为样本容量。学习的目标是根据给定的训练数据集构建一个决策模型,使它能够对实例进行正确的分类。
决策树学习的本质是从训练数据集中归纳出一组分类规则。能够对训练集进行分类的决策树可能有多个,但我们需要的是与训练数据矛盾较小同时具有良好泛化性能的一个。从另一个角度看,决策树学习是由训练集估计条件概率模型。基于特征空间划分的类的条件概率模型有无穷多个,我们选择的条件概率模型应该是不仅对训练数据有很好的拟合,而且对未知数据有很好的预测。
决策树学习的损失函数通常是正则化的极大似然函数;决策树的学习策略是以损失函数为目标的极小化。当损失函数确定后,学习问题就变为在损失函数意义下选择最优决策树的问题。但这一选择是NP完全问题,现实中通常采用启发式方法近似求解这一最优化问题,得到一个次优的决策树。
决策树的学习算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各子数据集有一个最好的分类的过程。
决策树的构建:开始,构建根结点,将所有训练数据都放在根结点;选择一个最优特征,按照这一特征将训练集分割成子集,使得各个子集有一个在当前条件下最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。如此递归的进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。最后,每个子集都被正确分到叶结点上,即都有了明确的类。这样就生成了一棵树。
以上方法生成的数可能差产生过拟合现象,需要对已生成的数进行自上而下的剪枝,将树变得简单,使其具有较好的泛化性能。具体地,就是去掉过于细分的叶结点,使其退回到父节点,甚至更高的结点,然后将父结点或者更高的结点改为新的叶结点。
如果特征数量很多,也可以在决策树学习开始的时候,对特征进行选择,只留下对训练数据有足够分类能力的特征。
由于决策树表示一个条件概率分布,所以深浅不同的决策树对应着不同复杂度的概率模型。决策树生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择。决策树的生成只考虑局部最优,相对地,决策树的剪枝对应于全局最优。
2 特征选择
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的,经验上扔掉这个特征对决策树的学习没有影响。通常特征选择的准则是信息增益或信息增益比。
2.1 信息增益
为了便于说明,先给出熵和条件熵的定义。
熵:表示随机变量不确定性的度量。设
X
X
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
X
X的熵定义为
以上对数以2为底或以
e
e
e为底(自然对数),这时的熵的单位分别称作比特(bit)或纳特(nat)。熵只依赖于
X
X
X的分布,而与
X
X
X的取值无关,所以也可以将
X
X
X的熵记做
H
(
p
)
H(p)
H(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,熵取最大值,随机变量不确定性最大。
条件熵:设有随机变量
(
X
,
Y
)
(X,Y)
(X,Y),其联合分布为
p
(
X
=
x
i
,
Y
=
y
i
)
=
p
i
j
,
i
=
1
,
2
,
.
.
.
,
n
;
j
=
1
,
2
,
.
.
.
,
m
p(X=x_i, Y=y_i)=p_ij, i=1, 2, ..., n; j=1, 2, ..., m
p(X=xi,Y=yi)=pij,i=1,2,...,n;j=1,2,...,m条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X)表示在已知随机变量
X
X
X的条件下随机变量
Y
Y
Y的不确定性。随机变量
X
X
X给定的条件下随机变量
Y
Y
Y的条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X),定义为
X
X
X给定的条件下
Y
Y
Y的条件概率分布的熵对
Y
Y
Y的数学期望
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵和条件熵分别称为经验熵和经验条件熵。
信息增益:表示得知特征
X
X
X的信息而使得类
Y
Y
Y的信息不确定性减小的程度。特征
A
A
A对训练数据集
D
D
D的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A),定义为集合
D
D
D的经验熵
H
(
D
)
H(D)
H(D)与特征
A
A
A给定条件下
D
D
D的经验熵之差,即:
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)一般地,熵
H
(
Y
)
H(Y)
H(Y)与条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X)之差称为互信息。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
决策树用信息增益准则选择特征,其过程如下:给定训练数据集
D
D
D和特征
A
A
A,经验熵
H
(
D
)
H(D)
H(D)表示对数据集
D
D
D进行分类的不确定性。而经验条件熵
H
(
D
∣
A
)
H(D|A)
H(D∣A)表示在特征
A
A
A给定的条件下对数据集
D
D
D进行分类的不确定性。那么它们的差,即信息增益,就表示由于特征
A
A
A而使得对数据集
D
D
D的分类的不确定性减少的程度。显然,对于数据集
D
D
D而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。
设训练数据集
D
D
D,
∣
D
∣
|D|
∣D∣表示其样本容量,即样本个数。设有
K
K
K个 类
C
k
,
k
=
1
,
2
,
.
.
.
,
K
C_k, k=1, 2, ..., K
Ck,k=1,2,...,K,
∣
K
∣
|K|
∣K∣为属于类
C
k
C_k
Ck的样本个数。设特征
A
A
A有
n
n
n个不同的取值{
a
1
,
a
2
,
.
.
.
,
a
n
a_1, a_2, ..., a_n
a1,a2,...,an},根据特征
A
A
A的取值将
D
D
D划分为
n
n
n个子集
D
1
,
D
2
,
.
.
.
,
D
n
D_1, D_2, ..., D_n
D1,D2,...,Dn,
∣
D
i
∣
|D_i|
∣Di∣为
D
i
D_i
Di的样本个数。记子集
D
i
D_i
Di中属于类
C
k
C_k
Ck的样本的集合
D
i
k
D_ik
Dik,即
D
i
k
D_ik
Dik=
D
i
∩
C
k
D_i∩C_k
Di∩Ck,
∣
D
i
k
∣
|D_ik|
∣Dik∣为
D
i
k
D_ik
Dik的样本个数。于是计算信息增益的算法如下:
输入:训练数据集
D
D
D和特征
A
A
A;
输出:特征
A
A
A对训练数据集
D
D
D的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A).
(1)计算数据集
D
D
D的经验熵:
(2)计算特征
A
A
A对数据集
D
D
D的经验条件熵
H
(
D
∣
A
)
H(D|A)
H(D∣A):
(3)计算信息增益:
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
2.2 信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比可以对这一问题进行校正。
特征
A
A
A对数据集
D
D
D的信息增益比
g
R
(
D
,
A
)
g_R(D,A)
gR(D,A)定义为其信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)与数据集
D
D
D关于特征
A
A
A的值的熵
H
A
(
D
)
H_A(D)
HA(D)之比,即
其中,
n
n
n是特征
A
A
A取值的个数,
H
A
(
D
)
H_A(D)
HA(D)写作