决策树-Cart生成和剪枝算法

***************CART算法概述**********************

  Cart算法类似于ID3算法,其将特征分类为按GINI系数,找到该特征下的一个最优节点进行分类,该特征被分为2个类别,比如一个类别中有{学生,老师,工人},则选择分裂节点可能为学生,老师或工人,得到的结果就可能有[{学生},{老师,工人}],[{老师},{学生,工人}],[{工人},{老师,学生}],我们对这3个分裂而来的类别,计算其基尼系数,具体公式稍后介绍。选择基尼系数最小的作为该特征的切分点,就这样,依次对所有特征做如上处理,找到其中最小基尼系数的特征,以它作为分裂属性,再在剩下的特征中递归以上步骤,终止条件:没有更多特征,或者可以用卡方检验,检验当前特征与分类结果之间是否独立,如果独立,则算法结束。


****************GINI系数******************************

 样本集合D的基尼指数:

,这里有错误,要减去pi的平方,同样后面也一样

K为D中分类个数,Ck为第k类在样本D中的个数

样本集合对特征A的基尼系数

之所以只有D1,D2如上面所讲,特征A按某个最优节点会将特征A只划分为2个空间



在这里,我们将基尼指数与信息熵做类比,两者的共性有很多,都表示样本集合的不确定性

样本集合C的信息熵


其中P(Ci)和基尼系数中的pi很相似,都表示各个类别所占总体的比例,也就是求出每个分类出现的概率

样本集合C对A的信息熵


其中n为A特征下的各个特征值,必须为离散的,如果是连续的需要离散化,Ci为A第i个特征值所构成的样本集合

接着我们就能求得A特征的信息增益

g(C,A) = H(C) - H(C|A)

对每个特征都求出其信息增益,选择最大的那个特征作分裂,然后递归执行,直至所有特征分裂完毕


************************cart算法步骤*****************************

描述:

输入:

训练数据D,停止计算的条件

输出:

CART决策树

解:

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

1,从节点的训练数据集D计算现有特征对该数据集的基尼指数(Gini)。此时,对每一个特征A,对其可能取得每一个值a,根据“样本A = a的结果是‘是’或‘否’”将D分割成D1,D2两部分,计算A = a 时的Gini。

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

3,对两个子结点递归的调用上面两步直至满足停止条件。

4,生成CART决策树。

PS:算法的停止条件是“节点的样本个数 < 预定阈值”或“样本集合的Gini < 预定阈值(样本基本属于同一         类)”或“无更多特征”。


关于终止条件:

一个节点产生左右孩子后,递归地对左右孩子进行划分即可产生分类回归树。这里的终止条件是什么?什么时候节点就可以停止分裂了?直观的情况,当节点包含的数据记录都属于同一个类别时就可以终止分裂了。这只是一个特例,更一般的情况我们计算χ2值来判断分类条件和类别的相关程度,当χ2很小时说明分类条件和类别是独立的,即按照该分类条件进行分类是没有道理的,此时节点停止分裂。注意这里的“分类条件”是指按照GINI_Gain最小原则得到的“分类条件”。


*********************Cart剪枝****************************

剪枝

当分类回归树划分得太细时,会对噪声数据产生过拟合作用。因此我们要通过剪枝来解决。剪枝又分为前剪枝和后剪枝:前剪枝是指在构造树的过程中就知道哪些节点可以剪掉,于是干脆不对这些节点进行分裂,在N皇后问题和揹包问题中用的都是前剪枝,上面的χ2方法也可以认为是一种前剪枝;后剪枝是指构造出完整的决策树之后再来考查哪些子树可以剪掉。

在分类回归树中可以使用的后剪枝方法有多种,比如:代价复杂性剪枝、最小误差剪枝、悲观误差剪枝等等。这里我们只介绍代价复杂性剪枝法。

对于分类回归树中的每一个非叶子节点计算它的表面误差率增益值α。

是子树中包含的叶子节点个数;

是节点t的误差代价,如果该节点被剪枝;

r(t)是节点t的误差率;

p(t)是节点t上的数据占所有数据的比例。

是子树Tt的误差代价,如果该节点不被剪枝。它等于子树Tt上所有叶子节点的误差代价之和。

比如有个非叶子节点t4如图所示:

已知所有的数据总共有60条,则节点t4的节点误差代价为:

子树误差代价为:

以t4为根节点的子树上叶子节点有3个,最终:

找到α值最小的非叶子节点,令其左右孩子为NULL。当多个非叶子节点的α值同时达到最小时,取最大的进行剪枝

参考:http://www.cnblogs.com/ldphoebe/p/4934113.html


******************cart与ID3区别*********************

①Cart算法改进了ID3中分裂特征的选择容易偏向特征取值多的特征

②CART算法对特征是离散的或连续的都适用



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章