决策树
前面介绍了决策树的一些知识,这里我们再来看一个CART模型。
CART算法
CART算法同样由两部分组成:决策树生成(生成的决策树要尽可能大),决策树剪枝(后剪枝)。其使用的特征选择标准是:基尼指数最小化准则。
CART生成
-
最小二乘回归树生成算法
- 输入:训练集 D D D
- 输出:回归树 f ( x ) f\left( x \right) 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 ] \mathop {\min }\limits_{j,s} \left[ {\mathop {\min }\limits_{{c_1}} \sum\limits_{{x_i} \in {R_1}\left( {j,s} \right)} {{{\left( {{y_i} - {c_1}} \right)}^2}} + \mathop {\min }\limits_{{c_2}} \sum\limits_{{x_i} \in {R_2}\left( {j,s} \right)} {{{\left( {{y_i} - {c_2}} \right)}^2}} } \right] 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,找到最小的 ( j , s ) \left(j,s\right) (j,s) - 用选定的
(
j
,
s
)
\left(j,s\right)
(j,s)划分区域并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } , R 2 ( j , s ) = { x ∣ x ( j ) > s } {R_1}\left( {j,s} \right) = \left\{ {x\left| {{x^{\left( j \right)}} \le s} \right.} \right\},\quad {R_2}\left( {j,s} \right) = \left\{ {x\left| {{x^{\left( j \right)}} > s} \right.} \right\} R1(j,s)={x∣∣∣x(j)≤s},R2(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 {{\hat c}_m} = \frac{1}{{{N_m}}}\sum\limits_{{x_i} \in {R_m}\left( {j,s} \right)} {{y_i}} \quad x \in {R_m}\quad m = 1,2 c^m=Nm1xi∈Rm(j,s)∑yix∈Rmm=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\left( x \right) = \sum\limits_{m = 1}^M {{{\hat c}_m}} I\left( {x \in {R_m}} \right) f(x)=m=1∑Mc^mI(x∈Rm)
- 选择最优切分变量
j
j
j和切分点
s
s
s,求解
-
CART生成
- 输入:训练集 D D D,停止计算的条件
- 输出:CART决策树
- 流程
- 设节点训练集为 D D D,计算现有特征的基尼指数。(对每个属性的每个取值按照“是”“否”分割成两部分,计算基尼指数)
- 在所有可能的特征 A A A及它们可能的切分点 a a a中,选择基尼指数最小的特征以及分割点生成两个子节点。
- 对两个子节点递归调用上面的步骤直到满足停止条件。
- 生成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 = + \infty α=+∞
- 自下而上地对各个结点
t
t
t计算
C
(
T
t
)
C\left( {{T_t}} \right)
C(Tt)、
∣
T
t
∣
\left| {{T_t}} \right|
∣Tt∣以及
g
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
g\left( t \right) = \frac{{C\left( t \right) - C\left( {{T_t}} \right)}}{{\left| {{T_t}} \right| - 1}}
g(t)=∣Tt∣−1C(t)−C(Tt)和
α
=
min
(
α
,
g
(
t
)
)
\alpha = \min \left( {\alpha ,g\left( t \right)} \right)
α=min(α,g(t))。
其中 T t T_t Tt为以 t t t为根节点的子树, C ( T t ) C\left( {{T_t}} \right) C(Tt)是对训练集的预测误差, ∣ T t ∣ {\left| {{T_t}} \right|} ∣Tt∣是 T t T_t Tt的叶节点个数。 - 自上向下访问内部节点 t t t,如果 g ( t ) = α g\left( t \right) = \alpha g(t)=α,进行剪枝,并对叶节点 t t t以表决法划分,得到 T T T
- 设 k = k + 1 k=k+1 k=k+1, α k = α \alpha_k=\alpha αk=α, T k = T T_k=T Tk=T
- 如果 T T T不是由根节点单独构成的树,则继续自上而下进行剪枝
- 采用交叉验证法在子树序列 T 0 , T 1 , . . . , T n T_0,T_1,...,T_n T0,T1,...,Tn中选出最优子树 T α T_{\alpha} Tα
参考文献
《统计学习方法》