总述
决策树(decision tree)是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。可以被看做是if-then规则集合,也可以认为是定义在特定空间与类空间上的条件概率分布。优点是:可持续性,分类速度快。学习时,利用训练数据,根据损失最小原则建立决策树模型。 预测时,对新的数据,利用决策树模型进行分类。决策树学习的三个步骤:特征选择、决策树的生成、决策树的修剪。
决策树的模型与学习
决策树的模型
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点 (node) 和有向边 (directed edge)组成。结点分内部节点和外部结点,这和树(一种数据结构)的定义一样。内部节点表示一个特征或属性,叶结点表示类别
用决策树分类,从根节点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点中,这时每一个结点对应着该特征的一个取值。如此递归地将实例进行测试并分配,直至达到叶结点。最后将实例分到叶结点的类中。如图是一个决策树模型:
if-then 规则
将决策树看成一个if-then规则的集合。由决策树到 if-then 集合的规则如下:
- 从决策树的根结点到 叶结点的每一条路径构建一条规则
- 路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论
决策树的路径或者其对应的 if-then 集合具有一个重要的特征:互斥并且完备,这就是说每一个实例都会被一条规则所覆盖,而且只能被一条规则所覆盖。
条件概率分布
决策树可以表示给定的条件下类的条件概率分布。这一条件概率分布定义在特征空间的一个划分上。将特征空间划分为互不相交的单元,并在每一个单元上定义一个类的概率分布就构成了一个条件概率分布。在决策树中,一条路径就对应与一个单元划分,决策树所表示的条件概率分布就是由各个单元给定条件下的概率分布组成。我们假设特征随机变量为X,类的随机变量为Y,那么这个条件概率分布可以表示为 P(Y|X),在条件X下取值为Y的概率。X取值是给定划分下的单元集合,Y取值是类的集合。各叶结点上的条件概率往往偏向某一个类,即属于某一类的概率较大。决策树在这里分类是就是强制把实例分到条件概率大的那一类去。
a图中表示一个特定空间的划分。大正方形表示特征空间,它被分成了 4 个矩形,每个矩形表示一个单元,也就是X取值的集合。为了简单起见,我们这里Y的取值只有+1,-1。小矩形中的单元数字表示其所属的类。图 b 表示特征空间划分确定时,特征单元给定的条件下类的概率概率分布。b中条件概率分布对应于a中的划分。当某个单元C的条件条件概率满足 P(Y=+1|X=c)>0.5,则认为它是正类,那么落在这个单元的实例都将被看做正例。图c是条件概率分布的决策树。
决策树学习
假设给定训练数据集:
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
D=\left \{ (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \right \}
D={(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=(xi(1),xi(2),...,xi(n))(T)为输入实例,n为特征个数,
y
i
∈
{
1
,
2
,
.
.
,
K
}
y_i∈\left \{ 1,2,..,K \right \}
yi∈{1,2,..,K}为类的标记,N为样本容量。决策树学习的目标就是根据给定的训练集构建一个决策树模型,使它能够对实例进行正确的分类。
决策树学习实质上是从训练集中归纳出一组分类规则,我们需要的是一个与训练集矛盾较少的决策树,同时具有很好的泛化能力。从另一个角度来看,决策树学习有由训练集估计条件概率模型。基于特征空间划分的类的条件概率有无穷多个。我们选择的条件概率模型不仅要对训练集有很好的拟合,而且还要对未知数据有很好的预测。
决策树学习用损失函数表示这一目标。决策树学习的 损失函数通常是正则化的极大似然函数。决策树学习的策略是以损失函数为目标函数的最小化。
当损失函数确定后,学习问题就变成了:在损失函数意义下选择最优决策树的问题。因为所有可能的决策树中选择最优问题是NP完全问题,所以在现实问题中,决策树学习算法通常采用启发式方法,近似求解这一最优化的问题。这样得到的决策树是次优的。
决策树学习的算法通常是一个递归的选择最优特征,并且根据该特征对训练集数据进行分割,使得对各个子数据集有一个最好的分类过程。这一过程对应着对特征空还的划分,也对应这对决策树的构建。过程大致这样:开始构建根节点,将所有训练数据都放在根结点,选择一个最优特征,按照这个特征将训练数据集分割成子集,使得各个子集有一个在该条件下最好的分类。如果这些子集已经能够被基本分类,那么构建叶结点,并将这些子集分配到所对应的叶结点中去;如果还有其他子集不能被基本正确分类,那么就需要对这些子集重新选择最优的特征进行分割,直到可以构建相应的叶结点为止。如此递归的进行下去,直至所有训练集数据子集被基本分类正确,或者没有合适的特征为止。最后每个子集都被分到叶结点上去,即有了明确的分类。这样我们就成功构建起了一棵决策树。
以上方法生成的决策树可能对训练集有很好的分类,但是对未知的测试数据集未必有很好的分类能力,可能发生过拟合的现象。我们需要对已生成的决策树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。 具体的就是去掉过于细分的叶结点,使其退回到父结点,甚至更高的结点,然后将父结点或者更高的结点改为新的叶结点。
如果特征数量很多,也可以在决策树学习开始之时,对特征进行选择,只留下对训练集有足够分类能力的特征.
可以看出,决策树学习算法包括:特征选择,决策树的生成、决策树的剪枝过程 这三个部分。由于决策树表示一个概率条件分布,所以深浅不同的决策树对应着不同复杂度的概率模型。决策树的生成对应于模型的局部选择,决策树的剪枝对应于决策树的全局选择。决策树的生成只考虑局部最优,那么决策树的剪枝处理就需要考虑全局最优。决策树常用的算法有:ID3、C4.5、CART.接下来我们就会借用算法来了解这三个过程。
特征选择
问题引入
特征选择在于选取对训练集数据具有分类能力的特征,这样可以提高决策树学习的效率。 如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,那么这个特征是没有分类能力的。经验上需要扔掉这些特征对决策树学习的进度影响不大。通常特征选择的准则是信息增益或者信息增益比
我们来看一个例子吧。
下面是一张贷款申请样本数据表。数据包括贷款申请人的4个特征。年龄:青年、中年、老年;工作:是与否;有自己的房子:是与否;信贷情况:非常好、一般、好。表的最后一列是决策类,是否同意贷款。
我们希望通过所给的训练数据学习一个贷款申请的决策树,用来对未来的贷款申请进行分类,当一个新客户提出贷款申请的时候,根据申请人的特征利用决策树模型决定是否批准贷款申请。
特征选择是决定用哪个特征来划分空间。下面这张图是从数据学习到的两个可能的决策树,分别有两个不同特征的根结点构成。a图中根结点表示年龄。有三个取值,不同的取值有不同的子结点,可能就是图b中的工作情况。图b特征是工作,有两个取值。两个决策树都可以继续延伸下去。我们的问题是:究竟选择哪个特征更好一些呢?这就要确定选择特征的准则。直观上,一个特征具有更好的分类能力,按照这一特征将数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就应该选择这个特征。信息增益就能很好的表示这一个准则。
信息增益(第一个准则)
别急,万丈高楼平地起,我们在这里先给出熵和条件熵的定义。
在信息论与概率统计中,熵(entropy)表示随机变量不确定性的量度。设X是一个取有限个值的离散随机变量,其概率分布为:
P
(
X
=
x
i
)
=
p
i
,
i
=
1
,
2
,
.
.
.
,
n
P(X=x_i)=p_i,\qquad i=1,2,...,n
P(X=xi)=pi,i=1,2,...,n
则随机变量X的熵定义为:
H
(
X
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
(1)
H(X)=-\sum_{i=1}^np_i\ log\ p_i\tag 1
H(X)=−i=1∑npi log pi(1)
在(1)中,若
p
i
=
0
p_i=0
pi=0,则定义 0 log 0 = 0,通常我们不改变单调性的原则,(1)式中的对数可 以2为底或以e为底,这是熵的单位分别称作比特(bit)或者纳特(nat).我们从定义可以看出,熵只依赖于 X 的分布,而与 X 的取值无关,所以也将 X 的熵记作 H§,即;
H
(
p
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
(2)
H(p)=-\sum_{i=1}^np_i\ log\ p_i \tag 2
H(p)=−i=1∑npi log pi(2)
熵越大,随机变量的不确定性就越大。从定义可验证
0
⩽
H
(
p
)
⩽
l
o
g
n
(3)
0\leqslant H(p)\leqslant log\ n \tag 3
0⩽H(p)⩽log n(3)
当随机变量只取两个值,例如1,0时,即 X 的分布为
P
(
X
=
1
)
=
p
,
P
(
X
=
0
)
=
1
−
p
,
0
⩽
p
⩽
1
P(X=1)=p,\ P(X=0)=1-p,\ 0\leqslant p \leqslant 1
P(X=1)=p, P(X=0)=1−p, 0⩽p⩽1
熵为
H
(
p
)
=
−
p
l
o
g
2
p
−
(
1
−
p
)
l
o
g
2
(
1
−
p
)
(4)
H(p)=-p\ log_2p-(1-p)log_2(1-p) \tag 4
H(p)=−p log2p−(1−p)log2(1−p)(4)
这时,熵H§随机概率p变化的曲线如图所示(单位:bit)
当 p = 0 或 p = 1 时 H§ = 0,随机变量完全没有不确定性,是肯定的。当 p = 0.5 时,H§ = 1,熵值取最大,随机变量不确定性取最大。这一结论我们是通过上面这张图看出来的。
设有随机变量(X,Y),其联合概率分布为:
P
(
X
=
x
i
,
Y
=
y
j
)
=
p
i
j
,
i
=
1
,
2
,
.
.
.
,
n
;
j
=
1
,
2
,
.
.
.
,
m
P(X=x_i,Y=y_j)=p_{ij},\quad i=1,2,...,n;\ j=1,2,...,m
P(X=xi,Y=yj)=pij,i=1,2,...,n; j=1,2,...,m
条件熵 H(Y|X) 表示在已知随机变量 X 的条件下随机变量 Y 的不确定性。随机变量 X 给定的条件下随机变量 Y 的条件熵(condition entropy) H(Y|X),给定为 X 条件下 Y 的概率分布的熵对 X 的数学期望
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
)
(5)
H(Y|X)=\sum_{i=1}^np_iH(Y|X)\tag5
H(Y∣X)=i=1∑npiH(Y∣X)(5)
这里,
p
i
=
P
(
X
=
x
i
)
,
i
=
1
,
2
,
.
.
.
,
n
p_i=P(X=x_i),i=1,2,...,n
pi=P(X=xi),i=1,2,...,n
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件分别称为经验熵(empirical entropy) 和条件经验熵(empirical conditional entropy).此时如果有概率为零,那么我们就令:0 log 0 = 0.
信息增益(information gain)表示得知特征 X 的信息而使得类 Y 的信息的不确定性减少的程度。
信息增益定义:特征A对数据训练集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
(6)
g(D,A)=H(D)-H(D|A) \tag 6
g(D,A)=H(D)−H(D∣A)(6)
一般地,熵H(Y)与条件熵H(Y|X)之差称为互信息。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
决策树学习应用信息增益准则来选择特征。给定训练集D和特征A,经验熵H(D)表示对数据集D进行分类的不确定性。而经验条件熵H(D|A)表示在特征A给定的条件下对数据集D进行分类的不确定性。那么他们的差,即信息增益,就表示由于特征A而使得对数据集的分类的不确定性减少程度。显然对数据集D而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。
我们可以举个例子,就用混乱度而言。开始的混乱度D很大,100,然后我们有两种处理手段A,B.A处理后我们算出信息增益是60,B为50.这里我们假定就直接用数据相减,A处理后的混乱度100 - 60 = 40 ,B处理后的混乱度 100 - 50 = 50.混乱度越小越有序,此时就说明信息增益越大的A处理手段更能助于我们分类。
根据信息增益准则的特征选择方法是:对训练数据集D(或者其子集),计算每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。
设训练数据集为D,|D|表示样本容量。设有 K 个类
C
k
C_k
Ck,
∣
C
k
∣
|C_k|
∣Ck∣属于类
C
k
C_k
Ck的样本个数,
∑
k
=
1
K
∣
C
k
∣
=
∣
D
∣
\sum_{k=1}^K|C_k|=\ |D|
∑k=1K∣Ck∣= ∣D∣,设A有n个不同的取值{
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,...,a_n
a1,a2,...,an},根据特征A的取值将D划分为 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样本个数,
∑
i
=
1
n
∣
D
i
∣
=
∣
D
∣
\sum_{i=1}^n|D_i|=|D|
∑i=1n∣Di∣=∣D∣.我们记子集
D
i
D_i
Di中属于类
C
k
C_k
Ck的样本集合为
D
i
k
D_{ik}
Dik,也就是
D
i
k
=
D
i
∩
C
k
D_{ik}=D_i∩C_k
Dik=Di∩Ck,
D
i
k
为
D
i
k
D_{ik}为D_{ik}
Dik为Dik的样本数。下面我们来看看是怎么计算的。
信息增益计算过程
- 计算数据集D的经验熵H(D) H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log 2 ∣ C k ∣ ∣ D ∣ (7) H(D)=-\sum_{k=1}^K\frac{|C_k|}{|D|} \log _2 \frac{|C_k|}{|D|} \tag 7 H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣(7)
- 计算特征A对数据集 D 的经验条件熵 H(D|A) H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ log 2 ∣ D i k ∣ ∣ D i ∣ (7) H(D|A)=\sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\sum_{k=1}^K\frac{|D_{ik}|}{|D_i|}\log_2\frac{|D_{ik}|}{|D_i|}\tag 7 H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣(7)
- 计算信息增益
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(D).
H
(
D
)
=
−
9
15
log
2
9
15
−
6
15
l
o
g
2
6
15
=
0.971
H(D)=-\frac{9}{15}\log_2\frac{9}{15}-\frac{6}{15}log_2\frac{6}{15} = 0.971
H(D)=−159log2159−156log2156=0.971
在决策类中只有是和否两种结果,15 个样本数据中有 9 个是,六个否,然后就是带入公式计算如上所示。
然后计算各个特征对数据集D的信息增益。分别用
A
1
,
A
2
,
A
3
,
A
4
A_1,A_2,A_3,A_4
A1,A2,A3,A4表示年龄,有工作 ,有自己的房子和信贷情况四个特征,则:
(1)
g
(
D
,
A
1
)
=
H
(
D
)
−
[
5
15
H
(
D
1
)
+
5
15
H
(
D
2
)
+
5
15
H
(
D
3
)
]
=
0.971
−
[
5
15
(
−
2
5
log
2
2
5
−
3
5
log
2
3
5
)
+
5
15
H
(
−
3
5
log
2
3
5
−
2
5
log
2
2
5
)
+
5
15
H
(
−
4
5
log
2
4
5
−
1
5
log
2
1
5
)
]
=
0.971
−
0.888
=
0.083
\begin {aligned} g(D,A_1)&=H(D)-\left [ \frac{5}{15}H(D_1)+\frac{5}{15}H(D_2)+\frac{5}{15}H(D_3) \right ] \\ &=0.971-\left [ \frac{5}{15}(-\frac{2}{5}\log_2\frac{2}{5}-\frac{3}{5}\log_2\frac{3}{5})+\frac{5}{15}H(-\frac{3}{5}\log_2\frac{3}{5}-\frac{2}{5}\log_2\frac{2}{5})+\frac{5}{15}H(-\frac{4}{5}\log_2\frac{4}{5}-\frac{1}{5}\log_2\frac{1}{5}) \right ]\\ &=0.971-0.888=0.083 \end {aligned}
g(D,A1)=H(D)−[155H(D1)+155H(D2)+155H(D3)]=0.971−[155(−52log252−53log253)+155H(−53log253−52log252)+155H(−54log254−51log251)]=0.971−0.888=0.083
解释一下,经验熵作为被减数,然后我们选择的这个特征是
A
1
A_1
A1对吧 ,他有三个取值,青年,中年,老年,这三个条件会把整个样本数据分成三部分,这里我们数了一下刚好均分,然后就去算对应的条件熵。条件熵就需要注意,我们以青年为例,由于青年这个条件限制,我们只能去青年这五个人去找,青年中可以获得贷款的人只有 2 个,不能获得贷款的人有 3 个,再用一下信息熵公式即可。
类似的我们可以求出:
(2)
g
(
D
,
A
2
)
=
0.324
g(D,A_2)=0.324
g(D,A2)=0.324
(3)
g
(
D
,
A
3
)
=
0.420
g(D,A_3)=0.420
g(D,A3)=0.420
(4)
g
(
D
,
A
4
)
=
0.363
g(D,A_4)=0.363
g(D,A4)=0.363
最后,我们比较各特征的信息增益。有特征
A
3
A_3
A3的信息增益值最大,所以我们选择特征
A
3
A_3
A3作为最优特征。
信息增益比(第二个准则)
以信息增益作为划分训练集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比 (information gain ratio) 可以对这一问题进行矫正,这是特征选择的另一个准则。
定义:特征A对训练数据集D的信息增益比
g
R
(
D
,
A
)
g_R(D,A)
gR(D,A)定义为其信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)与训练数据集D关于特征A的值的熵
H
A
(
D
)
H_A(D)
HA(D)之比,即:
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
g_R(D,A)=\frac{g(D,A)}{H_A(D)}
gR(D,A)=HA(D)g(D,A)
其中,
H
A
(
D
)
=
−
∑
i
=
1
n
D
i
D
log
2
D
i
D
H_A(D)=-\sum_{i=1}^n\frac{D_i}{D}\log_2\frac{D_i}{D}
HA(D)=−∑i=1nDDilog2DDi,n 是特征 A 取值的个数。
决策树的生成
在这里我们将要通过两个主要的算法来生成决策树,ID3算法和C4.5算法。
ID3算法
ID3算法的核心是在决策树各个节点上利用信息增益来选取特征,递归的构建决策树。具体方法是:从根结点开始,对结点计算所有的信息增益,然后选择信息增益最大的特征来作为结点的特征,由该特征的不同取值来建立子结点;在对子结点利用递归重复以上的方法:直到所有特征的信息增益都很小或没有特征可以选择为止。ID3算法相当于用极大 似然函数进行概率模型的选择。
ID3算法流程
输入:训练集 D ,特征值
ϵ
\epsilon
ϵ
输出:决策树
(1)若 D 中所有实例归属于同一类
C
k
C_k
Ck,则 T 为单结点树,并将类
C
k
C_k
Ck 作为该结点的类标记,返回 T;
(2)如果 A = ∅,则 T 为单结点树,并将 D 中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回 T.
(3)否则,计算 A 中各个特征对 D 的信息增益,选择信息增益最大的特征
A
g
A_g
Ag.
(4)如果
A
g
A_g
Ag的信息增益小于阈值
ϵ
\epsilon
ϵ,则 T 为单结点树,并将 D 中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回 T.
(5)否则,对
A
g
A_g
Ag的每一可能值
a
i
a_i
ai,依
A
g
=
a
i
A_g=a_i
Ag=ai 将 D 分成若干个非空集合
D
i
D_i
Di,将
D
i
D_i
Di中实例数最大的类最为标记,构建子结点,由结点及其子结点构成树 T,返回 T;
(6)对 i 个子结点,以
D
i
D_i
Di为训练集,
A
−
A
g
A-A_g
A−Ag为特征集,递归调用(1)~(5),得到子树
T
i
T_i
Ti,并返回之。
**举例:**我们还是用那张表,老规矩上表。
我们上面已经第一次求出了信息增益"
A
3
A_3
A3"(有自己的房子)信息增益最大,我们选择
A
3
A_3
A3最为根结点特征。它将训练数据集划分成两个子集
D
1
和
D
2
D_1和D_2
D1和D2,即
D
1
D_1
D1代表“是”,
D
2
D_2
D2代表“否”。由于“D_1”只有一个样本种类,那么这一块数据将被标记为是(准许贷款),成为叶结点。
接下来我们将会对
D
2
D_2
D2进一步划分,那么将会从
A
1
A_1
A1年龄,
A
2
A_2
A2有工作,
A
4
A_4
A4信贷情况中选择新的特征。计算各个特征的信息增益:
g
(
D
2
,
A
1
)
=
0.251
g
(
D
2
,
A
2
)
=
0.918
g
(
D
2
,
A
4
)
=
0.474
\begin {aligned}g(D_2,A_1)&=0.251 \\ g(D_2,A_2)&=0.918\\ g(D_2,A_4)&=0.474 \end {aligned}
g(D2,A1)g(D2,A2)g(D2,A4)=0.251=0.918=0.474
选择信息增益最大的特征
A
2
A_2
A2作为结点特征。由于
A
2
A_2
A2 有两个可能的取值,引出两个孩子:“是”(有自己的工作):有3个样本,他们的最终决策都是允许贷款,所以标记为“是”(可以贷款),作为叶结点;另一个孩子“否”(有自己的工作),有两个样本,且最终属性都是“否”(可以贷款),纯的,成为叶结点 。那么总的情况都已经分完了,没有剩余样本,决策树生成完毕。
我们在这里仅仅有了两个特征属性就生成了树,ID3 算法只有树的生成,非常容易产生过拟合。
C4.5的生成算法
C4.5和ID3很像,这个算法只是对ID3进行了改进,不同点就是在生成树的过程中采用信息增益比来选择特征。
输入和输出不变。
(1)若 D 中所有实例归属于同一类
C
k
C_k
Ck,则 T 为单结点树,并将类
C
k
C_k
Ck 作为该结点的类标记,返回 T;
(2)如果 A = ∅,则 T 为单结点树,并将 D 中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回 T.
(3):否则,计算A中各个特征对D的信息增益比,选择信息增益比最大的特征
A
g
A_g
Ag
(4)如果
A
g
A_g
Ag的信息增益比 小于阈值
ϵ
\epsilon
ϵ,则 T 为单结点树,并将 D 中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回 T.
(5)否则,对
A
g
A_g
Ag的每一可能值
a
i
a_i
ai,依
A
g
=
a
i
A_g=a_i
Ag=ai 将 D 分成若干个非空集合
D
i
D_i
Di,将
D
i
D_i
Di中实例数最大的类最为标记,构建子结点,由结点及其子结点构成树 T,返回 T;
(6)对 i 个子结点,以
D
i
D_i
Di为训练集,
A
−
A
g
A-A_g
A−Ag为特征集,递归调用(1)~(5),得到子树
T
i
T_i
Ti,并返回之。
决策树的剪枝
我们在使用 ID3 和 C4.5 算法时,都是递归生成树直到不能进行为止,每一个数据分类都是非常的准确,这就容易造成过拟合现象。我们为了解决这个问题,就需要对决策树进行剪枝。在决策树学习中,把已经生成的决策树的简化 ,具体来说就是去掉一些子树或者叶子结点,使父亲结点变成叶子结点达到简化的目的
决策树的剪枝往往通过极小化决策树整体的损失函数或者代价函数来实现。 设树的叶子结点个数为 |T| ,t 是树 T 的叶结点,该叶结点有 n 个样本,其中 k 类的样本点有
N
t
k
N_{tk}
Ntk 个,k = 1,2,…,K,H(T) 为叶结点 t 上的经验熵,α ≥ 0为参数,那么决策树的损失函数可以定义为:
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
(8)
C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|\tag8
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣(8)
其中经验熵为 :
H
t
(
T
)
=
−
∑
k
N
t
k
N
t
log
N
t
k
N
t
H_t(T)=-\sum_k\frac{N_{tk}}{N_t}\log \frac{N_{tk}}{N_t}
Ht(T)=−k∑NtNtklogNtNtk
损失函数中,将 (8)式右端的第一项记作:
C
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
=
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
log
N
t
k
N
t
C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=\sum_{t=1}^{|T|}\sum_{k=1}^K{N_{tk}}\log \frac{N_{tk}}{N_t}
C(T)=t=1∑∣T∣NtHt(T)=t=1∑∣T∣k=1∑KNtklogNtNtk
这样(8)式变为:
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
(9)
C_\alpha(T)=C(T)+\alpha|T|\tag9
Cα(T)=C(T)+α∣T∣(9)
在(9)式中,C(T)表示模型对训练数据的预测误差,即模型和训练数据的拟合程度,|T|表示模型复杂度,参数 α ≥ 0控制两者之间的影响。较大的 α 促使模型选择简单模型的树,较小的α选择模型复杂的树。 α = 0 表示只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。
剪枝,就是当α确定的时候,选择损失函数最小的模型,即损失函数最小的子树。当α确定的时候,子树越大,往往与训练的数据拟合程度越高,但是模型的复杂度就会越高;反之,α越小,子树的模型简单,拟合程度不高。损失函数是为了平衡两者的关系。
可以看出,决策树生成只考虑了通过提高信息增益对训练集进行更好的拟合。而决策树的剪枝通过优化损失函数还考虑减小模型复杂度。决策树生成学习局部的模型,而决策剪枝学习整体的模型。
式子(8)(9)定义的损失函数的极小化等价于正则化的极大似然估计。利用损失函数最小原则进行剪枝处理过程就是正则化的极大似然估计。
剪枝过程
- 计算每个结点的经验熵。
- 递归的从树的叶结点向上回缩。我们设叶结点回缩到其父结点之前与之后的整体树分别为
T
A
T_A
TA 和
T
B
T_B
TB ,其对应的损失函数分别是
C
α
(
T
A
)
与
C
α
(
T
B
)
C_\alpha(T_A)与C_\alpha(T_B)
Cα(TA)与Cα(TB):
C
α
(
T
B
)
≤
C
α
(
T
A
)
(10)
C_\alpha(T_B)≤C_\alpha(T_A)\tag{10}
Cα(TB)≤Cα(TA)(10)就是剪枝前的损失函数大,我们就进行剪枝。
3.返回(2)直至不能继续为止,得到损失函数最小的子树 T。
注意:式子(10)在比较的时候,只需要考虑两个树的损失函数的差,其计算可以再局部进行。所以决策树的剪枝算法可以有一种动态规划的算法实现。