CART剪枝过程
CART的剪枝过程主要分为两部分,第一部分是剪枝,形成一个子树序列;第二部分是对剪枝得到的子树序列进行交叉验证,选取最优子树。第二部分容易理解,问题在于第一部分如何剪枝。首先介绍如何剪枝,再对其中的细节进行理解。
剪枝过程中所用的损失函数为:
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
α≥0
α≥0为参数,
C
α
(
T
)
C_\alpha(T)
Cα(T)为参数是α时的子树T的整体损失。
从整体树
T
0
T_0
T0开始剪枝,对
T
0
T_0
T0的任意内部结点
t
t
t,以
t
t
t为单结点树的损失函数为
C
α
(
t
)
=
C
(
t
)
+
α
C_α (t)=C(t)+α
Cα(t)=C(t)+α
以
t
t
t为根结点的子树
T
t
T_t
Tt的损失函数为
C
α
(
T
t
)
=
C
(
T
t
)
+
α
∣
T
t
∣
C_α (T_t )=C(T_t )+α|T_t |
Cα(Tt)=C(Tt)+α∣Tt∣
显然,在决策树中,对结点t进一步划分会降低误差,也就是
C
(
t
)
>
C
(
T
t
)
C(t)>C(T_t )
C(t)>C(Tt)
而由于划分使得
∣
T
t
∣
>
1
|T_t |>1
∣Tt∣>1
所以存在某一
α
α
α有
C
α
(
T
t
)
=
C
α
(
t
)
C_α (T_t )=C_α (t)
Cα(Tt)=Cα(t)
此时
α
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
α=\frac{C(t)-C(T_t )}{|T_t |-1}
α=∣Tt∣−1C(t)−C(Tt)
所以对于每一个内部结点
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进行剪枝,
g
(
t
)
g(t)
g(t)记为
α
1
α_1
α1,得到新的子树作为
T
1
T_1
T1,再在
T
1
T_1
T1上计算所有内部结点的
g
(
t
)
g(t)
g(t),重复上述过程,直到所得子树只有根结点和两个叶结点构成,过程中产生的子树序列
T
1
,
T
2
,
…
,
T
n
T_1,T_2,…,T_n
T1,T2,…,Tn对应参数序列
α
1
,
α
2
,
…
,
α
n
α_1,α_2,…,α_n
α1,α2,…,αn。
Q1: g ( t ) g(t) g(t)的含义:
C ( t ) − C ( T t ) C(t)-C(T_t ) C(t)−C(Tt)可以理解为在构建决策树的过程中,将单结点t进一步划分后训练数据上的误差下降量, ∣ T t ∣ − 1 |T_t |-1 ∣Tt∣−1则是进一步划分后决策树增加的结点数。因此, g ( t ) g(t) g(t)可以理解为将单结点t进一步划分后,平均每个结点带来的误差下降量,即每个结点的误差减小率。
Q2:为什么选择 g ( t ) g(t) g(t)最小的 T t T_t Tt进行剪枝?
上一个问题中知道了 g ( t ) g(t) g(t)的含义,另一方面,剪枝的目的在于减小决策树对训练数据的拟合程度,防止过拟合。因此,在尽量简化决策树的条件下,选择每个结点带来的误差下降量最少的子树进行剪枝显然是一个明智之举。也就是说,这个子树带来的“价值”弥补不了带来的“危害”,不如不要。
Q3:剪枝过程中选取的 α α α为什么一定是递增的?
《统计学习方法》P72说 0 < α 1 < α 2 < ⋯ < α n < ∞ 0<α_1<α_2<⋯<α_n<∞ 0<α1<α2<⋯<αn<∞,而剪枝过程中只选取每一轮算出的最小 g ( t ) g(t) g(t)(即 α α α),为何依次选取的 α α α一定是递增的呢?这分两种情况:
- 后一轮选取的剪枝点与前一轮选取剪枝点不在同一支上,则前一轮剪枝不会影响后一轮选中点的
g
(
t
)
g(t)
g(t)(即
α
α
α),该值显然不小于前一轮剪枝点的
g
(
t
)
g(t)
g(t)(即
α
α
α)。如图:
- 后一轮选取的剪枝点与前一轮选取的剪枝点在同一支上,如图:
则第一轮有:(上标表示轮次)
g 1 ( t 1 ) = C ( t 1 ) − C ( T t 1 ) ∣ T t 1 ∣ − 1 g^1 (t_1)=\frac{C(t_1 )-C(T_{t_1})}{|T_{t_1} |-1} g1(t1)=∣Tt1∣−1C(t1)−C(Tt1)
g 1 ( t 2 ) = C ( t 2 ) − C ( T t 2 1 ) ∣ T t 2 1 ∣ − 1 g^1 (t_2 )=\frac{C(t_2 )-C(T_{t_2}^1 )}{|T_{t_2}^1|-1} g1(t2)=∣Tt21∣−1C(t2)−C(Tt21)
第二轮有 g 2 ( t 2 ) = ( C ( t 2 ) − C ( T t 2 2 ) ) ( ∣ T t 2 2 ∣ − 1 ) g^2 (t_2)=\frac{(C(t_2 )-C(T_{t_2}^2 ))}{(|T_{t_2}^2 |-1)} g2(t2)=(∣Tt22∣−1)(C(t2)−C(Tt22))
第一轮的剪枝给第二轮选中点带来的影响可以表示为: ∣ T t 2 2 ∣ = ∣ T t 2 1 ∣ − ∣ T t 1 ∣ + 1 |T_{t_2}^2 |=|T_{t_2}^1 |-|T_{t_1} |+1 ∣Tt22∣=∣Tt21∣−∣Tt1∣+1
C ( T t 2 2 ) = C ( T t 2 1 ) + ( C ( t 1 ) − C ( T t 1 ) ) C(T_{t_2}^2 )= C(T_{t_2}^1 )+(C(t_1 )-C(T_{t_1} )) C(Tt22)=C(Tt21)+(C(t1)−C(Tt1))
即第一轮剪枝使得以 t 2 t_2 t2为根结点的子树的结点树减少,误差增大。(这很好理解,就是决策树构建的逆过程)
代入得
g 2 ( t 2 ) = ( C ( t 2 ) − C ( T t 2 1 ) ) − ( C ( t 1 ) − C ( T t 1 ) ) ( ∣ T t 2 1 ∣ − 1 ) − ( ∣ T t 1 ∣ − 1 ) g^2 (t_2)=\frac{(C(t_2 )-C(T_{t_2}^1))-(C(t_1 )-C(T_{t_1} ))}{(|T_{t_2}^1 |-1)-(|T_{t_1} |-1)} g2(t2)=(∣Tt21∣−1)−(∣Tt1∣−1)(C(t2)−C(Tt21))−(C(t1)−C(Tt1))
可以看出分子和分母的前一部分分别是 g 1 ( t 2 ) g^1 (t_2 ) g1(t2)的分子和分母,后一部分分别是 g 1 ( t 1 ) g^1 (t_1 ) g1(t1)的分子和分母,因为 g 1 ( t 2 ) > g 1 ( t 1 ) g^1 (t_2 )>g^1 (t_1 ) g1(t2)>g1(t1),所以
g 2 ( t 2 ) > g 1 ( t 2 ) > g 1 ( t 1 ) g^2 (t_2 )>g^1 (t_2 )>g^1 (t_1 ) g2(t2)>g1(t2)>g1(t1)
(这里可以通过转换为简单的代数问题进行证明,即:假设
e = b a ≥ c d = f e=\frac ba ≥ \frac cd=f e=ab≥dc=f
要证明
b − c a − d ≥ f \frac{b-c}{a-d}≥f a−db−c≥f
证:
b − c a − d = a e − d f a − d ≥ a e − d e a − d = e ≥ f \frac {b-c}{a-d}=\frac {ae-df}{a-d}≥\frac {ae-de}{a-d}=e≥f a−db−c=a−dae−df≥a−dae−de=e≥f
)
所以,第二轮选取的剪枝点的 g ( t ) g(t) g(t)(即 α α α)不小于第一轮选中的剪枝点的 g ( t ) g(t) g(t)(即α)。
Q4:为什么CART剪枝过程中的子树序列 T 1 , T 2 , … , T n T_1,T_2,…,T_n T1,T2,…,Tn分别是区间 α ∈ [ α i , α ( i + 1 ) ) α∈[α_i , α_{(i+1)} ) α∈[αi,α(i+1))的最优子树?
对于区间 α ∈ [ α i , α i + 1 ) α∈[α_i ,α_{i+1}) α∈[αi,αi+1),与当前子树不同有两种情况:
- 若剪去了
α
≥
α
i
+
1
α≥α_{i+1}
α≥αi+1的子树
T
t
T_t
Tt,有
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 > α i g(t)=\frac{C(t)-C(T_t )}{|T_t |-1}>α_i g(t)=∣Tt∣−1C(t)−C(Tt)>αi
即
C ( t ) − C ( T t ) > α i ( ∣ T t ∣ − 1 ) C(t)-C(T_t )>α_i (|T_t |-1) C(t)−C(Tt)>αi(∣Tt∣−1)
该子树的划分降低的误差量,大于增加结点数带来的损失增量,换句话说就是,这个子树值得保留,剪掉的话会使总体误差增大(这里总体误差公式中的 α ∈ [ α i , α i + 1 α∈[α_i , α_{i+1} α∈[αi,αi+1 ))。 - 若没有剪去了α<α_i的子树T_t,有
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 < α i g(t)=\frac{C(t)-C(T_t )}{|T_t |-1}<α_i g(t)=∣Tt∣−1C(t)−C(Tt)<αi
即
C ( t ) − C ( T t ) < α i ( ∣ T t ∣ − 1 ) C(t)-C(T_t )<α_i (|T_t |-1) C(t)−C(Tt)<αi(∣Tt∣−1)
该子树的划分降低的误差量,小于增加结点数带来的损失增量,换句话说就是,这个子树不值得保留,不剪掉的话会使总体误差增大(这里总体误差公式中的 α ∈ [ α i , α i + 1 ) α∈[α_i , α_{i+1}) α∈[αi,αi+1))。
综上,使用 α ∈ [ α i , α i + 1 ) α∈[α_i , α_{i+1} ) α∈[αi,αi+1)剪枝得到的子树 T i T_i Ti是该区域对应的最优子树。
Q5: α α α在一般决策树剪枝过程中的意义
在一般的决策树剪枝过程中, α α α是给定的参数,可以认为是自下而上,将平均结点降低误差小于 α α α的子树剪去。