决策树还表示给定特征条件下类的条件概率分布。这一条件概率分布定义在特征空间的一个划分上。将特征空间划分为互不相交的单元或是区域,并在每个单元定义一个类的概率分布就构成了一个条件概率分布。
决策树中的一条路径对应于划分中的一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。
假设 X 表示特征的随机变量,Y 是表示类的随机变量,那么这个条件概率根部可以表示为 P(Y|X)。X取决于给定划分下的集合,Y 取决于类的集合。各个叶节点(单元)上的条件概率旺旺偏向某一个类,也就是属于某一类的概率比较大。决策树进行分类的时候就是将该节点的实例强行分到条件概率大的那一类去。
我们选择的条件概率模型应该不仅仅对训练数据有很好的拟合,而且对未知数据也应该有很好的预测
决策树学习用损失函数表示这一目标:
决策树学习的损失函数通常是正则化的极大似然函数。
决策树的学习策略是 以损失函数为目标函数的最小化问题。
采用常规方法进行构建的决策树可能会对训练数据有很好的分类效果,但是对未知的测试数据却不一定能起到相似的作用,也就是说很容易发生过拟合现象。因此我们需要对已经生成的树进行 剪枝处理,目的是让我们的决策树变得简单一些。也就是去掉过分细分的节点。
由于决策树表示一个条件概率分布,所以深浅不同的决策树对应着不同复杂度的概率模型 。决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择。
设有随机变量
(
X
,
Y
)
(X,Y)
(X,Y),联合概率密度分布为:
P
(
X
=
x
i
,
Y
=
y
i
)
=
p
i
j
,
i
=
1
,
2
,
.
.
.
,
m
P(X=x_i,Y=y_i)=p_{ij},\ \ \ i=1,2,...,m
P(X=xi,Y=yi)=pij, i=1,2,...,m
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X) 表示在已知随机变量
X
X
X 的条件下随机变量
Y
Y
Y 的不确定性。
随机变量
X
X
X 给定的条件下随机变量
Y
Y
Y 的条件上(conditional entropy)
H
(
Y
∣
X
)
\ H(Y|X)
H(Y∣X),定义为
X
X
X 给定的条件下
Y
Y
Y 的条件概率分布的熵对
X
X
X 的数学期望
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X)=\sum_{i=1}^{n}p_iH(Y|X=x_i)
H(Y∣X)=i=1∑npiH(Y∣X=xi)
信息增益
特征 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
(
D
∣
A
)
H(D|A)
H(D∣A) 之差称之为 互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类别与特征的互信息。
信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息赠一比(information gain ratio) 可以对这一问题进行校正。定义如下所示:
特征
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
∣
l
o
g
2
∣
D
i
∣
∣
D
∣
H_A(D)=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|}
HA(D)=−∑i=1n∣D∣∣Di∣log2∣D∣∣Di∣
决策树的剪枝
剪枝就是在已经生成的树上裁减掉一些子树或者是叶节点,并将其根节点或父节点作为新的叶节点,从而简化分类树的模型。
决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)或是代价函数(cost function)来实现。
设树
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) 为叶节点
t
t
t 上的经验熵,
α
≥
0
\alpha\geq0
α≥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
)
=
−
∑
k
N
t
k
N
t
l
o
g
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
l
o
g
N
t
k
N
t
C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum^{|T|}_{t=1}\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\geq0
α≥0 控制二者之间的影响。当
α
=
0
\alpha=0
α=0 时表示不考虑模型的复杂度,只考虑模型与训练数据的拟合程度。
而剪枝操作,就是在 α \alpha α 确定时,选择损失函数最小的模型,也就是损失函数最小的子树。
因此,可以看出,决策树的生成只考虑了通过提高信息增益(或是信息增益比)对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。
回归树的生成
假设 X , Y X,Y X,Y 分别为输入和输出变量,并且 Y Y Y 是连续变量,给定训练数据集:
D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) D={(x1,y1),(x2,y2),...,(x_N,y_N)} D=(x1,y1),(x2,y2),...,(xN,yN)
一个回归树对应着输入空间(也就是特征空间)的一个划分以及在划分的单元上的输出值。
假设已将输入空间划分为 M M M 个单元 R 1 , R 2 , . . . , R M R_1,R_2,...,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}^{M}c_mI(x\in R_m) f(x)=m=1∑McmI(x∈Rm)
当输入空间确定时,可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 ∑xi∈Rm(yi−f(xi))2 来表示对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。
可以知道
单元 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|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
(
j
)
≤
s
}
和
R
2
(
j
,
s
)
=
{
x
(
j
)
>
s
}
R_1(j,s)=\{x^{(j)}\leq s\}\ \ \ \ \ \ 和\ \ \ \ \ \ R_2(j,s)=\{x^{(j)}> s\}
R1(j,s)={x(j)≤s} 和 R2(j,s)={x(j)>s}
对于固定的切分变量可以找到最优的切分点
s
s
s,也就是:
m
i
n
j
,
s
[
m
i
n
c
1
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
m
i
n
c
2
∑
x
i
∈
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
min_{j,s}\left[min_{c1}\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2+min_{c2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2\right]
minj,s⎣⎡minc1xi∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2⎦⎤
其中:
c
^
1
=
a
v
e
(
y
i
∣
x
i
∈
R
1
(
j
,
s
)
)
和
c
^
2
=
a
v
e
(
y
i
∣
x
i
∈
R
2
(
j
,
s
)
)
\hat{c}_1=ave(y_i|x_i\in R_1(j,s))\ \ \ \ \ \ 和\ \ \ \ \ \ \hat{c}_2=ave(y_i|x_i\in R_2(j,s))
c^1=ave(yi∣xi∈R1(j,s)) 和 c^2=ave(yi∣xi∈R2(j,s))
遍历所有变量,找到最优的切分变量
j
j
j,构成一对
(
j
,
s
)
(j,s)
(j,s)。并依此将输入空间划分为两个区域。接着,对每个区域重复上述的划分过程,直到满足条件为止。
上面这样的回归树就是 最小二乘回归树。
CART 剪枝
CART 剪枝算法就是从“完全生长” 的决策树的底端减去一些子树,使得决策树变小(模型变简单),从而能够对位置数据有更准确的预测。
CART 剪枝算法有两步组成:
- 从生成算法产生的决策树 T 0 T_0 T0 的底端开始不断剪枝,知道 T 0 T_0 T0 的根节点,形成一个子树序列 { T 0 , T 1 , . . . , T N } \{T_0,T_1,...,T_N\} {T0,T1,...,TN};
- 通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择出最优的子树。
具体如下所示:
1. 剪枝,形成一个子树序列
在剪枝的过程中,计算子树的损失函数:
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_{\alpha}(T)=C(T)+\alpha|T|
Cα(T)=C(T)+α∣T∣
其中,
T
T
T 为任意子树,
C
(
T
)
C(T)
C(T) 是对训练数据的预测误差(如基尼指数),
∣
T
∣
|T|
∣T∣ 为子树的叶节点数,
α
≥
0
\alpha \geq 0
α≥0 为参数,
C
α
(
T
)
C_\alpha(T)
Cα(T) 为参数是
α
\alpha
α 的整体损失。参数
α
\alpha
α 用来权衡训练数据的拟合程度与模型的复杂度。
对于固定的 α \alpha α ,一定存在使损失函数 C α ( T ) C_\alpha(T) Cα(T) 最小的子树,将其表示为 T α T_\alpha Tα,因此可以说 T α T_\alpha Tα 在损失函数 C α ( T ) C_\alpha(T) Cα(T) 的情况下是最优的。
可以知道:
- 当 α \alpha α 偏大的时候,最优子树 T α T_\alpha Tα 偏小。
- 当 α \alpha α 偏小的时候,最优子树 T α T_\alpha Tα 偏大。
- 当 α = 0 \alpha =0 α=0 的时候,整体树是最优的;
- 当 $\alpha \rightarrow \infty $ 的时候,根节点组成的单节点树是最优的
可以证明,可以使用递归的方法对树进行剪枝
将 α \alpha α 从小增大, 0 = α 0 < α 1 < , . . . , < α n < + ∞ 0=\alpha_0<\alpha_1<,...,<\alpha_n<+\infty 0=α0<α1<,...,<αn<+∞,产生一系列的区间, [ α i , α i + 1 ) , i = 0 , 1... , n [\alpha_i,\alpha_{i+1}),i=0,1...,n [αi,αi+1),i=0,1...,n ;
剪枝得到的子数列对应着区间 [ α i , α i + 1 ) , i = 0 , 1... , n [\alpha_i,\alpha_{i+1}),i=0,1...,n [αi,αi+1),i=0,1...,n 的最优子序列 { T 0 , T 1 , . . . , T n } \{T_0,T_1,...,T_n\} {T0,T1,...,Tn},序列中的子树是嵌套的。
对
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)}{|T_t|-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 α 的值,产生新的区间。
2.在剪枝得到的子树序列 { T 0 , T 1 , . . . , T N } \{T_0,T_1,...,T_N\} {T0,T1,...,TN} 通过交叉验证产生最优的子树
具体的,利用独立的验证数据集,测试子树序列 { T 0 , T 1 , . . . , T N } \{T_0,T_1,...,T_N\} {T0,T1,...,TN} 中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认定为是最优的决策树。
因为在子树序列中,每棵子树 T 0 , T 1 , . . . , T N T_0,T_1,...,T_N T0,T1,...,TN 都对应一个参数 α 1 , α 2 , . . . , α n \alpha_1, \alpha_2,...,\alpha_n α1,α2,...,αn。所以,当最优子树 T k T_k Tk 选定后,对应的 α k \alpha_k αk 也就确定了,也就得到了最优的决策树。
缺失值数据的处理
对于数据缺失,主要面临两个问题:
- 如何在属性值缺失的情况下进行划分属性选择?
- 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
给定训练数据集 D D D 和属性 a a a,我们令 D ~ \tilde{D} D~ 表示在 D D D 中在属性 a a a 上没有缺失值的样本子集。
-
对于问题(1):
显然我们仅可以根据 D ~ \tilde{D} D~ 来判断属性 a a a 的优劣。
假定属性 a a a 有 V V V 个可取值 { a 1 , a 2 , . . . , a v } \{a^1,a^2,...,a^v\} {a1,a2,...,av},令 D ~ v \tilde{D}^v D~v 表示 D ~ \tilde{D} D~ 中在属性 a a a 上取值为 a v a^v av 的样本子集
D ~ k \tilde{D}^k D~k 表示 D ~ \tilde{D} D~ 中属于第 k k k 类 ( k = 1 , 2 , . . . , ∣ Y ∣ ) (k=1,2,...,\mathcal{|Y|}) (k=1,2,...,∣Y∣) 的样本子集,则显然有 D ~ = ∪ k = 1 ∣ ∣ Y ∣ ∣ D ~ k , D ~ = ∪ v = 1 ∣ ∣ V ∣ ∣ D ~ v \tilde{D}=\cup_{k=1}^{|\mathcal{|Y|}|}\tilde{D}^k,\tilde{D}=\cup_{v=1}^{|\mathcal{|V|}|}\tilde{D}^v D~=∪k=1∣∣Y∣∣D~k,D~=∪v=1∣∣V∣∣D~v
假定我们为每个样本 x x x 赋予一个权重 ω x \omega_x ωx,并进行定义:
ρ = ∑ x ∈ D ~ ω x ∑ x ∈ D ω x \rho=\frac{\sum_{x\in \tilde{D}}\omega_x}{\sum_{x\in {D}}\omega_x} ρ=∑x∈Dωx∑x∈D~ωxp ~ k = ∑ x ∈ D ~ k ω x ∑ x ∈ D ~ ω x , ( 1 ≤ k ≤ ∣ Y ∣ ) \tilde{p}_k=\frac{\sum_{x\in \tilde{D}_k}\omega_x}{\sum_{x\in \tilde{D}}\omega_x}, (1\leq k\leq|\mathcal{Y}|) p~k=∑x∈D~ωx∑x∈D~kωx,(1≤k≤∣Y∣)
r ~ v = ∑ x ∈ D ~ v ω x ∑ x ∈ D ~ ω x , ( 1 ≤ k ≤ ∣ Y ∣ ) \tilde{r}_v=\frac{\sum_{x\in \tilde{D}^v}\omega_x}{\sum_{x\in \tilde{D}}\omega_x}, (1\leq k\leq|\mathcal{Y}|) r~v=∑x∈D~ωx∑x∈D~vωx,(1≤k≤∣Y∣)
直观的看,对于属性 a a a, ρ \rho ρ 表示无缺失样本所占的比例, p ~ k \tilde{p}_k p~k 表示无缺失样本中第 k k k 类所占的比例, r ~ v \tilde{r}_v r~v 表示无缺失值样本中在属性 a a a 上取值 a v a^v av 的样本所占的比例。
基于上述的定义,我们可以将信息增益的计算式推广为:
G a i n ( D , a ) = ρ × G a i n ( D ~ , a ) = ρ × ( E n t ( D ~ ) − ∑ v = 1 V r ~ v E n t ( D ~ v ) ) Gain(D,a) =\rho \times Gain(\tilde{D},a)\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\rho \times \left(Ent(\tilde{D})-\sum_{v=1}^{V}\tilde{r}_vEnt(\tilde{D}^v)\right) Gain(D,a)=ρ×Gain(D~,a) =ρ×(Ent(D~)−v=1∑Vr~vEnt(D~v))
其中:
E n t ( D ~ ) = − ∑ k = 1 ∣ Y ∣ p ~ k l o g 2 p ~ k Ent(\tilde{D})=-\sum_{k=1}^{|\mathcal Y|}\tilde{p}_klog_2\tilde{p}_k Ent(D~)=−k=1∑∣Y∣p~klog2p~k -
对于问题(2)
如果样本 x x x 在划分属性 a a a 上的取值已知,则将 x x x 划入与其对应的子节点,且样本权重在子节点中保持为 ω x \omega_x ωx
如果未知,则将 x x x 同时划入所有子节点,且样本权重在与属性值 a v a^v av 对应的子节点中调整为 r ~ ⋅ ω x \tilde{r}·\omega_x r~⋅ωx。直观的看,就是让同一个样本以不同的概率划入到不同的子节点中去。
参考目录
- 周志华 《机器学习》
- 李航 统计学习方法
- 决策树算法原理