0
点赞
收藏
分享

微信扫一扫

统计学习方法笔记: CART算法


感想

这个算法既可以做分类也可以做回归树,但是这篇文章没有给做回归的例子,回归的算法只是阐述了概念上的,但是做分类的算法阐述的比较详细,用的是基尼指数来创建树的,和前面的ID3和C4.5的建树过程有点区别。基尼系数不好懂,最好的方式是根据下面的例子手算一遍就明白了

介绍

分类与回归树(classification and regression tree,CART)模型由Breiman等人在1984年提出,是应用广泛的决策树学习方法。CART同样由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。以下将用分类与回归的树统称为决策树。

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

CART算法由以下两步组成:

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

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

1.1 CART生成

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


1.

回归树的生成


假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集


D={(x1,y1),(x2,y2),…,(xN,yN)}


考虑如何生成回归树。


一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为M个单元R1,R2,…,RM,并且在每个单元Rm上有一个固定的输出值cm,于是回归模型可表示为


统计学习方法笔记: CART算法_决策树

当输入空间的划分确定时,可以利用平方误差

统计学习方法笔记: CART算法_决策树_02

来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。易知,单元Rm上的cm的最优值c^m是Rm上的所有输入实例xi对应的输出yi的均值,即


统计学习方法笔记: CART算法_结点_03


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


统计学习方法笔记: CART算法_结点_04


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


统计学习方法笔记: CART算法_子树_05


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


统计学习方法笔记: CART算法_决策树_06


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

最小二乘回归树生成算法

输入:训练数据D;

输出:回归树f(x).

在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区


递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:

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


统计学习方法笔记: CART算法_决策树_07


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

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


统计学习方法笔记: CART算法_决策树_08


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

(4)    将输入空间划分为M个区域R1,R2,…,RM,生成决策树:


统计学习方法笔记: CART算法_决策树_09


2分类树的生成

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

基尼指数:分类问题中,假设有K个类,样本点属于第k类的概率为pk,则概率分布的基尼指数定义为


统计学习方法笔记: CART算法_子树_10


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



统计学习方法笔记: CART算法_决策树_11

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

统计学习方法笔记: CART算法_决策树_12

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

如果样本集合D根据特征A是否取某一可能值a被分割成D1和D2两部分,即

统计学习方法笔记: CART算法_结点_13

则在特征A的条件下,集合D的基尼指数定义为

统计学习方法笔记: CART算法_结点_14

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


统计学习方法笔记: CART算法_子树_15


上图显示二分类问题中基尼指数Gini(p),熵(单位比特)之半1/2H(p)和分类误差率的关系。横坐标表示概率p,纵坐标表示损失。可以看出基尼系数和熵之半的曲线很接近,都可以近似地代表分类错误率。



CART生成算法:

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

输出:CART决策树。

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

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

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

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

(4)    生成CART决策树。

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

下面用一个例子说明上述过程,我直接截图了

根据前面所给的训练数据集,应用CART算法生成决策树。


统计学习方法笔记: CART算法_结点_16


首先计算各特征的基尼指数,选择最优特征以及其最优切分点。用A1,A2,A3,A4表示年龄、有工作、有自己的房子和信贷情况4个特征,并以1,2,3表示年龄的值为青年、中年、老年,以1,2表示有工作和有自己的房子的值为是和否,以1,2,3表示信贷情况的值为非常好、好和一般。

统计学习方法笔记: CART算法_子树_17


1.2 CART剪枝

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


1.

剪枝,形成一个子树序列


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


统计学习方法笔记: CART算法_结点_18

其中,T为任意子树,C(T)对训练数据的预测误差(如基尼系数),|T|为子树的叶结点个数,α≥0为参数,Cα(T)为参数是α时的子树T的整体损失。参数α权衡训练数据的拟合程度与模型的复杂度。

对固定的α,一定存在使损失函数Cα(T)最小子树,将其表示为Tα.Tα在算是函数Cα(T)最小的意义下是最优的。容易验证这样的最优子树是唯一的。当α大的时候,最优子树Tα偏小;当α小的时候,最优子树Tα偏大。极端情况,当α=0时,整体树时最优的,当α→∞时,根结点组成的单结点树时最优的。

Breiman等人证明:可以用递归的方法对树进行剪枝。将α从小增大,0<α0<α1<…<αn<+.产生一系列的区间[αi, αi+1),i=0.1.2…n;剪枝得到的子树序列对应着区间α[αi,αi+1),i=0,1,..,n的最优子树序列{T0,T1,…,Tn},序列中的子树是嵌套的。

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


统计学习方法笔记: CART算法_子树_19


以t为根结点的子树Ti的损失函数是

Cα(Tt)=C(Tt)+α|Tt|

当α=0及充分小时,有不等式

Cα(Tt)<Cα(t)

当α增大时,在某一α有

Cα(Tt)=Cα(t)

当α再增大时,

Cα(Tt)>Cα(t)

只要α=(C(t)-C(Tt))/(|Tt|-1),Tt与t有相同的损失函数值,而t的结点少,因此t比Tt更可取,对Tt进行剪枝。

为此,对T0中每一内部结点t,计算

g(t)=(C(t)-C(Tt))/(|Tt|-1)

它表示剪枝后整体损失函数减少的程度。在T0中剪去g(t)最小的Tt,将得到的子树作为T1,同时将最小的g(t)设为α1.T1为区间[α1, α2)的最优子树。

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

2.在剪枝得到的子树序列T0,T1,…,Tn中通过交叉验证选取最优子树Tα。

具体地,利用独立的验证数据集,测试子树序列T0,T1,…,Tn中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子树序列中,每棵子树T0,T1,…,Tn都对应于一个参数α1,α2,…, αn。所以,当最优子树Tk确定时,对应的αk也确定了,即得到最优决策树Tα.


CART剪枝算法:

输入:CART算法生成的决策树T0;

输出:最优决策树Tα.

(1)   设k=0,T=T0.

(2)   设α=+∞

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

                                                 g(t)=(C(t)-C(Tt))/(|Tt|-1)

··                                               α=min⁡(α,g(t))

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

(4)   自伤而下地访问内部结点t,如果g(t)=α,进行剪枝,并对页结点t以多数表决法决定其类,得到树T.

(5)   设k=k+1,αk=α,Tk=T.

(6)   如果T不是由根结点单独构成的树,则回到步骤(4)

(7)   采用交叉验证法在子树序列T0,T1,…,Tn中选取最优子树Tα.

 

书上给的CART的例子没有什么代表性,我在网上找了一个好的例子:

统计学习方法笔记: CART算法_结点_20

在上述图中,属性有3个,分别是有房情况,婚姻状况和年收入,其中有房情况和婚姻状况是离散的取值,而年

   收入是连续的取值。拖欠贷款者属于分类的结果。

 

   假设现在来看有房情况这个属性,那么按照它划分后的Gini指数计算如下


统计学习方法笔记: CART算法_决策树_21


而对于婚姻状况属性来说,它的取值有3种,按照每种属性值分裂后Gini指标计算如下

统计学习方法笔记: CART算法_子树_22

最后还有一个取值连续的属性,年收入,它的取值是连续的,那么连续的取值采用分裂点进行分裂。如下

统计学习方法笔记: CART算法_决策树_23

看图就明白了哈,这个例子很好。我验证了第一个均值是65的,如果是连续值的话,要先求均值,然后求划分的gini系数,选择gini最小的均值为划分点


参考文献

[1]. ​​ 决策树之CART算法​​




举报

相关推荐

0 条评论