目录
决策树(decision tree)是一种基本的分类与回归方法。在分类问题中,它可以认为是 if-then 规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。优点是模型具有可读性,分类速度快。
决策树学习通常包括3个步骤:特征选择、决策树的生成、决策树的修剪。
5.1 决策树模型与学习
5.1.1 决策树模型
定义 5.1 (决策树)分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。下图圆形表示内部结点,方形是叶子结点。
5.1.2 决策树与 if-then 规则
可以将决策树看成一个 if-then 规则的集合。将决策树转换成 if-then 规则的过程是这样的:由决策树的根节点到叶结点的每一条路径构建一条规则;路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。决策树的路径或其对应的 if-then 规则集合具有一个重要的性质:互斥并且完备。这就是说,每一个实例都被一条路径或一条规则所覆盖,并且只被一条路径或一条规则所覆盖。这里所谓覆盖是指实例的特征与路径的特征一致或实例满足规则的条件。
5.1.3 决策树与条件概率分布
决策树还表示给定特征条件下类的条件概率分布。这一条件概率分布定义在特征空间的一个划分(partition)上。将特征空间划分为互不相交的单元(cell)或区域(region),并在每个单元定义一个类的概率分布就构成了一个条件概率分布。决策树的一条路径对应于划分中的一个单元。各叶结点(单元)上的条件概率往往偏向某一个类,即属于某一类的概率较大。决策树分类时将该结点的实例强行分到条件概率大的那一类去。
a 图中,大正方形表示特征空间,这个大正方形被若干个小矩形分割,每个小矩形表示一个单元。
5.1.4 决策树学习
决策树学习本质上是从训练数据集中归纳出一组分类规则。能对训练数据进行正确分类的决策树可能有多个,也可能没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。决策树学习是由训练数据集估计条件概率模型。
决策树学习的损失函数通常是正则化的极大似然函数。从所有可能的决策树中选取最优决策树是 NP 完全问题,所以现实中决策树学习算法同行采用启发式方法,近似求解这一最优问题。这样得到的决策树是次最优(sub-optimal)的。
开始,构建根结点,将所有数据都放在根结点。选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。如果这些子集一斤更能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。如此进行下去,直到每个子集都被分到叶结点上,即都有了明确的分类。这就生成了一棵决策树。
以上方法生成的决策树容易发生过拟合显现。我们需要对已生成的树自下而上进行剪枝,将树变得简单,从而使它具有更好的泛化能力。具体地,就是去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点。
如果特征数量很多,也可以在决策树学习开始的时候,对特征进行选择,只留下对训练数据有足够分类能力的特征。
决策树学习算法包含特征选择、决策树的生成与决策树的剪枝过程。常用的算法有ID3、C4.5、CART。
5.2 特征选择
5.2.1 特征选择问题
特征选择在于选取对训练年数据具有分类能力的特征,以提高决策树学习的效率。经验上扔掉对决策树学习的精度影响不大的特征。通常特征选择的准则是信息增益或信息增益比。
首先通过一个例子来说明特征选择问题。
希望通过所给的训练数据学习一个贷款申请的决策树,用以对未来的贷款申请进行分类。根据申请人的特征利用决策树决定是否批准贷款申请。
特征选择是决定用哪个特征来划分特征空间。
下图是从上面数据中学习到的两个可能的决策树,分别由两个不同特征的根结点构成。两个决策树都可以继续延续下去,问题是该选择哪个特征好些?原则是,如果一个特征具有更好的分类能力,或者说按照这一特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就应该选择这一特征。信息增益(information gain)就能很好地表示这一直观
5.2.2 信息增益
在信息论与概率论中,熵(entropy)是表示随机变量不确定性的度量。设 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
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X)=-\sum_{i=1}^np_i\log p_i
H(X)=−i=1∑npilogpi其中若
p
i
=
0
p_i=0
pi=0, 则定义
0
log
0
=
0
0\log 0=0
0log0=0。通常对数以 2 为底或以 e 为底(自然对数),这时熵的单位分别称作比特(bit)或纳特(nat)。熵只依赖于 X 的分布,与 X 的取值无关,所以也可以将 X 的熵记作
H
(
p
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(p)=-\sum _{i=1}^np_i\log p_i
H(p)=−i=1∑npilogpi熵越大,随机变量的不确定性就越大。从定义可验证
0
≤
H
(
P
)
≤
log
n
0\leq H(P)\leq \log n
0≤H(P)≤logn
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X) 表示在已知随机变量 X 的条件下,随机变量 Y 的不确定性。随机变量 X 给定的条件下随机变量 Y 的条件熵(conditional entropy)H(Y|X),定义为 X 给定条件下 Y 的条件概率分布的熵对 X 的数学期望
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X)=\sum_{i=1}^np_iH(Y|X=x_i)
H(Y∣X)=i=1∑npiH(Y∣X=xi)这里,
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)。
信息增益(information gain)表示得知特征 X 的信息而使得类 Y 的信息的不确定性减少的成都。
信息增益 特征 A 对训练数据集 D 的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A),定义为集合 D 的经验熵 H(D) 与特征 A 给定条件下 D 的经验熵 H(D|A) 之差,即
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|X)之差称为互信息(mutual information)。决策树中的信息增益等价于训练数据集中类与特征的互信息。
决策树学习应用信息增益准则选择特征。显然,对于数据集 D 而言,信息增益依赖与特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。
根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
5.2.3 信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比(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
∣
,
n
H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|},n
HA(D)=−∑i=1n∣D∣∣Di∣log2∣D∣∣Di∣,n是特征 A 取值的个数。
5.3 决策树的生成
本章介绍决策树生成的算法。
5.3.1 ID3 算法
ID3 算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一棵决策树。ID3 相当于用极大似然法进行概率模型的选择。
ID3 算法
输入:训练数据集 D,特征集 A 阈值
ϵ
\epsilon
ϵ;
输出:决策树 T。
(1)若 D 中所有实例属于同一类 Ck,则 T 为单结点树,并将类 Ck 作为该结点的类标记,返回 T;
(2)若
A
=
ϕ
A=\phi
A=ϕ,则 T 为单结点树,并将 D 中实例数最大的类 Ck 作为该结点的类标记,返回 T;
(3)否则,按算法 5.1 计算 A 中各特征对 D 的信息增益,选择信息增益最大的特征 Ag ;
(4)如果 Ag 的信息增益小于阈值
ϵ
\epsilon
ϵ,则置 T 为单结点树,并将 D 中实例数最大的类 Ck 作为该结点的类标记,返回 T;
(5)否则,对 Ag的每一可能值 ai,依
A
g
=
a
i
A_g=a_i
Ag=ai 将 D 分割为若干非空子集 Di ,将 Di 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树 T,返回 T;
(6)对第 i 个子结点,以 Di 为训练集,以
A
−
A
g
A-{A_g}
A−Ag 为特征集,递归地调用步(1)~步(5),得到子树 Ti,返回 Ti 。
ID3 算法只有树的生成,所以该算法生成的树容易产生过拟合。
5.3.2 C4.5的生成算法
C4.5算法对 ID3 算法进行了改进, C4.5 在生成的过程中,用信息增益比来选择特征。
C4.5 的生成算法
输入:训练数据D,特征集 A 阈值
ϵ
\epsilon
ϵ;
输出:决策树 T
(1)如果 D 中所有实例属于同一类 Ck,则置 T 为单结点树,并将 Ck 作为该结点的类,返回 T;
(2)若
A
=
ϕ
A=\phi
A=ϕ,则 T 为单结点树,并将 D 中实例数最大的类 Ck 作为该结点的类标记,返回 T;
(3)否则,按信息增益比公式计算 A 中个特征对 D 的信息增益增益比,选择信息增益比最大的特征 Ag
(4)如果 Ag 的信息增益比小于阈值
ϵ
\epsilon
ϵ,则置 T 为单结点树,并将 D 中实例数最大的类 Ck 作为该结点的类,返回 T;
(5)否则,对 Ag的每一可能值 ai,依
A
g
=
a
i
A_g=a_i
Ag=ai 将 D 分割为若干非空子集 Di ,将 Di 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树 T,返回 T;
(6)对结点 i,以 Di 为训练集,以
A
−
A
g
A-{A_g}
A−Ag 为特征集,递归地调用步(1)~步(5),得到子树 Ti,返回 Ti 。
5.4 决策树的剪枝
决策树生成算法递归地产生决策树,容易出现过拟合。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。
在决策树学习中将已生成的树进行简化的过程称为剪枝(pruning) 具体地,剪枝从已生成的树上裁掉一些子树或叶结点,并将其根结点作为新的叶结点,从而简化分类树模型。
决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。设树 T 的叶结点个数为 |T|,t 是树 T 的叶结点,该叶结点有 Nt 个样本点,其中 k 类的样本点有 Ntk个,k = 1,2,…,K,Ht(T) 为叶结点 t 上的经验熵,
α
⩾
0
\alpha \geqslant0
α⩾0 为参数,则决策树学习的损失函数可以定义为
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣其中经验熵为
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
在损失函数中,右端的第1项记作
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}^{\vert T\vert}N_tH_t(T)=-\sum_{t=1}^{\vert T\vert}\sum_{k=1}^KN_{tk}\log\frac{N_{tk}}{N_t}
C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣k=1∑KNtklogNtNtk这时有
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T)=C(T)+\alpha\vert T\vert
Cα(T)=C(T)+α∣T∣C(T) 表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, |T| 表示模型复杂度,参数
α
⩾
0
\alpha \geqslant0
α⩾0 控制两者之间的影响。较大的
α
\alpha
α促使选择较简单的模型(树),较小的
α
\alpha
α促使选择较复杂的模型(树)。
α
=
0
\alpha=0
α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂程度。
剪枝,就是当
α
\alpha
α确定时,选择损失函数最小的模型,即损失函数最小的子树。当
α
\alpha
α值确定时,子树越大,往往与训练数据的子树拟合越好,但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。损失函数正好表示了对两者的平衡。
可以看出,决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好地拟合。决策树剪枝通过优化损失函数还考虑了减小模型复杂度。
损失函数的极小化等价于正则化的极大似然估计。所以,利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。
树的剪枝算法
输入:生成算法产生的整个树 T,参数
α
\alpha
α;
输出:修剪后的树
T
α
T_\alpha
Tα
(1)计算每个结点的经验熵。
(2)递归地从树的叶结点向上回缩。
设一组叶结点回缩到其父结点之前与之后的整体树分别为 TB 与 TA,其对应的损失函数值分别是
C
α
(
T
B
)
C_\alpha(T_B)
Cα(TB)与
C
α
(
T
A
)
C_\alpha(T_A)
Cα(TA),如果
C
α
(
T
A
)
≤
C
α
(
T
B
)
C_\alpha(T_A) \leq C_\alpha(T_B)
Cα(TA)≤Cα(TB)则进行剪枝,即将父结点变为新的叶结点。
(3)返回(2),直至不能继续为止,得到损失函数最小的子树
T
α
T_\alpha
Tα
注意,上面式子只考虑两个树的损失函数的差,其计算可以在局部进行。所以,决策树的剪枝算法可以由一种动态规划的算法实现。
5.5 CART 算法
分类与回归树(classification and regression tree,CART)模型由 Breiman 等人在1984年提出,是应用广泛的决策树学习方法。CART 同样由特征选择,树的生成及剪枝组成,既可以用于分类也可以用于回归。
CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。
CART 算法由以下两步组成:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
5.5.1 CART 生成
决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树。
1.回归树的生成
假设 X 与 Y 分别为输入和输出变量,并且 Y 是连续变量,给定训练数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
1
,
y
2
)
,
.
.
.
,
(
x
N
,
Y
N
}
D=\{(x_1, y_1),(x_1,y_2),...,(x_N, Y_N\}
D={(x1,y1),(x1,y2),...,(xN,YN}考虑如何生成回归树。
一棵回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为 M 个单元 R1,R2,…,RM,并且在每个单元 Rm 上有一个固定的输出值 cm,于是回归树模型可表示为
f
(
x
)
=
∑
m
=
1
M
c
m
I
(
x
∈
R
m
)
f(x)=\sum_{m=1}^{M}c_mI(x \in R_m)
f(x)=m=1∑McmI(x∈Rm)当输入空间的划分确定时,可以用平方误差
∑
x
i
∈
R
m
(
y
i
−
f
(
x
i
)
)
2
\sum_{x_i\in R_m}(y_i-f(x_i))^2
∑xi∈Rm(yi−f(xi))2 来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。易知,单元
R
m
R_m
Rm上的
c
m
c_m
cm的最优值
c
^
m
\hat c_m
c^m是
R
m
R_m
Rm上的所有输入实例
x
i
x_i
xi对应的输出
y
i
y_i
yi的均值,即
c
^
m
=
a
v
e
(
y
i
∣
x
i
∈
R
m
)
\hat c_m=ave(y_i|x_i \in R_m)
c^m=ave(yi∣xi∈Rm)问题是怎样对输入空间进行划分。这里采用启发式的方法,选择第 j 个变量
x
(
j
)
x^{(j)}
x(j)和它取的值 s,作为切分变量(splitting variable)和切分点(splitting point),并定于两个区域
R
1
(
j
,
s
)
=
{
x
∣
x
(
j
)
⩽
s
}
和
R
2
(
j
,
s
)
=
{
x
∣
x
(
j
)
>
s
}
R_1(j,s)=\{x\vert x^{(j)}\leqslant s\}和R_2(j,s)=\{x\vert x^{(j)}>s\}
R1(j,s)={x∣x(j)⩽s}和R2(j,s)={x∣x(j)>s}然后寻找最优切分变量 j 和最优切分点 s。具体地,求解
min
j
,
s
[
min
c
1
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
min
c
2
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
2
)
2
]
\underset{j,s}{\min}\lbrack\;\underset{c_1}{\min}\sum_{x_i\in R_1(j,s)}{(y_i-c_1)}^2+\underset{c_2}{\min}\sum_{x_i\in R_1(j,s)}{(y_i-c_2)}^2\rbrack
j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R1(j,s)∑(yi−c2)2]
对固定输入变量 j 可以找到最优切分点 s 。
c
^
1
=
a
v
e
(
y
i
∣
x
i
∈
R
1
(
j
,
s
)
)
和
c
^
2
=
a
v
e
(
y
i
∣
x
i
∈
R
2
(
j
,
s
)
)
\hat c_1 = ave(y_i|x_i\in R_1(j,s))和 \hat c_2=ave(y_i|x_i \in R_2(j,s))
c^1=ave(yi∣xi∈R1(j,s))和c^2=ave(yi∣xi∈R2(j,s))遍历所有输入变量,找到最优的切分变量 j,构成一个对(j,s)。依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件为止。这样就生成一棵回归树。这样的回归树通常称为最小二乘回归树(least squares regression tree),现将算法叙述如下。
2.分类树的生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
二分类问题中,基尼指数 Gini§、熵之半 H§/2 和分类误差率的关系。横坐标表示概率 p,纵坐标表示损失。可以看出基尼指数和熵之半的曲线很接近,都可以近似地代表分类误差率。
CART 生成算法
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。
5.5.2 CART 剪枝
CART 剪枝算法从“完全生长”的决策树的底端减去一些子树,使决策树变小(模型变简单),从而能够对位置数据有更准确的预测。
CART 剪枝算法由两步组成:首先从生成算法产生的决策树 T0 底端开始不断剪枝,直到 T0 的根结点,形成一个子树序列
{
T
o
,
T
1
,
.
.
.
,
T
n
}
\{T_o, T_1,..., T_n\}
{To,T1,...,Tn};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
1.剪枝,形成一个子树序列
在剪枝过程中,计算子树的损失函数:
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T)=C(T)+\alpha|T|
Cα(T)=C(T)+α∣T∣
其中,T 为任意子树,C(T) 为对训练数据的预测误差(如基尼指数),|T| 为子树的叶结点个数,
α
≥
0
\alpha \geq 0
α≥0 为参数,
C
α
(
T
)
C_\alpha(T)
Cα(T) 为参数是
α
\alpha
α 时的子树 T 的整体损失。参数
α
\alpha
α权衡训练数据的拟合程度与模型的复杂度。
α
\alpha
α 越大,最优子树越小、越简单。
对固定的
α
\alpha
α,一定存在使损失函数
C
α
(
T
)
C_\alpha(T)
Cα(T)最小的子树,将其表示为
T
α
T_\alpha
Tα。这样的最优子树是唯一的。
α
\alpha
α 增大,最优子树变小、模型越简单。
2.在剪枝得到的子树序列
T
0
,
T
1
,
.
.
.
,
T
n
T_0, T_1,..., T_n
T0,T1,...,Tn 中通过交叉验证选取最优子树
T
α
T_\alpha
Tα
具体地,利用独立的验证数据集,测试子树序列
T
0
,
T
1
,
.
.
.
,
T
n
T_0, T_1,...,T_n
T0,T1,...,Tn中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子树序列中,每棵子树
T
0
,
T
1
,
.
.
.
,
T
n
T_0, T_1,...,T_n
T0,T1,...,Tn都对应于一个参数
α
1
,
α
2
,
.
.
.
,
α
n
\alpha_1,\alpha_2,...,\alpha_n
α1,α2,...,αn。所以,当最优子树
T
k
T_k
Tk 确定时,对应的
α
k
\alpha_k
αk也确定了,即得到了最优决策树
T
α
T_\alpha
Tα
算法5.7(CART 剪枝算法)
输入:CART 算法生成的决策树
T
0
T_0
T0
输出:最优决策树
T
α
T_\alpha
Tα
(1)设
k
=
0
,
T
=
T
0
k=0, T=T_0
k=0,T=T0
(2)设
α
=
+
∞
\alpha=+\infty
α=+∞
(3)自下而上地对各内部结点 t 计算
C
(
T
T
)
,
∣
T
t
∣
C(T_T), |T_t|
C(TT),∣Tt∣ 以及
g
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
α
=
min
(
α
,
g
(
t
)
)
g(t)=\frac{C(t)-C(T_t)}{|T_t|-1}\\ \\ \alpha=\min(\alpha,g(t))
g(t)=∣Tt∣−1C(t)−C(Tt)α=min(α,g(t))
这里,
T
t
T_t
Tt 表示以
t
t
t 为根结点的子树,
C
(
T
t
)
C(T_t)
C(Tt) 是对训练数据的预测误差,
∣
T
t
∣
|T_t|
∣Tt∣ 是
T
t
T_t
Tt 的叶结点个数。
(4)对
g
(
t
)
=
α
g(t)=\alpha
g(t)=α 的内部结点
t
t
t 进行剪枝,并对叶结点
t
t
t 以多数表决法决定其类,得到树
T
T
T
(5)设
k
=
k
+
1
,
α
k
=
α
,
T
k
=
T
k=k+1, \alpha_k=\alpha, T_k=T
k=k+1,αk=α,Tk=T
(6)如果
T
k
T_k
Tk不是由根结点及两个叶结点构成的树,则回到步骤(2);否则令
T
k
=
T
n
T_k=Tn
Tk=Tn
(7)采用交叉验证法在子树序列
T
0
,
T
1
,
.
.
.
,
T
n
T_0, T_1, ..., T_n
T0,T1,...,Tn 中选取最优子树
T
α
T_\alpha
Tα
本章概要
1.分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个if-then规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布。
2.决策树学习旨在构建一个与训练数据拟合很好,并且复杂度小的决策树。因为从可能的决策树中直接选取最优决策树是NP完全问题(不能直接推算出答案,却能验证猜测的答案是否正确)。现实中采用启发式方法(无法求得最优解时,用一种相对较好的算法去逼近最优解,比如神经网络等)学习次优的决策树。
决策树学习算法包括3部分:特征选择、树的生成和树的剪枝。常用的算法有ID3、 C4.5和CART。
3.特征选择的目的在于选取对训练数据能够分类的特征。特征选择的关键是其准则。常用的准则如下:
(1)样本集合 D D D对特征 A A A的信息增益(ID3)
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
)
=
−
∑
k
=
1
K
∣
C
k
∣
∣
D
∣
log
2
∣
C
k
∣
∣
D
∣
H(D)=-\sum_{k=1}^{K} \frac{\left|C_{k}\right|}{|D|} \log _{2} \frac{\left|C_{k}\right|}{|D|}
H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
H
(
D
∣
A
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
H
(
D
i
)
H(D | A)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} H\left(D_{i}\right)
H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)
其中,
H
(
D
)
H(D)
H(D)是数据集
D
D
D的熵,
H
(
D
i
)
H(D_i)
H(Di)是数据集
D
i
D_i
Di的熵,
H
(
D
∣
A
)
H(D|A)
H(D∣A)是数据集
D
D
D对特征
A
A
A的条件熵。
D
i
D_i
Di是
D
D
D中特征
A
A
A取第
i
i
i个值的样本子集,
C
k
C_k
Ck是
D
D
D中属于第
k
k
k类的样本子集。
n
n
n是特征
A
A
A取 值的个数,
K
K
K是类的个数。
(2)样本集合 D D D对特征 A A A的信息增益比(C4.5)
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
(
D
)
g_{R}(D, A)=\frac{g(D, A)}{H(D)}
gR(D,A)=H(D)g(D,A)
其中,
g
(
D
,
A
)
g(D,A)
g(D,A)是信息增益,
H
(
D
)
H(D)
H(D)是数据集
D
D
D的熵。
(3)样本集合 D D D的基尼指数(CART)
Gini
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
\operatorname{Gini}(D)=1-\sum_{k=1}^{K}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2}
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
特征
A
A
A条件下集合
D
D
D的基尼指数:
Gini ( D , A ) = ∣ D 1 ∣ ∣ D ∣ Gini ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ Gini ( D 2 ) \operatorname{Gini}(D, A)=\frac{\left|D_{1}\right|}{|D|} \operatorname{Gini}\left(D_{1}\right)+\frac{\left|D_{2}\right|}{|D|} \operatorname{Gini}\left(D_{2}\right) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
4.决策树的生成。通常使用信息增益最大、信息增益比最大或基尼指数最小作为特征选择的准则。决策树的生成往往通过计算信息增益或其他指标,从根结点开始,递归地产生决策树。这相当于用信息增益或其他准则不断地选取局部最优的特征,或将训练集分割为能够基本正确分类的子集。
5.决策树的剪枝。由于生成的决策树存在过拟合问题,需要对它进行剪枝,以简化学到的决策树。决策树的剪枝,往往从已生成的树上剪掉一些叶结点或叶结点以上的子树,并将其父结点或根结点作为新的叶结点,从而简化生成的决策树。