决策树模型
决策树由节点node
和有向边directed edge
组成,有两种类型的节点,内部节点internal node
和叶节点leaf node
,内部节点表示一个特征或者属性,叶节点则表示类标签.
决策树学习
给定训练数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
N
,
y
N
)
}
D=\{(x_1, y_1), (x_2, y_2), \dots, (x_N, y_N)\}
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)}, \dots, x_i^{(n)})^T
xi=(xi(1),xi(2),…,xi(n))T表示输入实例,
y
i
∈
{
1
,
2
,
…
,
K
}
y_i \in\{1,2,\dots, K\}
yi∈{1,2,…,K}为类标记,决策树的学习目标是根据给定训练集构建决策树模型,使其可以对实例进行正确分类.
从所有决策树中选择最优决策树是NP完全问题,一般采用启发式算法求近似解,这样得到的决策树是次优的(sub-optimal).
决策树算法包含特征选择,决策树的生成与决策树的剪枝过程,由于决策树表示一个条件概率分布,所以深浅不同的决策树对应不同复杂度的概率模型. 决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择,决策树的生成仅考虑局部最优,而决策树的剪枝考虑全局最优.
信息增益
如何选择划分空间的特征是决策树的关键预处理步骤,而信息增益(information gain)可以作为很好的准则.
熵(entropy)表示随机变量不确定的度量,设离散随机变量
X
X
X满足
P
(
X
=
x
i
)
=
p
i
P(X=x_i)=p_i
P(X=xi)=pi
则
X
X
X的熵定义为
H
(
X
)
=
H
(
p
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X)=H(p)=-\sum_{i=1}^n p_i\log p_i
H(X)=H(p)=−i=1∑npilogpi
设随机变量
(
X
,
Y
)
(X, Y)
(X,Y),联合概率分布为
P
(
X
=
x
i
,
Y
=
y
j
)
=
p
i
j
P(X=x_i, Y=y_j)=p_{ij}
P(X=xi,Y=yj)=pij
条件熵
H
(
Y
∣
X
)
H(Y\mid X)
H(Y∣X)表示在已知随机变量
X
X
X的条件下随机变量
Y
Y
Y的不确定性
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y\mid X)=\sum_{i=1}^np_iH(Y\mid X=x_i)
H(Y∣X)=i=1∑npiH(Y∣X=xi)
当熵和条件熵中的概率由数据估计(如MLE)得到时,对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)
信息增益表示知道特征 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的经验条件熵
H
(
D
∣
A
)
H(D\mid A)
H(D∣A)之差,即
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D, A)=H(D)-H(D\mid A)
g(D,A)=H(D)−H(D∣A)
算法
训练数据集为
D
D
D,令
∣
D
∣
|D|
∣D∣表示样本容量,设标签有
K
K
K个类
C
k
,
k
=
1
,
2
,
…
,
K
C_k, k=1,2,\dots, K
Ck,k=1,2,…,K,
∣
C
k
∣
|C_k|
∣Ck∣表示标签为
C
k
C_k
Ck的样本个数,所以有
∑
i
=
1
K
∣
C
k
∣
=
∣
D
∣
\sum_{i=1}^K|C_k|=|D|
i=1∑K∣Ck∣=∣D∣
设特征
A
A
A有
n
n
n个不同的取值
{
a
1
,
a
2
,
…
,
a
n
}
\{a_1, a_2, \dots, a_n\}
{a1,a2,…,an},根据特征
A
A
A的取值将
D
D
D划分为
n
n
n个子集
D
1
,
D
2
,
…
,
D
n
D_1, D_2, \dots, D_n
D1,D2,…,Dn,其中
∣
D
i
∣
|D_i|
∣Di∣表示特征
A
A
A为
D
i
D_i
Di的样本个数.
∑
i
=
1
n
∣
D
i
∣
=
∣
D
∣
\sum_{i=1}^n|D_i|=|D|
i=1∑n∣Di∣=∣D∣
令
D
i
k
D_{ik}
Dik表示子集
D
i
D_i
Di中属于类
C
k
C_k
Ck的样本集合,即
D
i
k
=
D
i
∩
C
k
D_{ik}=D_i\cap C_k
Dik=Di∩Ck
∣
D
i
k
∣
|D_{ik}|
∣Dik∣为
D
i
k
D_{ik}
Dik的样本个数
算法步骤如下:
(1). 计算数据集
D
D
D的经验熵
H
(
D
)
H(D)
H(D):
H
(
D
)
=
−
∑
k
=
1
K
∣
C
k
∣
∣
D
∣
log
2
∣
C
k
∣
∣
D
∣
H(D)=-\sum_{k=1}^K\frac{|C_k|}{|D|}\log_2\frac{|C_k|}{|D|}
H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
(2). 计算特征
A
A
A对数据集
D
D
D的经验条件熵
H
(
D
∣
A
)
H(D\mid A)
H(D∣A)
H
(
D
∣
A
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
H
(
D
i
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
∑
i
=
1
k
∣
D
i
k
∣
∣
D
i
∣
log
2
∣
D
i
k
∣
∣
D
i
∣
H(D\mid A)=\sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\sum_{i=1}^k\frac{|D_{ik}|}{|D_i|}\log_2\frac{|D_{ik}|}{|D_i|}
H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣i=1∑k∣Di∣∣Dik∣log2∣Di∣∣Dik∣
(3). 计算信息增益
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D, A)=H(D)-H(D\mid A)
g(D,A)=H(D)−H(D∣A)
信息增益比
定义(信息增益比):特征
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)之比
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=1∑n∣D∣∣Di∣log2∣D∣∣Di∣
决策树生成算法
ID3
在决策树上各个节点上用信息增益准则选择特征,递归构建决策树,从根节点(root)开始,对节点计算所有可能的特征信息增益,选择信息增益最大的特征作为节点特征,并根据该特征建立子节点,再对子节点递归调用,构建决策树. ID3相当于用MLE进行概率模型选择.
算法:
输入:数据集
D
D
D,特征集
A
A
A阈值
ε
\varepsilon
ε
输出:决策树
T
T
T
(1). 若
D
D
D中所有样本属于同一类
C
k
C_k
Ck,则
T
T
T为单点树,并将类
C
k
C_k
Ck作为该节点的类标记,返回
T
T
T.
(2). 如果
A
=
∅
A=\empty
A=∅,则
T
T
T为单点树,将
D
D
D中样本数量最大类
C
k
C_k
Ck作为类标记,返回
T
T
T.
(3). 否则,计算
A
A
A中各个特征对
D
D
D的信息增益,选择信息增益最大的特征
A
g
A_g
Ag.
(4). 如果
A
g
A_g
Ag的信息增益小于阈值
ε
\varepsilon
ε,设
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为训练集,以
D
i
D_i
Di为训练集,以
A
−
{
A
g
}
A-\{A_g\}
A−{Ag}为特征集,递归调用
(
1
)
∼
(
5
)
(1)\sim (5)
(1)∼(5),得到子树
T
i
T_i
Ti,返回
T
i
T_i
Ti.
ID3算法自带特征选择过程,但是没有剪枝的步骤,因此产生的树容易过拟合.
C4.5
C4.5算法和ID3算法类似,但是使用信息增益比来选择特征.
算法:
将ID3算法中准则改为信息增益比即可.
决策树的剪枝
树模型是容易过拟合的,因此使用剪枝(pruning)来提高模型的泛化能力,即从已生成的决策树上裁掉一些子树或者叶子节点,将其根节点或者父节点作为新的叶子节点.
决策树剪枝通过极小化决策树整体的损失函数实现,设树
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个,
H
t
(
T
)
H_t(T)
Ht(T)为叶节点
t
t
t上的经验熵,
α
≥
0
\alpha\geq 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
)
H_t(T)
Ht(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
代入得到
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
=
(
−
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
log
N
t
k
N
t
)
+
α
∣
T
∣
C_\alpha(T)=C(T)+\alpha|T|=(-\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}\log\frac{N_{tk}}{N_t})+\alpha|T|
Cα(T)=C(T)+α∣T∣=(−t=1∑∣T∣k=1∑KNtklogNtNtk)+α∣T∣
其中
C
(
T
)
C(T)
C(T)表示模型对训练数据的预测误差,即度量了模型的拟合能力,
∣
T
∣
|T|
∣T∣表示了模型的复杂度,
α
≥
0
\alpha\geq 0
α≥0为平衡因子.
当
α
\alpha
α确定时,选择损失函数最小的模型的步骤就是剪枝.
算法
输入:生成算法产生的整个树
T
T
T,参数
α
\alpha
α
输出:剪枝后的子树
T
α
T_\alpha
Tα
(1). 计算节点经验熵
(2). 自下而上递归回溯
设一组节点回溯前后分别为
T
b
T_b
Tb和
T
a
T_a
Ta,如果
C
α
(
T
a
)
≤
C
α
(
T
b
)
C_\alpha(T_a)\leq C_\alpha(T_b)
Cα(Ta)≤Cα(Tb)
进行剪枝,将父节点作为新的叶子节点.
CART
分类与回归树(classification and regression tree, CART)模型由特征选择,树的生成及剪枝组成,可以用于分类任务和回归任务.
CART递归二分每个特征,将特征空间划分为有限个单元,并在单元上确定预测的概率分布(条件概率分布),主要有两步:
- 生成:基于训练数据集生成决策树
- 剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,使用损失函数最小作为剪枝的标准.
CART生成
递归构建二叉树的过程,对回归树使用平方误差最小化准则;对分类树使用基尼系数(Gini index)最小化准则,进行特征选择,生成二叉树.
回归树生成
设
X
X
X和
Y
Y
Y分别为输入和输出变量,并且
Y
Y
Y是连续变量,给定训练数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
N
,
y
N
)
}
D=\{(x_1, y_1), (x_2, y_2), \dots, (x_N, y_N)\}
D={(x1,y1),(x2,y2),…,(xN,yN)}
将输入空间划分为
M
M
M个单元
R
1
,
R
2
,
…
,
R
M
R_1, R_2, \dots, 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}^Mc_mI(x\in R_m)
f(x)=m=1∑McmI(x∈Rm)
使用平方误差最小准则求解每个单元格上的最优输出值,单元
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
g
(
y
i
∣
x
i
∈
R
m
)
\hat{c}_m=avg(y_i\mid x_i\in R_m)
c^m=avg(yi∣xi∈Rm)
使用启发式算法进行空间划分,选择第
j
j
j个变量
x
(
j
)
x^{(j)}
x(j)和取值
s
s
s,作为切分变量(splitting variable)和切分点(splitting point),定义两个区域
R
1
(
j
,
s
)
=
{
x
∣
x
(
j
)
≤
s
}
R_1(j, s)=\{x\mid x^{(j)} \leq s\}
R1(j,s)={x∣x(j)≤s}和
R
2
(
j
,
s
)
=
{
x
∣
x
(
j
)
>
s
}
R_2(j, s)=\{x\mid x^{(j)}>s\}
R2(j,s)={x∣x(j)>s}
寻找最优切分变量
j
j
j和最优切分点
s
s
s,求解
min
j
,
s
[
min
c
1
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
min
c
2
∑
x
i
∈
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
\min_{j, s}[\min_{c_1}\sum_{x_i\in R_1(j, s)}(y_i-c_1)^2+\min_{c_2}\sum_{x_i\in R_2(j, s)}(y_i-c_2)^2]
j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]
对于固定输入变量
j
j
j可以找到最优切分点
c
^
1
=
a
v
g
(
y
i
∣
x
i
∈
R
1
(
j
,
s
)
)
\hat{c}_1=avg(y_i\mid x_i\in R_1(j, s))
c^1=avg(yi∣xi∈R1(j,s))和
c
^
2
=
a
v
g
(
y
i
∣
x
i
∈
R
2
(
j
,
s
)
)
\hat{c}_2=avg(y_i\mid x_i\in R_2(j, s))
c^2=avg(yi∣xi∈R2(j,s))
访问所有输入变量,找到最优切分
(
j
,
s
)
(j, s)
(j,s),递归将空间二分,生成最小回归树(least squares regression tree).
分类树生成
分类树使用基尼系数作为最优特征,同时决定该特征的最优二值切分点.
定义(基尼系数):假设有 K K K个类,样本点属于第 k k k类的概率为 p k p_k pk,概率分布的基尼系数定义为
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^K p_k(1-p_k)=1-\sum_{k=1}^Kp_k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于二分类问题,如果样本点属于第1类的概率为
p
p
p,则概率分布的基尼指数为
G
i
n
i
(
p
)
=
2
p
(
1
−
p
)
Gini(p)=2p(1-p)
Gini(p)=2p(1−p)
对于给定样本集合
D
D
D,基尼指数为
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
Gini(D)=1-\sum_{k=1}^K(\frac{|C_k|}{|D|})^2
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
设根据特征
A
A
A将样本分为
D
1
D_1
D1和
D
2
D_2
D2,
∣
D
1
∣
+
∣
D
2
∣
=
∣
D
∣
|D_1|+|D_2|=|D|
∣D1∣+∣D2∣=∣D∣,在特征
A
A
A下,集合
D
D
D的基尼指数定义为
G
i
n
i
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
Gini(D, A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
在二分类问题中,基尼系数
≈
H
(
p
)
/
2
>
\approx H(p)/2>
≈H(p)/2>分类误差率.
CART剪枝
CART剪枝由两步组成:从生成算法产生的决策树
T
0
T_0
T0低端开始不断剪枝,直到
T
0
T_0
T0的根节点,形成一个子树序列
{
T
0
,
T
1
,
…
,
T
n
}
\{T_0, T_1, \dots, T_n\}
{T0,T1,…,Tn};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,选择最优子树.
(1). 剪枝形成子树序列
在剪枝过程中,计算子树的损失函数
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T)=C(T)+\alpha|T|
Cα(T)=C(T)+α∣T∣
Breiman等证明:可以使用递归的方法对树进行剪枝,将
α
\alpha
α从小增大,
0
=
α
0
<
α
1
<
⋯
<
α
n
<
∞
0=\alpha_0<\alpha_1<\dots<\alpha_n<\infty
0=α0<α1<⋯<αn<∞,产生一系列区间
[
α
i
,
α
i
+
1
)
,
i
=
0
,
1
,
…
,
n
[\alpha_i, \alpha_{i+1}), i=0, 1, \dots, n
[αi,αi+1),i=0,1,…,n;对应的最优子树序列是嵌套的.
(2). 在剪枝得到的子树序列
T
0
,
T
1
,
…
,
T
n
T_0, T_1, \dots, T_n
T0,T1,…,Tn中通过交叉验证选取最优子树
T
α
T_\alpha
Tα.
算法(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
t
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))
(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=T_n
Tk=Tn
(7) 交叉验证在树序列
T
0
,
T
1
,
…
,
T
n
T_0, T_1, \dots, T_n
T0,T1,…,Tn中选择最优子树
T
α
T_\alpha
Tα.