CART树及其剪枝学习笔记

CART树:分类与回归树

算法由两部分组成:

  • 决策树生成
  • 决策树剪枝

CART算法:

  • CART算法采用一种二分递归分割的技术,算法总是将当前样本集分割为两个字样本集。
  • 生成的决策树的每个非叶结点都只有两个分枝,因此CART算法生成的决策树是结构简洁的二叉树。
  • CART算法适用于样本特征的取值为是或非的场景。
  • 剪枝过程特别重要,所以在最优决策树生成过程中占有重要地位。有研究表明,剪枝过程的重要性要比树生成过程更为重要。

回归树的生成(平方误差):

  • Y Y Y是连续变量,给定训练数据集: D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } D=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \ldots,\left(x_{N}, y_{N}\right)\right\} D={(x1,y1),(x2,y2),,(xN,yN)}
  • 假设已将输入空间划分为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_{m} I\left(x \in R_{m}\right) f(x)=m=1McmI(xRm)
  • 平方误差来表示预测误差,用平方误差最小准则求解每个单元上的最优输出值: m i n ∑ x i ∈ R m ( y i − f ( x i ) ) 2 min\sum_{x_{i} \in R_{m}}\left(y_{i}-f\left(x_{i}\right)\right)^{2} minxiRm(yif(xi))2
  • R m R_{m} Rm上的 C m C_{m} Cm的最优值: c ^ m = ave ⁡ ( y i ∣ x i ∈ R m ) \hat{c}_{m}=\operatorname{ave}\left(y_{i} \mid x_{i} \in R_{m}\right) c^m=ave(yixiRm)

输入空间的划分:

  • 启发式:选择第 j j j维变量 x ( j ) x^{(j)} x(j)和它取的值 s s s,作为切分变量和切分点,定义两个区域: R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R_{1}(j, s)=\left\{x \mid x^{(j)} \leq s\right\} R1(j,s)={xx(j)s} R 2 ( j , s ) = { x ∣ x ( j ) > s } R_{2}(j, s)=\left\{x \mid x^{(j)}>s\right\} R2(j,s)={xx(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}\left[\min _{c_{1}} \sum_{x_{i} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right] minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]
  • 再对两个区域重复上述划分,直到满足停止条件。

分类树的生成(基尼指数):

基尼指数(类似于信息熵):分类问题中,假设有k个类,样本点属于k的概率 P k P_{k} Pk,则概率分布的基尼指数: Gini ⁡ ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 \operatorname{Gini}(p)=\sum_{k=1}^{K} p_{k}\left(1-p_{k}\right)=1-\sum_{k=1}^{K} p_{k}^{2} Gini(p)=k=1Kpk(1pk)=1k=1Kpk2

在特征A的条件下,集合D的基尼指数: Gini ⁡ ( D , A ) = ∣ D 1 ∣ ∣ D ∣ Gini ⁡ ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ Gini ⁡ ( D 2 ) \operatorname{Gini}(D, A)=\frac{\left|D_{1}\right|}{|D|} \operatorname{Gini}\left(D_{1}\right)+\frac{\left|D_{2}\right|}{|D|} \operatorname{Gini}\left(D_{2}\right) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)
下图展示出基尼指数可以描述分类误差率

在这里插入图片描述

CART分类树生成算法:

输入:训练数据集D

输出:CART分类树

从根节点开始,递归对每个结点操作

1.设结点数据集为D,对每个特征A,对其每个值a,根据样本点对A = a的测试为是或否,将D分为 D 1 D_{1} D1 D 2 D_{2} D2,计算 A = a A = a A=a的基尼指数。

2.在所有的特征A以及所有可能的切分点a中,选择基尼指数最小的特征和切分点,将数据集分配到两个子结点中。

3.对两个子结点递归调用1,2步骤。

4.生成CART树。

CART树剪枝:

剪枝过程中,计算子树的损失函数:

C α ( T ) = C ( T ) + α ∣ T ∣ C_{\alpha}(T)=C(T)+\alpha|T| Cα(T)=C(T)+αT 其中 C ( T ) C(T) C(T)为预测误差损失(拟合性), α ∣ T ∣ \alpha|T| αT为模型复杂度损失(泛化性)。

对固定的 a a a一定存在损失函数最小子树,表示为 T a T_{a} Ta,当 a a a变大时,最优子树 T a T_{a} Ta偏小, a = 0 a=0 a=0时,整体树最优, a a a趋于无穷大,单结点最优。

将a从小增大, 0 = α 0 < α 1 < … < α n < + ∞ 0=\alpha_{0}<\alpha_{1}<\ldots<\alpha_{n}<+\infty 0=α0<α1<<αn<+,最优子树序列 { T 0 , T 1 , … , T n } \left\{T_{0}, T_{1}, \ldots, T_{n}\right\} {T0,T1,,Tn},再用交叉验证选择最优子树。

CART剪枝算法:

具体:从 T 0 T_{0} T0开始剪枝,以 t t t为单结点树的损失函数: C α ( t ) = C ( t ) + α C_{\alpha}(t)=C(t)+\alpha Cα(t)=C(t)+α

以t为根节点的子树 T t T_{t} Tt的损失函数: C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_{\alpha}\left(T_{t}\right)=C\left(T_{t}\right)+\alpha\left|T_{t}\right| Cα(Tt)=C(Tt)+αTt

α = 0 \alpha=0 α=0 α \alpha α很小时, C α ( T t ) < C α ( t ) C_{\alpha}\left(T_{t}\right)<C_{\alpha}(t) Cα(Tt)<Cα(t)

不断增大 α \alpha α,当 C α ( T t ) = C α ( t ) C_{\alpha}\left(T_{t}\right)=C_{\alpha}(t) Cα(Tt)=Cα(t) α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \alpha=\frac{C(t)-C\left(T_{t}\right)}{\left|T_{t}\right|-1} α=Tt1C(t)C(Tt)

T t T_{t} Tt与t有相同损失函数值,但 t t t结点更少,所以剪枝 T t T_{t} Tt

剪枝形成子树序列:

T 0 T_{0} T0中每个内部结点t,计算 g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t)=\frac{C(t)-C\left(T_{t}\right)}{\left|T_{t}\right|-1} g(t)=Tt1C(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 ) \left[\alpha_{1}, \alpha_{2}\right) [α1,α2)的最优子树,如此剪下去,直到根节点,不断增加 α \alpha α的值,产生新的区间。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值