决策树模型与学习
决策树模型
叶子结点,内部节点,有向边
决策树的if-then规则
可以将决策树看作是一个if-then规则的集合,将决策树转换成为if-then规则的过程是由决策树的根结点到叶子结点的每一条路径构建一条规则。
决策树与条件概率分布
决策树学习
训练数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
D = \lbrace (x_1,y_1),(x_2,y_2),...,(x_N,y_N)\rbrace
D={(x1,y1),(x2,y2),...,(xN,yN)},其中
x
i
=
(
x
i
1
,
x
i
2
,
.
.
.
,
x
i
n
)
x_i = (x_i^1,x_i^2,...,x_i^n)
xi=(xi1,xi2,...,xin)为输入实例,n为特征个数,
y
i
∈
{
1
,
2
,
.
.
.
,
K
}
y_i\in \lbrace 1,2,...,K\rbrace
yi∈{1,2,...,K}为类标记,N为样本容量,决策树的目标是根据给定的训练集构建一个决策树模型,使它能够对实例进行正确的分类。
决策树学习用损失函数表示这一目标,用的损失函数通常是正则化的极大似然函数。
从所有的决策树中选取最优决策树是NP完全问题,所以现实中决策树的学习算法通常采用启发式算法,近似求解这一最优化问题,这样得到的决策树是次最优(sub-optimal)的。
总的而言,决策树算法主要包括特征选择,决策树的生成与决策树的剪枝过程。
特征选择
特征选择在于选取对训练数据具有分类能力的特征。通常特征成选择的准则是信息增益或者信息增益比
特征选择问题
信息增益
熵entropy(表示随机变量不确定性的度量):
P
(
X
=
x
i
)
=
p
i
,
i
=
1
,
2
,
3
,
.
.
.
,
n
P(X = x_i) = p_i ~,~i=1,2,3,...,n
P(X=xi)=pi , i=1,2,3,...,n
H
(
X
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X) = -\sum_{i=1}^np_i\log p_i
H(X)=−i=1∑npilogpi
由上面的公式可知,熵只依赖于X的分布,而与X的取值无关,所以,也可以将X的熵记做为
H
(
p
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(p) = -\sum_{i=1}^np_i\log p_i
H(p)=−∑i=1npilogpi,熵越大,随机变量的不确定性就越大。
条件熵:条件熵
H
(
Y
∣
x
)
H(Y|x)
H(Y∣x)表示在已知随机变量X的条件下随机变量Y的不确定性。定义为X给定条件下Y的条件概率分布的熵对X的数学期望:
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X) = \sum_{i=1}^np_iH(Y|X=x_i)
H(Y∣X)=i=1∑npiH(Y∣X=xi)
当熵和条件熵中的概率估计由数据得到时,所得到的熵与条件熵称之为经验熵与经验条件熵。
信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
定义:特征A对训练数据集D的信息增益
g
(
D
,
A
)
g(D,A)
g(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)
信息增益的算法::
input:训练数据集D,以及特征集合A
output:特征A对训练数据集D的信息增益
g
(
D
∣
A
)
g(D|A)
g(D∣A)
- 计算数据集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∣ - 计算特征A对数据集D的经验条件熵H(D|A)
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) H(D|A) = \sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i) H(D∣A)=i=1∑n∣D∣∣Di∣H(Di) - 计算信息增益
g ( D ∣ A ) = H ( D ) − H ( D ∣ A ) g(D|A) = H(D) - H(D|A) g(D∣A)=H(D)−H(D∣A)
信息增益比
以信息增益作为划分数据集的特征,存在偏向于选择值较多的特征的问题,使用信息增益比可以对这一问题进行校正。这时特征选择的另一个准则。
特征A对训练数据集D的信息增益比
g
R
(
D
,
A
)
g_R(D,A)
gR(D,A)定义为其信息增益
g
(
D
∣
A
)
g(D|A)
g(D∣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)
其中,n是特征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算法
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归的构建决策树。
input:训练数据集D,特征集A,阈值
ϵ
\epsilon
ϵ
output:决策树T
- 若D中所有的实例属于同一类 C k C_k Ck,则T为单节点树,并将类 C k C_k Ck作为该节点的类标记,返回T。
- 若 A = ∅ A=\emptyset A=∅,则T为单节点树,并将D中的实例数最大的类 C k C_k Ck作为该节点的标记,返回T。
- 否则,按照信息增益的算法计算A中各个特征对D的信息增益,选择信息增益最大的特征 A g A_g Ag
- 如果 A g A_g Ag的信息增益小于 ϵ \epsilon ϵ,则T为单节点树,并将D中的实例数最大的类 C k C_k Ck作为该节点的标记,返回T。
- 否则,对 A g A_g Ag的每一个可能的值 a i a_i ai,按按照 A g = a i A_g = a_i Ag=ai将D分割为若干个非空的子集 D i D_i Di,将 D i D_i Di中实例数最大的类做标记,构建子节点,由子节点构成树T,返回T。
- 对第i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\lbrace A_g\rbrace A−{Ag}为特征集,递归的调用(1)~(5),得到子树 T i T_i Ti,返回 T i T_i Ti
C4.5生成算法
相比于ID3算法,C4.5生成算法采用信息增益比来选择特征。
input:训练数据集D,特征集A,阈值
ϵ
\epsilon
ϵ
output:决策树T
- 若D中所有的实例属于同一类 C k C_k Ck,则T为单节点树,并将类 C k C_k Ck作为该节点的类标记,返回T。
- 若 A = ∅ A=\emptyset A=∅,则T为单节点树,并将D中的实例数最大的类 C k C_k Ck作为该节点的标记,返回T。
- 否则,按照信息增益的算法计算A中各个特征对D的信息增益比,选择信息增益最大的特征 A g A_g Ag
- 如果 A g A_g Ag的信息增益小于 ϵ \epsilon ϵ,则T为单节点树,并将D中的实例数最大的类 C k C_k Ck作为该节点的标记,返回T。
- 否则,对 A g A_g Ag的每一个可能的值 a i a_i ai,按按照 A g = a i A_g = a_i Ag=ai将D分割为若干个非空的子集 D i D_i Di,将 D i D_i Di中实例数最大的类做标记,构建子节点,由子节点构成树T,返回T。
- 对第i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\lbrace A_g\rbrace A−{Ag}为特征集,递归的调用(1)~(5),得到子树 T i T_i Ti,返回 T i T_i Ti
决策树的剪枝
决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。
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∣
树T的节点个数为|T|,t是树T的叶子结点,该叶子结点有
N
t
N_t
Nt个样本点,其中k类的样本点有
N
t
k
N_{tk}
Ntk
经验熵:
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
)
=
∑
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}}{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∣
input:生成算法产生的整个决策树T,参数
α
\alpha
α
output:修剪后的子树
T
α
T_{\alpha}
Tα
- 计算每一个节点的经验熵
- 递归的从树的叶节点向上回缩
- 返回2,直到不能继续为止,得到 T α T_{\alpha} Tα
CART算法
classification and regression tree 分类与回归树
CART生成
回归树的生成
最小二乘回归树生成算法:
input:训练数据集D
output:回归树
f
(
x
)
f(x)
f(x)
在训练数据集所在的输入空间中,递归的将每一个区域划分称为两个子区域并决定每一个子区域的输出值,构建二叉决策树
- 选择最优切分变量j与切分点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-c1)^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]
c m = c m ^ = a v e ( y i ∣ x i ∈ R m ) c_m = \hat{c_m} = ave(y_i|x_i\in R_m) cm=cm^=ave(yi∣xi∈Rm)
遍历变量j,对固定的切分变量j扫描切分点s,使得上面的值最小的(j,s) - 用选定的(j,s)划分区域并决定相应的输出值
R 1 ( j , s ) = { x ∣ x j < = s } , R 2 ( j , s ) = { x ∣ x j > s } R_1(j,s) = \lbrace x|x^j<=s\rbrace ~,~R_2(j,s) = \lbrace x|x^j>s\rbrace R1(j,s)={x∣xj<=s} , R2(j,s)={x∣xj>s} - 继续用两个区域调用1,2,直到满足条件
- 将输入空间划分成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∑Mcm^I(x∈Rm)
分类树的生成
基尼指数:
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}^Kp_k(1-p_k) = 1-\sum_{k=1}^Kp_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
集合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的条件下,集合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)
基尼指数表示集合D的不确定性,基尼指数Gini(D,A)表示经过A=a分割后D的不确定性,基尼指数越大,样本的不确定性也就越大,这一点与熵很相似。
CART生成算法:
input:训练数据集D,停止条件
output:CAR决策树
- 设节点的训练数据集为D,计算现有特征对数据集的基尼指数。此时,对每一个特征A,对其可能取得的每一个值a,根据样本点对A=a的测试为yes or no 将D分割称为2个
- 选择基尼指数最小的a
- 递归,直到不满足相应的条件
- 生成CAR决策树
CART剪枝
CART剪枝算法:
input:CART算法生成的决策树
T
0
T_0
T0
output:最优决策树
T
α
T_{\alpha}
Tα
- 设 k = 0 , T = T 0 k=0~,~T=T_0 k=0 , T=T0
- α = + ∞ \alpha = +\infty α=+∞
- 自下而上
g ( t ) = C ( t ) − C ( t t ) ∣ T t ∣ − 1 g(t) = \frac{C(t)-C(t_t)}{|T_t|-1} g(t)=∣Tt∣−1C(t)−C(tt)
α = min ( α , g ( t ) ) \alpha = \min(\alpha,g(t)) α=min(α,g(t)) - 剪枝
- k = k + 1 , α k = α , T k = T k=k+1,\alpha_k = \alpha,T_k = T k=k+1,αk=α,Tk=T
- 递归
- 交叉验证