决策树生成--CART算法

2017/3/30

CART算法

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

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

CART算法由以下两步组成:

1.决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大:
2.决策树剪枝:用验证数据集对己生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准.

CART生成

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

1.回归树的生成

假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集:
\(D={(x_1,y_1),(x_2,y_2),...(x_N,y_N)}\)
考虑如何生成回归树。

一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上 的输出值.假设己将输入空间划分为M个单元\(R_1,R_2,R_3...R_M\),并且在每个单元\(R_M\)上 有一个固定的输出值\(c_m\),于是回归树模型可表示为:

当输入空间的划分确定时,可以用平方误差\(\sum_{x_i\in R}(y_i-f(x_i))^2\)来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值.易知,单元\(R_m\)上的\(c_m\)的最优值\(\hat c_m\)是\(R_m\)上的所有输入实例\(x_i\)对应的输出\(y_i\)的均值,即:

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

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

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

便利所有输入变量,找到最优的切分变量j,构成一个对\((j,s)\).依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件为止.这样就生成一棵回归树。这样的回归树通常称为最小二乘回归树(least squares regression tree),现将算法叙述如下:

最小二乘回归树生成算法:

2.分类树的生成

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

基尼指数:

如果样本集合D根据特征A是否取某一可能值a被分割成\(D_1和D_2\)两部分,即:

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

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

CART生成算法:

下面继续用例题来说明该算法:

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

CART剪枝

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

1.剪枝,形成一个子树序列
在剪枝过程中,计算子树的损失函数:

其中,T为任意子树,C(T)为对训练数据的预测误差(如基尼指数),丨T丨为子树的叶结点个数,\(α \geq0\)为参数,\(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;\)的最优子树序列\( {T_0,T_1,...,T_n}\),序列中的子树是嵌套的.


CART剪枝算法: