1 什么是CART

CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住一下关键点:

(1) CART既能是分类树,又能是回归树

(2) CART是分类树时,采用GINI指数作为节点分裂的依据;当CART是回归树时,采用样本的最小方差作为节点分裂的依据。

(3) CART是一棵二叉树

分类树的作用是通过一个对象的特征来预测该对象所属的类别,而回归树的目的是根据一个对象的信息预测该对象的属性,并以数值表示。

CART既能是分类树,也能是回归树。预测一个人是否已婚,则是分类树;预测一个人的年龄,则是回归树。

2 CART如何选择分裂的属性

分裂的目的是为了能够让数据变纯洁,使决策树输出的结果更接近真实值。如果是分类树,CART采用GINI指数衡量节点纯度;如果是回归树,采用样本方差衡量节点纯度。

GINI指数:

增强回归树 绘制交互作用 回归树cart_增强回归树 绘制交互作用

回归方差:

增强回归树 绘制交互作用 回归树cart_数据_02

方差越大,表示该节点的数据越分散,预测的效果就越差,如哦一个节点的所有数据都相同,那么方差就为0。因此,无论是分类树还是回归树,CART都选择使得GINI或回归方差最小的属性作为分裂方案。

3 例子讲解

接下来将以一个实际的例子对CART进行介绍:

增强回归树 绘制交互作用 回归树cart_回归树_03

分类树和回归树是怎么做决策的,假设我们构建了两颗决策树分别预测用户是否已婚和实际的年龄:

增强回归树 绘制交互作用 回归树cart_回归树_04

图1是一棵分类树,图2是一棵回归树

CART如何分裂成一棵二叉树:

节点的分裂分为两种情况,连续型的数据和离散型的数据。

CART对连续型属性的处理与C4.5差不多,通过最小化分裂后的GINI指数或者样本方差寻找最优分割点,将节点一分为二。

对于离散型属性,理论上有多少个离散值就应该分裂成多少个节点。但是CART是一棵二叉树,每一次分裂,只会产生两个节点,怎么办?很简单,只要将其中一个离散值独立作为一个节点,其他的离散值生成另外一个节点即可。


4 回归树的生成

训练回归树其实和训练分类树没有本质不同,也是自上而下,不断分裂节点的过程。不同之处在于对节点分裂的分裂准则和分裂值的选择方法上。

设有训练数据集

增强回归树 绘制交互作用 回归树cart_元组_05

。我们直到决策树最终将数据元组划分到了多个叶子节点中,比如分类树的每个叶子就有一个类标号,作为元组的预测类。回归树的思路类似,我们将数据空间划分成了m个区域

增强回归树 绘制交互作用 回归树cart_回归树_06

,实际上就是将训练元组的分区。然后赋予每个区域一个固定的代表值

增强回归树 绘制交互作用 回归树cart_数据_07

(类似于分类树中的类标号),这样,回归树的模型可以表示成如下形式:

增强回归树 绘制交互作用 回归树cart_回归树_08

其中

增强回归树 绘制交互作用 回归树cart_增强回归树 绘制交互作用_09

,如果

增强回归树 绘制交互作用 回归树cart_数据_10

;否则,

增强回归树 绘制交互作用 回归树cart_数据_11

。公式含义是:先判断X属于哪个区域,然后返回这个区域的代表值。这样,我们可以写出对于某个区域R_i回归模型的损失函数:

增强回归树 绘制交互作用 回归树cart_数据_12

其中,g_i为这个区域的代表值(这里用g_i而不用C_i的原因是因为g_i是分裂中间的某个区域的代表制,而C_i是最终完成分裂之后的叶子节点的代表值),g_i的计算方法一般是这个区域中的元组的y值的均值,(取均值时,损失函数达到最优)

增强回归树 绘制交互作用 回归树cart_增强回归树 绘制交互作用_13

其中N_i为这个区域内数据元组的总数。初始时,所有的数据元组都在一个区域内,计算损失函数,如果计算得到的误差值太大,不能满足要求,则寻找最佳的分裂准则(属性)和分裂值将数据集一分为二。这里的关键在于怎样的分裂准则和分裂值对于回归树来说是最佳的。“最佳”指我按照这样的属性和属性值将数据集一分为二后,使得分裂得到的两个子区域的误差和最小。

综上所述,回归树的计算步骤如下:

1 初始时,将所有训练元组放置于根节点中,计算损失函数得到误差值,倘若误差大于事先定好的参数,那么执行下面2-4步子;

2 选择用于分裂区域的属性A和对应的属性值s,将当前节点的数据元组划分到以下两个区域R_1,R_2中。

增强回归树 绘制交互作用 回归树cart_增强回归树 绘制交互作用_14 s\};" title="R_1 = \{X|x_i \leq s\}; ~~~~ R_2 = \{X|x_i > s\};" style="visibility: visible; width: 136px;" data-type="block">

其中x_i为元组X中属性A的值。而选择分裂属性A以及属性值s的依据是使得分裂后的子区域误差值的和最小。即:

增强回归树 绘制交互作用 回归树cart_增强回归树 绘制交互作用_15

这一步具体执行的时候,我们遍历所有的属性以及每个属性的所有可能的划分值,分别计算他们划分数据元组之后的两个子区域的代表制y_1,y_2,这样就可以计算R_1,R_2的误差和,最终选择误差和最小的属性A和属性s,作为分裂依据。

3 剪枝。