读书笔记-统计学习方法-决策树
决策数模型与学习
定义 分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。
特征选择
**熵(entropy)**表示随机变量不确定行的度量。
设
X
X
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
X
X的熵定义为
H
(
X
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X)=-\sum_{i=1}^{n} p_i \log p_i
H(X)=−i=1∑npilogpi
其中,对数以2为底,熵的单位称作比特(bit);对数以
e
e
e为底,熵的单位称作纳特(nat)。
由定义可知,熵只依赖于
X
X
X的分布,而与
X
X
X的取值无关,所以也可将
X
X
X的熵记作
H
(
p
)
H(p)
H(p),即
H
(
p
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(p)=-\sum_{i=1}^{n} p_i \log p_i
H(p)=−i=1∑npilogpi
熵越大,随机变量的不确定性越大。
设有随机变量
(
X
,
Y
)
(X,Y)
(X,Y),其联合概率分布为
P
(
X
=
x
i
,
Y
=
y
i
)
=
p
i
j
,
i
=
1
,
2
,
.
.
.
,
n
;
j
=
1
,
2
,
.
.
.
,
m
P(X=x_i,Y=y_i)=p_{ij},i=1,2,...,n;j=1,2,...,m
P(X=xi,Y=yi)=pij,i=1,2,...,n;j=1,2,...,m
条件熵(conditional entropy)
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X) 表示已知随机变量
X
X
X条件下随机变量
Y
Y
Y的不确定性。定义为
X
X
X给定条件下
Y
Y
Y的条件概率分布的熵对
X
X
X的数学期望
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
,
p
i
=
P
(
X
=
x
i
)
,
i
=
1
,
2
,
.
.
.
,
n
H(Y|X)=\sum_{i=1}^{n} p_i H(Y|X=x_i),p_i=P(X=x_i),i=1,2,...,n
H(Y∣X)=i=1∑npiH(Y∣X=xi),pi=P(X=xi),i=1,2,...,n
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分布称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。
**信息增益(information gain)**表示得知特征 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|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)
一般地,熵
H
(
Y
)
H(Y)
H(Y)与条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X)之差称为互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
信息增益的算法
设训练数据集为 D D D, ∣ D ∣ |D| ∣D∣表示其样本容量,即样本个数。设有 K K K个类 C k C_k Ck, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K, ∣ C k ∣ |C_k| ∣Ck∣为属于类 C k C_k Ck的样本个数, ∑ k = 1 K ∣ C k ∣ = ∣ D ∣ \sum_{k=1}^K |C_k|=|D| ∑k=1K∣Ck∣=∣D∣。设特征 A A A有 n n n个不同的取值 { a 1 , a 2 , . . . , a n } \{a_1,a_2,...,a_n\} {a1,a2,...,an},根据特征 A A A的取值将 D D D划分为 n n n个子集 D 1 D_1 D1, D 2 D_2 D2,…, D n D_n Dn, ∣ D i ∣ |D_i| ∣Di∣为 D i D_i Di的样本个数, ∑ i = 1 n ∣ D i ∣ = ∣ D ∣ \sum_{i=1}^{n} |D_i|=|D| ∑i=1n∣Di∣=∣D∣。记子集 D i D_i Di中属于类 C k C_k Ck的样本的集合为 D i k D_{ik} Dik,即 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的样本个数。
输入:训练数据集 D D D和特征 A A A;
输出:特征 A A A对训练数据集 D D D的信息增益 g ( D , A ) g(D,A) g(D,A)。
-
计算数据集 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∣log2D∣Ck∣ -
计算特征 A A A对数据集 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(D∣A)
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ log 2 ∣ D i k ∣ ∣ D i ∣ H(D|A) = \sum_{i=1}^{n} \frac{|D_i|}{|D|}=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}\sum_{k=1}^{K}\frac{|D_{ik}|}{|D_i|} \log_2 \frac{|D_{ik}|}{|D_i|} H(D∣A)=i=1∑n∣D∣∣Di∣=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣ -
计算信息增益
信息增益比定义 特征
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算法
输入:训练数据集 D D D,特征集 A A A阙值 ε \varepsilon ε;
输出:决策树 T T T。
- 若 D D D中所有实例属于同一类 C k C_k Ck,则 T T T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回 T T T;
- 若 A = ∅ A=\varnothing A=∅,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;
- 否则,按信息增益算法计算 A A A中各特征对 D D D的信息增益,选择信息增益最大的特征 A g A_g Ag;
- 如果 A g A_g Ag的信息增益小于阙值 ε \varepsilon ε,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;
- 否则,对 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;
- 对第 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。
C4.5算法
输入:训练数据集 D D D,特征集 A A A阙值 ε \varepsilon ε;
输出:决策树 T T T。
- 若 D D D中所有实例属于同一类 C k C_k Ck,则 T T T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回 T T T;
- 若 A = ∅ A=\varnothing A=∅,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;
- 否则,按式(9)计算 A A A中各特征对 D D D的信息增益,选择信息增益最大的特征 A g A_g Ag;
- 如果 A g A_g Ag的信息增益小于阙值 ε \varepsilon ε,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;
- 否则,对 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;
- 对第 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。
决策树的剪枝
设树
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)为叶结点熵的经验熵,
α
≥
0
\alpha \ge 0
α≥0为参数,则决策树学习的损失函数可以定义为
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_{\alpha} (T) = \sum_{t=1}^{|T|} N_t H_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
在损失函数中,式(11)右端第一项记作
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_t H_t(T) = -\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} (T) = C(T) + \alpha |T|
Cα(T)=C(T)+α∣T∣
式中,
C
(
T
)
C(T)
C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,
∣
T
∣
|T|
∣T∣表示模型复杂度,参数
α
≥
0
\alpha\ge 0
α≥0控制两者之间的影响。
决策树学习的剪枝算法
输入:生成算法产生的整个树 T T T,参数 α \alpha α;
输出:修剪后的子树 T α T_{\alpha} Tα。
-
计算每个结点的经验熵
-
递归地从树的叶结点向上回缩
设一组叶结点回缩到其父结点之前与之后的整体树分别为 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),如果
C α ( T A ) ≤ C α ( T B ) C_{\alpha}(T_A) \le C_{\alpha}(T_B) Cα(TA)≤Cα(TB)
则进行剪枝,即将父结点变为新的叶结点 -
返回步2,直至不能继续为止。得到损失函数最小的子树 T α T_\alpha Tα
CART算法
分类与回归树(classification and regression tree,CART)假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。由以下两步组成:
- 决策树生成:基于训练集生成决策树,生成的决策树要尽量大;
- 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
CART生成
决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树。
最小二乘回归树生成算法
输入:训练数据集 D D D;
输出:回归树 f ( x ) f(x) f(x)。
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
-
选择最优切分变量 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,对固定的切分变量 j j j扫描切分点 s s s,选择使式(16)达到最小值的对 ( j , s ) (j,s) (j,s)。 -
用选定的对 ( j , s ) (j,s) (j,s)划分区域并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } , R 2 ( j , s ) = { x ∣ x ( j ) > s } c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 R_1 (j,s)=\{x|x^{(j)} \le s\},R_2(j,s)=\{x|x^{(j)} > s\} \\ \hat{c}_m = \frac{1}{N_m} \sum_{x_i \in R_m (j,s)} y_i,x\in R_m,m=1,2 R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}c^m=Nm1xi∈Rm(j,s)∑yi,x∈Rm,m=1,2 -
继续对两个子区域调用步骤1和2,直至满足停止条件
-
将输入空间划分为 M M M个区域 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM,生成决策树:
f ( x ) = ∑ m = 1 M c ^ m I ( x ∈ R m ) f(x) = \sum_{m=1}^M \hat{c}_m I(x\in R_m) f(x)=m=1∑Mc^mI(x∈Rm)
分类树的生成
基尼指数定义 分类问题中,假设有
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}^{K} p_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
这里,
C
k
C_k
Ck是
D
D
D中属于第
k
k
k类的样本子集,
K
K
K是类的个数。
如果样本集合
D
D
D根据特征
A
A
A是否取某一可能值
a
a
a被分割成
D
1
D_1
D1和
D
2
D_2
D2两部分,即
D
1
=
{
(
x
,
y
)
∈
D
∣
A
(
x
)
=
a
}
,
D
2
=
D
−
D
1
D_1=\{(x,y)\in D |A(x)=a\},D_2=D-D_1
D1={(x,y)∈D∣A(x)=a},D2=D−D1
则在特征
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)
基尼指数
G
i
n
i
(
D
)
Gini(D)
Gini(D)表示集合
D
D
D的不确定性,基尼指数
G
i
n
i
(
D
,
A
)
Gini(D,A)
Gini(D,A)表示经
A
=
a
A=a
A=a 分割后集合
D
D
D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。
CART生成算法
输入:训练数据集 D D D,停止计算的条件;
输出:CART决策树
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
-
设结点的训练数据集为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两部分,利用式(23)计算 A = a A=a A=a时的基尼指数。
-
在所有可能的特征 A A A以及他们所有可能的切分点 a a a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现有结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
-
对两个子结点递归地调用步骤1和2,直至满足停止条件
-
生成CART决策树。
算法停止的条件是结点中的样本个数小于预定阙值,或样本集的基尼指数小于预定阙值(样本基本属于同一类,或者没有更多特征)
CART剪枝
CART剪枝算法
输入:CART算法生成的决策树 T 0 T_0 T0;
输出:最优决策树 T α T_\alpha Tα。
-
设 k = 0 k=0 k=0, T = T 0 T=T_0 T=T0。
-
设 α = + ∞ \alpha = +\infin α=+∞。
-
自下而上地对各内部结点 t t t计算 C ( T t ) C(T_t) C(Tt), ∣ T t ∣ |T_t| ∣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的叶结点个数。 -
对 g ( t ) = α g(t)=\alpha g(t)=α的内部结点 t t t进行剪枝,并对叶结点 t t t以多数表决法决定其类,得到树 T T T。
-
设 k = k + 1 , α k = α , T k = T k=k+1,\alpha_k = \alpha,T_k = T k=k+1,αk=α,Tk=T。
-
如果 T k T_k Tk不是由根结点以及两个叶结点构成的树,则回到步骤2;否则令 T k = T n T_k=T_n Tk=Tn。
-
采用交叉验证法在子树序列 T 0 , T 1 , . . . , T n T_0,T_1,...,T_n T0,T1,...,Tn中选取最优子树 T α T_\alpha Tα。