文章目录
1. 决策树模型概述
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。
决策树学习通常包括3 个步骤:特征选择、决策树的生成和决策树的修剪。决策树学习常用的算法有ID3 、C4.5 与CART。
2. 特征选择
决策树在一个分支时会从众多属性中选择一个属性进行划分,一般是选择最优的属性进行划分,对最优的评判需要依靠一些指标来进行。我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点“纯度”越来越高。
2.1 信息熵
在这之前,我们先定义信息熵的概念,假设样本集合
D
D
D 中第
k
k
k 类样本所占的比例为
p
k
(
k
=
1
,
2
,
.
.
.
,
N
)
p_k(k=1,2,...,N)
pk(k=1,2,...,N) ,则
D
D
D 的信息熵定义为
E
n
t
(
D
)
=
−
∑
k
=
1
N
p
k
l
o
g
2
p
k
Ent(D)=-\sum_{k=1}^{N}p_klog_2p_k
Ent(D)=−k=1∑Npklog2pk
E
n
t
(
D
)
Ent(D)
Ent(D) 的值越小,则
D
D
D 的不确定性越高。
2.2 信息增益
假设离散属性
a
a
a 有
V
V
V 个可能的取值,若采用
a
a
a 进行划分时,会产生
V
V
V 个分支,每个分支包含了取值的所有样本,记其中一个分支为
D
v
D^v
Dv,可算出其信息熵,再考虑到每一个分支结点中的样本数不同,对其进行权重赋予
∣
D
v
∣
/
∣
D
∣
\lvert D^v \rvert /\lvert D \rvert
∣Dv∣/∣D∣,样本越多影响越大,所以属性
a
a
a 对样本集
D
D
D 划分的“信息增益”定义为
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac {\lvert D^v \rvert} {\lvert D \rvert}Ent(D^v)
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)信息增益越大,则使用属性
a
a
a 来进行划分所得的“纯度提升”越大,其中
D
D
D 是要进行本次划分计算的集合。
2.3 增益率
信息增益对可取值数目较多的属性有一定的偏好,为了减少这种影响,可使用增益率来作为指标,增益率如下所示
G
a
i
n
_
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}
Gain_ratio(D,a)=IV(a)Gain(D,a)其中
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
IV(a)=-\sum_{v=1}^V\frac {\lvert D^v \rvert} {\lvert D \rvert}log_2\frac {\lvert D^v \rvert} {\lvert D \rvert}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣称为属性
a
a
a 的固有值。
增益率对属性可能取值少的属性比较有偏好,所以一般是先从候选属性中找出信息增益高于平均水平的属性,再从中选择增益率高的。
3. 决策树生成
3.1 ID3算法
ID3 算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益, 选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一棵决策树。
ID3 算法只有树的生成,所以该算法生成的树容易产生过拟合。
具体例子在这里截取李航老师的《统计学习方法》来做理解:
3.2 C4.5生成算法
C4.5 算法与ID3 算法相似, C4.5 算法对ID3 算法进行了改进。C4.5 在生成的过程中,用信息增益比来选择特征,除此之外没有不同
4. 决策树剪枝
决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。
剪枝时可以按照类似正则化的方法对决策树进行剪枝。
设决策树
T
T
T 的叶节点个数是
∣
T
∣
\vert T \vert
∣T∣ ,该叶节点有
N
t
N_t
Nt 个样本点,其中
k
k
k 的样本点有
N
t
k
N_{tk}
Ntk 个,
k
=
1
,
2
,
⋯
,
K
k=1,2,\cdots,K
k=1,2,⋯,K ,
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}^{\vert T \vert}N_tH_t(T)+ \alpha \vert T \vert
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在损失函数中,将
C
α
(
T
)
C_{\alpha}(T)
Cα(T) 等式的右端第一项可以记作
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}^{ 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}(T)=C(T)+ \alpha \vert T \vert
Cα(T)=C(T)+α∣T∣
C
(
T
)
C(T)
C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,
∣
T
∣
\vert T \vert
∣T∣表示模型复杂度,参数
α
\alpha
α 控制两者之间的影响。较大的
α
\alpha
α 促使选择较简单的模型,较小的
α
\alpha
α 促使选择较复杂的模型。
α
=
0
\alpha=0
α=0 意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。
剪枝, 就是当 α \alpha α 确定时,选择损失函数最小的模型,即损失函数最小的子树。当 α \alpha α 值确定时,子树越大,往往与训练数据的拟合越好,但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。损失函数正好表示了对两者的平衡。
5. CART算法
5.1 CART概述
分类与回归树(CART) 模型是应用广泛的决策树学习方法。CART 同样由特征选择、树的生成及剪枝组成,既可以用千分类也可以用千回归。以下将用于分类与回归的树统称为决策树。
决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index) 最小化准则,进行特征选择,生成二叉树。
5.1 CART回归树生成
假设 X = { x 1 , x 2 , ⋯ , x n } X=\{x_1,x_2,\cdots,x_n\} X={x1,x2,⋯,xn} 与 Y = { y 1 , y 2 , ⋯ , y n } Y=\{y_1,y_2,\cdots,y_n\} Y={y1,y2,⋯,yn}分别为输入和输出变量,并且 Y Y Y 是连续变量, X X X 是 n n n 维的,设 x i x_i xi 有 k k k 个特征,为 d 1 , d 2 , ⋯ , d k d_1,d_2, \cdots, d_k d1,d2,⋯,dk ,将输入的序列 ( x i , y i ) (x_i,y_i) (xi,yi) 按照 y i {y_i} yi 的顺序进行排列。
(1) 遍历每个特征
d
h
d_h
dh ,以及每个取值
s
s
s ,计算每个切分点
(
d
h
,
y
i
)
(d_h, y_i)
(dh,yi) 的损失函数,选择损失函数最小的切分点,损失函数如下
m
i
n
d
h
,
s
[
m
i
n
c
1
∑
x
i
∈
R
1
(
d
h
,
s
)
(
y
i
−
c
1
)
2
+
m
i
n
c
2
∑
x
i
∈
R
2
(
d
h
,
s
)
(
y
i
−
c
2
)
2
]
\mathop{min}\limits_{d_h,s} \left[\mathop{min}\limits_{c_1} \sum_{x_i \in R_1(d_h,s)}(y_i-c_1)^2+ \mathop{min}\limits_{c_2} \sum_{x_i \in R_2(d_h,s)}(y_i-c_2)^2 \right]
dh,smin⎣
⎡c1minxi∈R1(dh,s)∑(yi−c1)2+c2minxi∈R2(dh,s)∑(yi−c2)2⎦
⎤其中
R
1
,
R
2
R_1,R_2
R1,R2 为切分点划分的两个区域,
c
1
,
c
2
c_1,c_2
c1,c2 定义如下:
c
1
=
1
N
1
∑
x
i
∈
R
1
y
i
,
c
2
=
1
N
2
∑
x
i
∈
R
2
y
i
c_1= \frac{1}{N_1} \sum_{x_i \in R_1}y_i,c_2= \frac{1}{N_2} \sum_{x_i \in R_2}y_i
c1=N11xi∈R1∑yi,c2=N21xi∈R2∑yi其中
N
1
,
N
2
N_1,N_2
N1,N2 分别为
R
1
,
R
2
R_1,R_2
R1,R2 中序列的个数。
(2) 每个区域的预测值是所有样本
y
y
y 值的均值;
(3) 对每个区域重复(1)(2)步骤直至不能划分;
(4) 最后将空间划分为
R
1
,
R
2
,
⋯
,
R
m
R_1,R_2, \cdots,R_m
R1,R2,⋯,Rm,
c
i
c_i
ci 为区域
i
i
i 的输出值的平均值,生成决策树
f
(
x
)
=
∑
i
=
1
m
c
i
I
(
x
∈
R
i
)
f(x)= \sum_{i=1}^{m}c_iI(x \in R_i)
f(x)=i=1∑mciI(x∈Ri)
5.2 CART分类树生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
数据集
D
D
D 的纯度可以用基尼值来进行度量,设
p
k
p_k
pk 为第
k
k
k 个类别的比例,即
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
N
p
k
2
Gini(D)=1-\sum_{k=1}^Np_{k}^2
Gini(D)=1−k=1∑Npk2基尼值越小,数据集的纯度越高。
假设离散属性
a
a
a 有
V
V
V 个可能的取值,若采用
a
a
a 进行划分时,会产生
V
V
V 个分支,每个分支包含了取值的所有样本,记其中一个分支为
D
v
D^v
Dv,对属性
a
a
a 进行基尼指数的定义可表示为
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
G
i
n
i
(
D
v
)
Gini\_index(D,a)=\sum_{v=1}^V\frac {\lvert D^v \rvert} {\lvert D \rvert}Gini(D^v)
Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)一般情况,选择使得划分后基尼指数最小的属性作为最优的划分属性。
算法如下:
输入:训练数据集
D
D
D, 停止计算的条件;
输出:
C
A
R
T
CART
CART 决策树。
(1) 设结点的训练数据集为
D
D
D, 计算现有特征对该数据集的基尼指数。此时,对每一个特征
A
A
A, 对其可能取的每个值
a
a
a, 根据样本点对
A
=
a
A=a
A=a 的测试为“是”或“否",将
D
D
D 分割成
D
1
D_1
D1 和
D
2
D_2
D2 两部分,计算
A
=
a
A=a
A=a 时的基尼指数。
(2) 在所有可能的特征
A
A
A 以及它们所有可能的切分点
a
a
a 中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3) 对两个子结点递归地调用(1), (2) ,直至满足停止条件。
(4) 生成
C
A
R
T
CART
CART 决策树。.
算法停止计算的条件是结点中的样本个数小千预定阙值,或样本集的基尼指数小于预定阙值(样本基本属于同一类),或者没有更多特征。
例题如下:
5.3 CART剪枝
C A R T CART CART 剪枝算法由两步组成:首先从生成算法产生的决策树 T 0 T_0 T0 底端开始不断剪枝,直到 T 0 T_0 T0 的根结点,形成一个子树序列 { T 0 , T 1 , ⋯ , T n } \{T_0,T_1,\cdots,T_n \} {T0,T1,⋯,Tn} ;然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
从整体树
T
0
T_0
T0 开始剪枝。对
T
0
T_0
T0 的任意内部结点
t
t
t, 以
t
t
t 为单结点树的损失函数是
C
α
(
t
)
=
C
(
t
)
+
α
C_{\alpha}(t)=C(t)+ \alpha
Cα(t)=C(t)+α以
t
t
t 为根结点的子树
T
t
T_t
Tt 的损失函数是
C
α
(
T
t
)
=
C
(
T
t
)
+
α
∣
T
t
∣
C_{\alpha}(T_t)=C(T_t)+ \alpha \vert T_t \vert
Cα(Tt)=C(Tt)+α∣Tt∣当
α
=
0
\alpha= 0
α=0 及
α
\alpha
α 充分小时,有不等式
C
α
(
t
)
>
C
α
(
T
t
)
C_{\alpha}(t)>C_{\alpha}(T_t)
Cα(t)>Cα(Tt)随着
α
\alpha
α 的增大,在某一刻有
C
α
(
t
)
=
C
α
(
T
t
)
C_{\alpha}(t)=C_{\alpha}(T_t)
Cα(t)=Cα(Tt)此时有
α
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
\alpha = \frac{C(t)-C(T_t)}{ \vert T_t \vert - 1}
α=∣Tt∣−1C(t)−C(Tt)为此,对
T
0
T_0
T0 的每一个内部节点
t
t
t ,计算
g
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
g(t) = \frac{C(t)-C(T_t)}{ \vert T_t \vert - 1}
g(t)=∣Tt∣−1C(t)−C(Tt)它表示剪枝后整体损失函数减少的程度。在
T
0
T_0
T0 中剪去
g
(
t
)
g(t)
g(t) 最小的
T
t
T_t
Tt, 将得到的子树作为
T
1
T_1
T1 ,同时将最小的
g
(
t
)
g(t)
g(t) 设为
α
1
\alpha_1
α1 。
T
1
T_1
T1 为区间
[
α
1
,
α
2
)
[\alpha_1,\alpha_2)
[α1,α2) 的最优子树。如此剪枝下去,直至得到根结点。在这一过程中,不断地增加
α
\alpha
α 的值,产生新的区间。
利用独立的验证数据集,测试子树序列 T 0 , T 1 , ⋯ , T n T_0,T_1,\cdots,T_n T0,T1,⋯,Tn 中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树,每一棵子树都对应着一个参数 α 0 , α 1 , ⋯ , α n \alpha_0,\alpha_1,\cdots,\alpha_n α0,α1,⋯,αn ,当最优子树 T k T_k Tk 确定时,对应的 α k \alpha_k αk 也确定了,即得到最优决策树 T α T_{\alpha} Tα 。
故 C A R T CART 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), \vert T_t \vert
C(Tt),∣Tt∣以及
g
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
α
=
m
i
n
(
α
,
g
(
t
)
)
\begin{align} g(t) &= \frac{C(t)-C(T_t)}{ \vert T_t \vert - 1} \notag \\ \alpha &= min(\alpha,g(t))\notag \end{align}
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
∣
\vert T_t \vert
∣Tt∣ 是
T
t
T_t
Tt 的叶结点个数;
(4) 对
g
(
t
)
=
a
g(t) = a
g(t)=a 的内部结点
t
t
t 进行剪枝,并对叶结点
t
t
t 以多数表决法决定其类,得到树
T
T
T 。
(5) 设
k
=
k
+
1
,
α
k
=
a
,
T
k
=
T
k = k + 1, \alpha_k = a, T_k = T
k=k+1,αk=a,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,\cdots,T_n
T0,T1,⋯,Tn 中选取最优子树
T
α
T_{\alpha}
Tα 。