CART-分类和回归树

之前在博文 决策树归纳 中,我介绍了用决策树进行分类的算法,包括ID3和C4.5。然而决策树不仅可以用来做数据分类,也可用于做数据回归。1984年Breiman,Friedman,Olshen等人出版了著作《Classification and Regression Trees》(简称CART)介绍了二叉决策树的产生。他们给出了用二叉决策进行树数据分类和回归的方法。

在阅读本文之前,我假设读者已经了解了我之前写的“决策树归纳”中的知识点,包括决策树的基本构建方法,以及相关术语。然后我会分别介绍用于分类和回归两类计算任务的CART。

1. 分类树

1.1 基本步骤

用于分类的CART的构建方法与之前ID3和C4.5算法是非常类似的,都是采用贪心策略,自顶而下分治地构建树。只不过此处判断分裂后子集元素“纯”度的标准不是ID3中用的信息增益,也不是C4.5中用的增益率,而是用基尼指数。

基尼指数按照如下的计算方式度量一个训练集 D D 不纯度

(1) G i n i ( D ) = 1 i = 1 m p i 2

其中 pi p i 是某个元组属于类 Ci C i 的概率,可以用 |Ci||D| | C i | | D | 估计。而经过分裂之后,可以依据新得到的子节点,按照如下公式计算分裂后的基尼指数。

GiniA(D)=j=1k|Dj||D|Gini(Dj)(2) (2) G i n i A ( D ) = ∑ j = 1 k | D j | | D | G i n i ( D j )

其中 k k 为分裂后的子节点的个数, A 是用于分裂的属性(即分裂准则)。以二叉决策树为例,就是:

GiniA(D)=|D1||D|Gini(D1)+|D2||D|Gini(D2)(3) (3) G i n i A ( D ) = | D 1 | | D | G i n i ( D 1 ) + | D 2 | | D | G i n i ( D 2 )

这样,对于一个节点中包含的数据集 D D ,我们的目标是去寻找最合适的分裂准则以及分裂值,使得经过分裂之后的基尼指数与分裂之前的基尼指数之差最大。这个差值如下计算得到:

(4) Δ A ( D ) = G i n i ( D ) G i n i A ( D )

所以,CART作为分类树的算法步骤如下:

  1. 根节点包含所有的训练元组,每个元组由多个属性组成。我们按照分裂前后基尼指数的差值,找到最好的分裂准则以及分裂值,将根节点一分为二(CART是二叉树);
  2. 对于生成的子节点递归的执行1步的算法,直到(1)数据集为空;(2)属性列表为空;(3)节点中所有数据集属于同一类;

CART的构建本来到此就算是结束了。但是所有的决策树构建算法(包括我之前介绍的ID3和C4.5)都有可能存在过拟合的问题(尤其是训练数据存在一些噪声和离群点时)。虽然可以通过阈值控制终止条件,避免树形结构分支过细,还有随机森林这样一些方法防止过拟合,但是一般情况下最常用的还是剪枝。剪枝的操作我在之前介绍ID3和C4.5的时候并没有讲到,但它是决策树算法中非常关键的一环,是不可以跳过的。所以我放到本文中也算是对之前文章的一个补充。

1.2 剪枝

如果我们先建好决策树再进行剪枝(即所谓的后剪枝),那需要在初始构建决策树时让树完全增长直到所有的叶子节点都是纯的且具有零训练误差。然后找到过拟合的子树并剪掉它们。同时,剪枝导致决策树高度更低,分支更少,这也在一定程度上提高了数据分类(回归)的速度。

如果一棵子树需要被剪枝,那么剪枝之后这棵子树就变成了一个叶子节点,其类标记为原先子树的元组中出现最多次的类标记。比如下图中的左图,假如要把 A3 A 3 分裂点为根的子树剪枝,而这棵子树中的数据类标号最多的是class B,那么剪枝后的决策树就变成下图中的右图模样。


现在剩下的问题就是在什么情况下需要对决策树的某个子树剪枝。简单想想就能想到,是否剪枝的评估标准肯定是子树的误差和子树复杂度(实际上就是叶子节点数)之间的平衡关系。根据这个原理,我们可以定义子树的损失函数:

J(τ)=E(τ)+λ|τ|(1) (1) J ( τ ) = E ( τ ) + λ | τ |

其中

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值