决策树
模型:由节点和有向边组成的对实例进行分类的树形结构
策略:以损失函数为目标函数的最小化
算法:ID3、C4.5、CART
算法包含:特征选择、决策树的生成、决策树的剪枝
决策树的生成只考虑局部最优,剪枝则考虑全局最优
1.特征选择
通常特征选择的准则是信息增益或信息增益比
随机变量X的熵定义为
H
(
X
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
H\left ( X \right )=-\sum_{i=1}^{n}p_ilogp_i
H(X)=−i=1∑npilogpi
其中
p
i
p_i
pi为X在所有特征中的占比。熵越大,随机变量的不确定性就越大。从定义可验证
0
≤
H
(
X
)
log
n
0\leq H\left ( X \right )\log n
0≤H(X)logn
随机变量X给定的条件下随机变量Y的条件熵
H
(
Y
∣
X
)
H\left ( Y|X \right )
H(Y∣X)定义为
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H\left ( Y|X \right )=\sum_{i=1}^{n}p_iH\left ( Y|X=x_i\right )
H(Y∣X)=i=1∑npiH(Y∣X=xi) 当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和条件经验熵。
信息增益
特征A对训练集D的信息增益 g ( D , A ) g\left ( D,A\right ) g(D,A),定义为集合D的经验熵 H ( D ) H\left ( D\right ) H(D)和特征A给定条件下D的经验特征熵 H ( D / A ) H\left ( D/A\right ) H(D/A)之差,即 g ( D , A ) = H ( D ) − H ( D / A ) g\left ( D,A\right )=H\left ( D\right )-H\left ( D/A\right ) g(D,A)=H(D)−H(D/A) 一般地,熵 H ( D ) H\left ( D\right ) H(D)与条件熵 H ( D / A ) H\left ( D/A\right ) H(D/A)之差称为互信息。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。信息增益大的特征具有更强大的分类能力。
信息增益比
以信息增益作为划分训练数据集的特征,存在偏向与选择取值较多的特征的问题。使用信息增益比可以对这一问题进行校正。信息增比的定义为 g R ( D , A ) = g ( D , A ) H ( A ) g_R\left ( D,A\right )= \frac{g\left ( D,A\right )}{H\left ( A\right )} gR(D,A)=H(A)g(D,A)
2.ID3算法
输入:训练数据集D,特征集A,阈值ϵ
输出:决策树T
(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的信息增益小于阈值ϵ ,则置T为单结点树,并将D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回T;
(5) 否则,对
A
g
A_g
Ag的每一个可能值
a
i
a_i
ai,依
A
g
A_g
Ag=
a
i
a_i
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_g
Ag} 为特征集,递归地调用步(1)~(5),得到子树
T
i
T_i
Ti,返回
T
i
T_i
Ti;
3.C4.5算法
C4.5算法与ID3算法相似,C4.4算法对ID3算法进行了改进,C4.4在生成过程中,用信息增益比来选择特征。
4.决策树的剪枝
决策树的生成算法递归地产生决策树,直到不能继续下去为止。这样产生的数往往对训练数据的分类很准确,但对位置的测试数据却没那么准确,即容易过拟合。
在决策树中学习中,将已生成的树进行简化的过程称为剪枝(purning)。决策树的剪枝剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。
设数T的叶节点个数为|T|,t是数T的叶节点,该叶节点有
N
t
N_t
Nt个样本点,其中k类的样本点有
N
t
k
N_{tk}
Ntk个,k=1,2,3,…K,
H
t
(
T
)
H_t(T)
Ht(T)为叶节点t上的经验熵,
α
≥
0
\alpha \geq 0
α≥0为参数,则决策树的学习损失函数定义为
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_\alpha \left ( T \right )=\sum_{t=1}^{|T|}N_tH_t\left ( T \right )+\alpha |T|
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣其中经验熵为
H
t
(
T
)
=
−
∑
k
=
1
K
N
t
k
N
t
l
o
g
N
t
k
N
t
H_t\left ( T \right ) = -\sum_{k=1}^{K} \frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t}
Ht(T)=−k=1∑KNtNtklogNtNtk将损失函数中等号右端的第一项记为
C
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
=
−
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
l
o
g
N
t
k
N
t
C\left ( T \right )=\sum_{t=1}^{|T|}N_tH_t\left ( T \right )=-\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则可得损失函数
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha \left ( T \right )=C\left ( T \right )+\alpha |T|
Cα(T)=C(T)+α∣T∣
C
(
T
)
C\left ( T \right )
C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型复杂度,参数
α
≥
0
\alpha \geq 0
α≥0控制两者之间的影响。较大的
α
\alpha
α促使选择较简单的模型,较小的
α
\alpha
α促使选择较复杂的模型。
5.CART
分类与回归数(classification and regression tree,CART)模型是由Breiman等人在1984年提出,是应用广泛的决策树学习方法。CART同样由特征选择、树的生成及剪枝组成,即可以用于分类也可以用于回归。以下将用于分类与回归的树统称为决策树。
5.1基尼指数
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
分类问题中,假设有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}^{K}p_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2对于给定的样本集合D有
p
k
=
∣
C
k
∣
∣
D
∣
p_k=\frac{|C_k|}{|D|}
pk=∣D∣∣Ck∣其中
C
k
C_k
Ck是D中属于第k类的样本子集。
如果样本集合D根据特征A是否取某一可能值a被分割成
D
1
D_1
D1和
D
2
D_2
D2两部分,即
D
1
=
{
(
x
,
y
)
∈
D
∣
A
(
x
)
=
α
}
,
D
2
=
D
−
D
1
D_1=\left \{ \left ( x,y \right )\in D|A\left ( x \right )=\alpha \right \}, D_2 = D-D_1
D1={(x,y)∈D∣A(x)=α},D2=D−D1则在特征A的条件下,集合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\left ( D,A \right )=\frac{|D_1|}{|D|}Gini\left ( D_1 \right )+\frac{|D_2|}{|D|}Gini\left ( D_2 \right )
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2) 基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示A =a 分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也越大,这一点与熵相似。
5.2 CART分类树的生成算法
输入:训练数据集D,停止计算的条件;
输出:CART决策树;
根据训练数据集,从根节点开始,递归地对每个结点进行以下操作,构建二叉决策树:
(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D 1 D1D_1和D 2 D2D_2两部分,利用基尼指数计算公式计算。
(2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3)对两个子结点递归地调用(1),(2),直至满足停止条件。
(4)生成CART决策树
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值,或者没有更多特征。
5.2 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),\vert T_t\vert
C(Tt),∣Tt∣以及
α
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
\alpha(t) =\frac{C(t)-C(T_t)}{\vert T_t\vert-1}
α(t)=∣Tt∣−1C(t)−C(Tt)
α
=
m
i
n
(
α
,
α
(
t
)
)
\alpha = min (\alpha,\alpha(t))
α=min(α,α(t))这里,
T
t
T_t
Tt表示t为根结点的子树,
C
(
T
t
)
C(T_t)
C(Tt)是对训练数据的预测误差,
∣
T
t
∣
\vert T_t \vert
∣Tt∣是
T
t
T_t
Tt的叶结点个数。
(4)对
α
(
t
)
=
α
\alpha(t) = \alpha
α(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不是由根结点及两个叶结点构成的树,则回到步骤3;否则令
T
k
=
T
n
T_k = T_n
Tk=Tn。
(7)采用交叉验证法在子树序列
T
0
,
T
1
,
.
.
.
,
T
n
T_0,T_1,...,T_n
T0,T1,...,Tn中选取最优子树
T
α
T_{\alpha}
Tα