决策树简介
决策树
决策树(decision tree) 是一种基本的分类与回归方法。
决策树属于判别模型,也是非线性分类模型。
决策树模型
决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类过程。
决策树学习算法包含特征选择、决策树的生成与决策树的剪枝三个步骤。
特征选择
信息熵(information entropy)
在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量。值越大越不确定,越小越稳定。
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
信息增益(information gain)
特征A对训练数据集D的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A),定义为集合D的经验熵
H
(
D
)
H(D)
H(D)与特征
A
A
A给定条件下
D
D
D的经验条件熵
H
(
D
∣
A
)
H(D|A)
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)
信息增益率(information gain ratio)
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比可以对这一问题进行校正。
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=1nD∣Di∣log2D∣Di∣,
n
n
n是特征
A
A
A取值的个数。
基尼指数(Gini index)
其实非常类似于熵的计算,分类问题中,假设有
K
K
K个类,样本点属于第
k
k
k类的概率为
p
k
p_k
pk,则概率分布的基尼指数定义为
G
i
n
i
(
p
)
=
−
∑
k
=
1
K
p
k
(
1
−
p
k
)
Gini(p) = -\sum_{k=1}^Kp_k(1- p_k )
Gini(p)=−k=1∑Kpk(1−pk)
对于二分类问题,若样本点属于第1个类的概率为
p
p
p,概率分布的基尼指数定义为
G
i
n
i
(
p
)
=
2
p
(
1
−
p
)
Gini(p) =2p(1-p)
Gini(p)=2p(1−p)
决策树的生成
(1)若
D
D
D中所有实例属于同一类
C
k
C_k
Ck,则T为单结点树,并将类
C
k
C_k
Ck作为该结点的类标记, 返回
T
T
T;
(2)若
A
=
Ø
A=Ø
A=Ø,则
T
T
T为单结点树,并将
D
D
D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(3)否则,使用特征选择的方法选择增益最大的特征
A
g
A_g
Ag;
(4)如果
A
g
A_g
Ag的信息增益小于阈值 ,则置
T
T
T为单结点树,并将
D
D
D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(5)否则,对
A
g
A_g
Ag的每一可能值
a
i
a_i
ai,依
A
g
=
a
i
A_g=a_i
Ag=ai将
D
D
D分割为若干非空子集
D
i
D_i
Di,将
D
i
D_i
Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树
T
T
T,返回
T
T
T;
(6)对第
i
i
i个子结点,以
D
i
D_i
Di为训练集,以
A
−
{
A
g
}
A- \{A_g\}
A−{Ag}为特征集,递归地调用步(1)~步 (5),得到子树
T
i
T_i
Ti,返回
T
i
T_i
Ti。
决策树与数据结构—树相关,因此可以采用递归算法进行生成决策树,所以看到看到有三个终止条件
决策树的剪枝
决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往会产生过拟合。
前剪枝
在决策树的生成步骤中,第(4)步:
(4)如果 A g A_g Ag的信息增益小于阈值 ,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;
这里阈值的设置就起到了一个前剪枝的作用。
后剪枝
往往通过极小化决策树整体的损失函数或代价函数来实现。
设树
T
T
T的叶结点个数为
∣
T
∣
|T|
∣T∣,
t
t
t是树
T
T
T的叶结点,该叶结点有
N
t
N_t
Nt个样本点,其中
k
k
k类的样本点有
N
t
k
N_{tk}
Ntk个,
k
=
1
,
2
,
…
,
K
k=1,2,…,K
k=1,2,…,K,
H
t
(
T
)
H_t(T)
Ht(T)为叶结点t上的经验熵,
α
≥
0
\alpha≥0
α≥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}}{Nt} \log \frac{N_{tk}}{Nt}
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}^{|T|}N_tH_t(T) = - \sum_{t=1}^{|T|} \sum_{k=1}^KN_{tk} \log \frac{N_{tk}}{Nt}
C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣k=1∑KNtklogNtNtk
这时有
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T) = C(T) + \alpha|T|
Cα(T)=C(T)+α∣T∣
可以看到, C ( T ) C(T) C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, ∣ T ∣ |T| ∣T∣表示模型复杂度,叶结点越多越复杂,该损失函数的极小化等价于正则化的极大似然估计。
输入:生成算法产生的整个树
T
T
T,参数
α
\alpha
α;
输出:修剪后的子树
T
α
T_\alpha
Tα。
(1)计算每个结点的经验熵。
(2)递归地从树的叶结点向上回溯。 设一组叶结点回缩到其父结点之前与之后的整体树分别为
T
B
T_B
TB与
T
A
T_A
TA,其对应的损失函数值分别是
C
α
(
T
B
)
C_\alpha(T_B)
Cα(TB)与
C
α
(
T
A
)
C_\alpha(T_A)
Cα(TA),如果 则进行剪枝,即将父结点变为新的叶结点。
(3)返回(2),直至不能继续为止,得到损失函数最小的子树
T
α
T_\alpha
Tα。
决策树经典算法
ID3算法
对于ID3算法,我们选择信息增益去选择划分特征
C4.5算法
对于C4.5算法,我们选择信息增益比去选择划分特征
CART算法(classification and regression tree)
区别于前面两种算法,该算法生成的一定是二叉树,且适用于回归问题中。
在分类问题中,我们使用基尼指数去选择细粒度更低的特征内的属性去进行二分类划分,比如纹理是否清晰进行划分等等。
在回归问题中,我们会对所有连续输入变量(指每一个属性和每一个属性下对应的值)进行遍历所有输入变量,找到一个最优切分变量进行划分两个区域,通过使用平方误差进行特征选择。
一个回归树对应着输入空间(即feather space)的一个划分以及在划分的单元的输出值。
假设已将输入空间划分为
M
M
M个单元
R
1
,
R
2
,
…
,
R
M
R_1,R_2,…,R_M
R1,R2,…,RM,并且在每个单元
R
m
R_m
Rm上有一个固定的输出值
c
m
c_m
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
{\mathop{c}\limits^\wedge}_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
)
{\mathop{c}\limits^\wedge}_m = ave(y_i | x_i \in R_m)
c∧m=ave(yi∣xi∈Rm)