决策树算法

1.ID3算法

    ID3算法是由Quinlan首先提出的,该算法是以信息论为基础,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类。ID3算法是基于奥卡姆剃刀原理的,即用尽量用较少的东西做更多的事。
    首先,ID3算法需要解决的问题是如何选择特征作为划分数据集的标准。在ID3算法中,选择信息增益最大的属性作为当前的特征对数据集分类。信息增益的概念将在下面介绍,通过不断的选择特征对数据集不断划分;其次,ID3算法需要解决的问题是如何判断划分的结束;第二种为已经没有属性可供再分了,此时就结束了。通过迭代的方式,我们就可以得到这样的决策树模型。

ID3算法基本流程

缺点:

(1)ID3算法会偏向于选择类别较多的属性(形成分支较多会导致信息增益大

(2)ID3算法没有考虑连续值,对与连续值的特征无法进行划分

(3) ID3算法对于缺失值的情况没有做考虑。

(4)ID3算法只有树的生成,容易产生过拟合。

(5)ID3算法采用贪心算法,每次划分都是考虑局部最优化,而局部最优化并不是全局最优化,通常需对其进行剪枝,而决策树剪枝是对模型进行整体优化。

2.C4.5算法

改进:

    (1)连续续的数据也能处理

    (2)可以在决策树构造过程中进行剪枝,因为某些具有很少元素的结点可能会使构造的决策树过拟合(Overfitting),如果不考虑这些结点可能会更好

    (3)能够对不完整数据(缺省数据)进行处理。

    (4)用信息增益率来进行属性选择的度量。信息增益作为标准容易偏向于取值较多的特征的问题。引入信息增益比,特征数越多的属性对应的熵越大,它作为分母,可以校正信息增益容易偏向于取值较多的特征的问题。

3.CART算法

输入:训练数据集D,停止计算的条件:
输出:CART决策树。

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

设结点的训练数据集为D,计算现有特征对该数据集的Gini系数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或 “否”将D分割成D1和D2两部分,计算A=a时的Gini系数。
在所有可能的特征A以及它们所有可能的切分点a中,选择Gini系数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
对两个子结点递归地调用步骤l~2,直至满足停止条件。
生成CART决策树。
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的Gini系数小于预定阈值(样本基本属于同一类),或者没有更多特征。

3.1基尼指数

其实gini指数最早应用在经济学中,主要用来衡量收入分配公平度的指标。在决策树算CART算法中用gini指数来衡量数据的不纯度或者不确定性,同时用gini指数来决定类别变量的最优二分值得切分问题。

在分类问题中,假设有K个类,样本点属于第k类的概率为Pk,则概率分布的gini指数的定义为:
这里写图片描述

如果样本集合D根据某个特征A被分割为D1,D2两个部分,那么在特征A的条件下,集合D的gini指数的定义为:
这里写图片描述

gini指数Gini(D,A)表示特征A不同分组的数据集D的不确定性。gini指数值越大,样本集合的不确定性也就越大,这一点与熵的概念比较类似。

所以在此,基于以上的理论,我们可以通过gini指数来确定某个特征的最优切分点(也即只需要确保切分后某点的gini指数值最小),这就是决策树CART算法中类别变量切分的关键所在。

3.2 CART算法举例

这里写图片描述

首先对数据集非类标号属性{是否有房,婚姻状况,年收入}分别计算它们的Gini系数增益,取Gini系数增益值最大的属性作为决策树的根节点属性。根节点的Gini系数

Gini(是否拖欠贷款)=1−(3/10)^2−(7/10)^2=0.42

当根据是否有房来进行划分时,Gini系数增益计算过程为

这里写图片描述

Gini(右子节点)=1−(3/7)^2−(4/7)^2=0.4898

Δ{是否有房}=0.42−710×0.4898−310×0=0.077

若按婚姻状况属性来划分,属性婚姻状况有三个可能的取值{married,single,divorced},分别计算划分后的

  • {married} | {single,divorced}
  • {single} | {married,divorced}
  • {divorced} | {single,married}

的Gini系数增益。
当分组为{married} | {single,divorced}时,Sl表示婚姻状况取值为married的分组,Sr表示婚姻状况取值为single或者divorced的分组

Δ{婚姻状况}=0.42−4/10×0−6/10×[1−(3/6)^2−(3/6)^2]=0.12

当分组为{single} | {married,divorced}时,
Δ{婚姻状况}=0.42−4/10×0.5−6/10×[1−(1/6^)2−(5/6)^2]=0.053

当分组为{divorced} | {single,married}时,
Δ{婚姻状况}=0.42−2/10×0.5−8/10×[1−(2/8)^2−(6/8)^2]=0.02

对比计算结果,根据婚姻状况属性来划分根节点时取Gini系数增益最大的分组作为划分结果,也就是{married} | {single,divorced}。

最后考虑年收入属性,我们发现它是一个连续的数值类型。我们在前面的文章里已经专门介绍过如何应对这种类型的数据划分了。对此还不是很清楚的朋友可以参考之前的文章,这里不再赘述。

对于年收入属性为数值型属性,首先需要对数据按升序排序,然后从小到大依次用相邻值的中间值作为分隔将样本划分为两组。例如当面对年收入为60和70这两个值时,我们算得其中间值为65。倘若以中间值65作为分割点。Sl作为年收入小于65的样本,Sr表示年收入大于等于65的样本,于是则得Gini系数增益为

Δ(年收入)=0.42−1/10×0−9/10×[1−(6/9)^2−(3/9)^2]=0.02

其他值的计算同理可得,我们不再逐一给出计算过程,仅列出结果如下(最终我们取其中使得增益最大化的那个二分准则来作为构建二叉树的准则):
这里写图片描述

注意,这与我们之前在《数据挖掘十大算法之决策树详解(1)》中得到的结果是一致的。最大化增益等价于最小化子女结点的不纯性度量(Gini系数)的加权平均值,之前的表里我们列出的是Gini系数的加权平均值,现在的表里给出的是Gini系数增益。现在我们希望最大化Gini系数的增益。根据计算知道,三个属性划分根节点的增益最大的有两个:年收入属性和婚姻状况,他们的增益都为0.12。此时,选取首先出现的属性作为第一次划分。

接下来,采用同样的方法,分别计算剩下属性,其中根节点的Gini系数为(此时是否拖欠贷款的各有3个records)
Gini(是否拖欠贷款)=1−(3/6)^2−(3/6)^2=0.5

与前面的计算过程类似,对于是否有房属性,可得
Δ{是否有房}=0.5−4/6×[1−(3/4)^2−(1/4)^2]−2/6×0=0.25

对于年收入属性则有:

这里写图片描述

最后我们构建的CART如下图所示:

这里写图片描述

最后我们总结一下,CART和C4.5的主要区别:

  • C4.5采用信息增益率来作为分支特征的选择标准,而CART则采用Gini系数;
  • C4.5不一定是二叉树,但CART一定是二叉树。

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值