统计学习方法第5章【3】----决策树之CART算法

5.5 CART算法

分类与回归树(classification and regression,CART)模型是应用广泛的决策树学习算法。CART同样由特征选择、树的生成、剪枝组成,即可以用于分类,也可以用于回归。

CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”分支,右分支为取值为“否”的分支。决策树等价于递归地二分每个特征,将输入(即特征)空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。

CART算法由以下两步组成:

(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;

(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝标准。

5.5.1 CART生成

决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。

1.回归树的生成

假设X与Y分别为输入输出变量,并且Y是连续变量,给定训练数据集D=\left \{ \left ( x_{1} ,y_{1}\right ),\left ( x_{2} ,y_{2}\right ),...,\left ( x_{N} ,y_{N}\right ) \right \}考虑如何生成回归树。

一个回归树对应着输入空间的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为M个单元R_{1},R_{2},...,R_{M},并且在每个单元R_{m}上有一个固定的输出值c_{m},于是回归树模型可以表示为

f\left ( x \right )=\sum_{m=1}^{M}c_{m}I\left ( x\subseteq R_{m} \right )                                                (5.16)

当输入空间的划分确定时,可以用平方误差\sum_{x_{i}\in R_{m}}(y_{i}-f\left ( x_{i} \right ))来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。易知,单元R_{m}上的c_{m}的最优值\hat{c}_{m}R_{m}上的所有输入实例x_{i}对应的输出y_{i}的均值,即

\hat{c}_{m}=avg(y_{i}|x_{i}\in R_{m})                                                         (5.17)

问题是怎么对输入空间进行划分。这里采用启发式的方法,选择第j个变量x^{j}和它取的值s,作为切分变量和切分点,并定义两个区域:

R_{1}(j,s)=\left \{ x|x^{(j)}\leqslant s \right \}R_{2}(j,s)=\left \{ x|x^{(j)}> s \right \}                            (5.18)

然后寻找最优切分变量j和最优切分点s。具体地,求解

\underset{j,s}{min}\left [ \underset{c_{1}}{min} \sum_{x_{i}\in R_{1}(j,s)}(y_{i}-c_{1})^{2}+\underset{c_{2}}{min} \sum_{x_{i}\in R_{2}(j,s)}(y_{i}-c_{2})^{2}\right ]                  (5.19)                

对固定输入变量j可以找到最优切分点s。

\widehat{c}_{1}=ave(y_{i}|x_{i}\in R_{1}(j,s))      和    \widehat{c}_{2}=ave(y_{i}|x_{i}\in R_{2}(j,s))            (5.20)

遍历所有输入变量,找到最优的切分变量j,构成一个对(j,s)。依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件为止。这样就生成一颗回归树。这样的回归树称为最小二乘回归树。

算法5.5(最小二乘回归树生成算法)

输入:训练数据集D;

输出:回归树f(x)

在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:

(1)选择最优切分变量j与切分点s,求解

\underset{j,s}{min}\left [ \underset{c_{1}}{min} \sum_{x_{i}\in R_{1}(j,s)}(y_{i}-c_{1})^{2}+\underset{c_{2}}{min} \sum_{x_{i}\in R_{2}(j,s)}(y_{i}-c_{2})^{2}\right ]                   (5.21)

遍历变量j,对固定的切分变量j扫描切分点s,选择使式(5.21)达到最小的对(j,s)。

(2)用选定的(j,s)划分区域并决定相应的输出值:

R_{1}(j,s)=\left \{ x|x^{(j)}\leqslant s \right \}R_{2}(j,s)=\left \{ x|x^{(j)}> s \right \}

\hat{c}_{m}=avg(y_{i}|x_{i}\in R_{m})=\frac{1}{N_{m}}\sum_{x_{i}\in R_{m}(j,s)}y_{i} ,x_{i}\in R_{m},m=1,2

(3)继续对两个字区域调用步骤(1)(2),直至满足停止条件。

(4)将输入空间划分为M个区域R_{1},R_{2},...,R_{M},生成决策树:

f\left ( x \right )=\sum_{m=1}^{M}c_{m}I\left ( x\subseteq R_{m} \right )

2.分类树的生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

定义5.4(基尼系数) 分类问题中,假设有K个类,样本点属于第k类的概率为p_{k},则概率分布的基尼指数定义为

Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{K}p_{k}^{2}                   (5.22)

对于二类分类问题,若样本点属于第一个类的概率是p,则概率分布的基尼指数为

Gini(p)=2p(1-p)                                                   (5.23)

对于给定的样本集合D,基尼指数为

Gini(D)=1-\sum_{k=1}^{K}\left (\frac{|C_{k}|}{|D|} \right )^{2}                                      (5.24)

这里,C_{k}是D中属于第k类的样本子集,K是类的个数。

如果样本集合D根据特征A是否取某一可能值a被分割成D_{1}D_{2}两部分,即

D_{1}=\left \{ (x,y)\in D|A\left ( x \right ) =a\right \},D_{2}=D-D_{1}

Gini(D,A)=\frac{|D_{1}|}{|D|}Gini(D_{1})+\frac{|D_{2}|}{|D|}Gini(D_{2})           (5.25)

基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经过A=a分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。

算法5.6(CART生成算法)

输入:训练数据集D,停止计算条件

输出:CART决策树

根据训练数据集,从根节点开始,递归地对每个结点进行以下操作,构建二叉决策树:

(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼系数。此时,对每一个特征A,对其可能取的每一个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D_{1}D_{2}两部分,利用(5.22)计算A=a时的基尼指数。

(2)在所有可能的特征A以及他们所有可能的切点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。

(3)对两个子结点递归地调用(1)(2),直到满足停止条件。

(4)生成CART决策树。

算法停止计算的条件是结点中的样本个数小于预定阈值,或者样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多的特征。

5.5.2 CART剪枝

CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确地预测。CART剪枝算法由两步组成:首先从生成算法产生的决策树T_{0}底端开始不断剪枝,直到T_{0}的根结点,形成一个子树序列\left \{ T_{0},T_{1},...,T_{n}, \right \};然后通过交叉验证在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

1.剪枝,形成一个子树序列

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

C_{\alpha }\left ( T \right )=C\left ( T \right )+\alpha |T|                      (5.26)

其中,T为任意子树,C\left ( T \right )表示模型对训练数据的预测误差(如基尼指数),|T|表示子树叶结点的个数,\alpha \geqslant 0为参数,C_{\alpha }(T)为参数是\alpha时的子树T的整体损失。参数\alpha权衡训练数据的拟合程度与模型的复杂度。

对于固定的\alpha,一定存在使损失函数C_{\alpha }(T)最小的子树,将其表示为T_{\alpha }T_{\alpha }在损失函数下C_{\alpha }(T)最下的意义下是最优的。容易验证这样的最优子树是唯一的。\alpha大的时候,最优子树T_{\alpha }偏小;当\alpha小的时候,最优子树T_{\alpha }偏大。极端情况,\alpha=0时,整体树是最优的。当\alpha \rightarrow \infty时,根结点组成的单节点是最优的。

Breiman证明:可以使用递归的方法对树进行剪枝。将\alpha从小增大,0=\alpha _{0}<\alpha _{1}<...<\alpha _{n}<+\infty,产生一系列的区间[\alpha _{i},\alpha _{i+1}),i=0,1,...,n;剪枝得到的子树序列对应着区间\alpha \in [\alpha _{i},\alpha _{i+1}),i=0,1,...,n的最优子树序列\left \{ T_{0},T_{1},...,T_{n}, \right \},序列中的子树是嵌套的。

具体地,从整体树T_{0}开始剪枝。对T_{0}的任意内部结点t,以t为单结点树的损失函数是

C_{\alpha }\left ( t\right )=C\left ( t \right )+\alpha                           (5.27)

以t为根结点的子树T_{t}的损失函数是

C_{\alpha }\left ( T_{t} \right )=C\left ( T_{t} \right )+\alpha |T_{t}|                   (5.28)

\alpha=0及\alpha充分小时,有不等式

C_{\alpha }\left ( T_{t} \right )<C_{\alpha }\left ( t \right )                                  (5.29)

\alpha增大时,在某一\alpha

C_{\alpha }\left ( T_{t} \right )=C_{\alpha }\left ( t \right )                                   (5.30)

\alpha再增大时,不等式(5.29)反向。只要\alpha=\frac{C(t)-C(T_{t})}{|T_{t}|-1},T_{t}与t有相同的损失函数值,而t的结点少,因此t比T_{t}更可取,对T_{t}进行剪枝。

为此,对T_{0}中每一个内部结点t,计算

g(t)=\frac{C(t)-C(T_{t})}{|T_{t}|-1}                           (5.31)

它表示剪枝后整体损失函数减少的程度。在T_{0}中剪去g(t)最小的T_{t},将得到的子树作为T_{1},同时将减少的g(t)设为\alpha _{1}T_{1}为区间[\alpha _{1},\alpha _{2})的最优子树。

如此剪枝下去,直至得到根结点。在这一过程中,不断增加\alpha的值,产生新的区间。

2.在剪枝得到的子树序列T_{0},T_{1},...,T_{n}中通过交叉验证选取最优子树T_{\alpha }

具体地,利用独立的验证数据集,测试子树序列T_{0},T_{1},...,T_{n}中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树,在子树序列中,每颗子树T_{1},T_{2},...,T_{n}都对应与一个参数\alpha _{1},\alpha _{2},...,\alpha _{n}。所以,当最优子树T_{k}确定时,对应的\alpha _{k}也确定了,即得到最优决策树T_{\alpha }

算法5.7(CART剪枝算法)

输入:CART算法生成的决策树T_{0}

输出:最优决策树T_{\alpha }

(1)设k=0,T=T_{0}

(2)设\alpha =+\infty

(3)自上而下地对各内部结点t计算C(T_{t}),|T_{t}|以及

g(t)=\frac{C(t)-C(T_{t})}{|T_{t}|-1}

\alpha =min(\alpha ,g(t))

这里,T_{t}表示以t为根节点的子树,C(T_{t})是对训练数据的预测误差,|T_{t}|T_{t}的叶结点个数。

(4)对g(t)=\alpha的内部结点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T

(5)设k=k+1,\alpha _{k}=\alpha,T_{k}=T

(6)如果T_{k}不是由根结点及两个叶结点构成的树,则回到步骤(3);否则令T_{k}=T_{n}

(7)采用交叉验证法在子树序列T_{0},T_{1},...,T_{n}中选取最优子树

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值