1 什么是CART
CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住一下关键点:
(1) CART既能是分类树,又能是回归树
(2) CART是分类树时,采用GINI指数作为节点分裂的依据;当CART是回归树时,采用样本的最小方差作为节点分裂的依据。
(3) CART是一棵二叉树
分类树的作用是通过一个对象的特征来预测该对象所属的类别,而回归树的目的是根据一个对象的信息预测该对象的属性,并以数值表示。
CART既能是分类树,也能是回归树。预测一个人是否已婚,则是分类树;预测一个人的年龄,则是回归树。
2 CART如何选择分裂的属性
分裂的目的是为了能够让数据变纯洁,使决策树输出的结果更接近真实值。如果是分类树,CART采用GINI指数衡量节点纯度;如果是回归树,采用样本方差衡量节点纯度。
GINI指数:
回归方差:
方差越大,表示该节点的数据越分散,预测的效果就越差,如哦一个节点的所有数据都相同,那么方差就为0。因此,无论是分类树还是回归树,CART都选择使得GINI或回归方差最小的属性作为分裂方案。
3 例子讲解
接下来将以一个实际的例子对CART进行介绍:
分类树和回归树是怎么做决策的,假设我们构建了两颗决策树分别预测用户是否已婚和实际的年龄:
图1是一棵分类树,图2是一棵回归树
CART如何分裂成一棵二叉树:
节点的分裂分为两种情况,连续型的数据和离散型的数据。
CART对连续型属性的处理与C4.5差不多,通过最小化分裂后的GINI指数或者样本方差寻找最优分割点,将节点一分为二。
对于离散型属性,理论上有多少个离散值就应该分裂成多少个节点。但是CART是一棵二叉树,每一次分裂,只会产生两个节点,怎么办?很简单,只要将其中一个离散值独立作为一个节点,其他的离散值生成另外一个节点即可。
https://blog.csdn.net/beauty0522/article/details/82726866
4 回归树的生成
训练回归树其实和训练分类树没有本质不同,也是自上而下,不断分裂节点的过程。不同之处在于对节点分裂的分裂准则和分裂值的选择方法上。
设有训练数据集。我们直到决策树最终将数据元组划分到了多个叶子节点中,比如分类树的每个叶子就有一个类标号,作为元组的预测类。回归树的思路类似,我们将数据空间划分成了m个区域,实际上就是将训练元组的分区。然后赋予每个区域一个固定的代表值(类似于分类树中的类标号),这样,回归树的模型可以表示成如下形式:
其中,如果;否则,。公式含义是:先判断X属于哪个区域,然后返回这个区域的代表值。这样,我们可以写出对于某个区域R_i回归模型的损失函数:
其中,g_i为这个区域的代表值(这里用g_i而不用C_i的原因是因为g_i是分裂中间的某个区域的代表制,而C_i是最终完成分裂之后的叶子节点的代表值),g_i的计算方法一般是这个区域中的元组的y值的均值,(取均值时,损失函数达到最优)
其中N_i为这个区域内数据元组的总数。初始时,所有的数据元组都在一个区域内,计算损失函数,如果计算得到的误差值太大,不能满足要求,则寻找最佳的分裂准则(属性)和分裂值将数据集一分为二。这里的关键在于怎样的分裂准则和分裂值对于回归树来说是最佳的。“最佳”指我按照这样的属性和属性值将数据集一分为二后,使得分裂得到的两个子区域的误差和最小。
综上所述,回归树的计算步骤如下:
1 初始时,将所有训练元组放置于根节点中,计算损失函数得到误差值,倘若误差大于事先定好的参数,那么执行下面2-4步子;
2 选择用于分裂区域的属性A和对应的属性值s,将当前节点的数据元组划分到以下两个区域R_1,R_2中。
其中x_i为元组X中属性A的值。而选择分裂属性A以及属性值s的依据是使得分裂后的子区域误差值的和最小。即:
这一步具体执行的时候,我们遍历所有的属性以及每个属性的所有可能的划分值,分别计算他们划分数据元组之后的两个子区域的代表制y_1,y_2,这样就可以计算R_1,R_2的误差和,最终选择误差和最小的属性A和属性s,作为分裂依据。
3 剪枝。