`

决策树ID3算法详解

 
阅读更多

 

1决策树学习是以实例为基础的归纳学习。

决策树学习采用的是自顶向下的递归方法,决策树的每一层节点依照某一属性向下分子节点,待分类的实例在每一节点处与该节点相关的属性进行比较,根据不同的比较结果向响应的子节点扩展,这一过程在到达决策树的叶节点时结束,此时得到结论。

决策树学习最大的优点是它可以自学习。

2 决策树是描述分类的一种数据结构从上端的根节点开始,各种分类原则被引用进来,并以 这些分类原则见根节点的数据集划分为子集,这一划分过程直到某种约束条件满足而结束。

3 构造一棵决策树要解决的4个问题;

 1)收集待分类的数据,这些数据的所有属性应该是完全标注的。

2)设计分类原则,即数据的哪些属性可以用来分类,以及如何将该属性量化。

3)分类原则的选择,在众多的分类准则中,每一步选择哪一准则是最终的树更令人满意。

4)设计分类停止条件。通用分类目标是整棵树的熵的总量最小。

4自信息量:设信源X发出a的概率p(a),在收到符号a之前,收信者对a的不确定性定义为a的自信息量I(a)=-logp(a)

信息熵:自信息量只能反映符号的不确定性,而信息熵用来度量整个信源整体的不确定性,定义为:H(X)= 求和(p(ai) I(ai))

条件熵:设信源为X,收信者收到信息Y,用条件熵H(X|Y)来描述收信者收到YX的不确定性的估计。

平均互信息量:用平均互信息量来表示信息Y所能提供的关于X的信息量的大小。

互信息量I(X|Y)=H(X)-H(X|Y)    下边的ID3算法就是用到了每一个属性对分类的信息增益大小来决定属性所在的层次,信息增益越大,则越应该先作为分类依据。

5 ID3算法

 

下边的例子转自新浪博客,很详细,讲的不错。

 

还有一个老外的例子,也很不错,http://www.cise.ufl.edu/~ddd/cap6635/Fall-97/Short-papers/2.htm。 

 

决策树是数据挖掘中应用较广的一种算法,下面我将用一个例子来对较早出现的ID3算法探索应用一下,从而复习下昨天所学的知识,由于是刚接触,理解有限,有一些问题还得高手们解答一下;

    世界杯期间我和同学一起去吃了几回大排档,对那种边凑热闹边看球的氛围感觉很不错,但虽然每个夏天我都会凑几回这种热闹,但肯定并不是所有人都喜欢凑这种热闹的,而应用决策树算法则能有效发现哪些人愿意去,哪些人偶尔会去,哪些人从不愿意去;

    变量如表1所示,自变量为年龄、职业、性别;因变量为结果(吃大排档的频率)。

                            表1   数据表

                    

年龄A

职业B

性别C

结果

20-30

学生

偶尔

30-40

工人

经常

40-50

教师

从不

20-30

工人

偶尔

60-70

教师

从不

40-50

工人

从不

30-40

教师

偶尔

20-30

学生

从不

20以下

学生

偶尔

20以下

工人

偶尔

20-30

工人

经常

20以下

学生

偶尔

20-30

教师

偶尔

60-70

教师

从不

30-40

工人

偶尔

60-70

工人

从不

计算过程:

1、首先计算结果选项出现的频率

             表2   结果频率表

从不p1

经常p2

偶尔p3

0.375

0.125

0.5

2、计算因变量的期望信息:

E(结果)=-(p1*log2(p1)+p2*log2(p2)+p3*log2(p3) )

       =-(0.375*log2(0.375)+0.125*log2(0.125)+0.5*log2(0.5) )

        =1.406

注:这里Pi对应上面的频率

3、计算自变量的期望信息(以年龄A为例)

E(A)=∑count(Aj)/count(A)* (-(p1j*log2(p1j)+p2j*log2(p2j)+p3j*log2(p3j) ))

3.1公式说明:

Count(Aj):年龄A第j个选项个数; j是下面表3五个选项任一

 

                       表3   年龄记录数量表

选项

20-30

20以下

30-40

40-50

60-70

数量

5

3

3

2

3

Count(A):年龄总记录数

 

p1j =count(A1j)/count(Aj) :年龄A第j个选项在结果中选择了“从不”的个数占年龄A第j个选项个数的比例;

p2j =count(A2j)/count(Aj) :年龄A第j个选项在结果中选择了“偶尔”的个数占年龄A第j个选项个数的比例;

p3j =count(A3j)/count(Aj) :年龄A第j个选项在结果中选择了“经常”的个数占年龄A第j个选项个数的比例;

 

3.2公式分析

    在决策树中自变量是否显著影响因变量的判定标准由自变量选项的不同能否导致因变量结果的不同决定,举例来说如果老年人都从不去大排档,中年人都经常去,而少年都偶尔去,那么年龄因素肯定是决定是否吃大排档的主要因素;

    按照假设,即不同年龄段会对结果产生确定的影响,以表3年龄在20以下的3个人为例,假设他们都在结果中选择了“偶尔”选项,此时:

p2j =count(A2j)/count(Aj)=1,

p1j =count(A1j)/count(Aj)=0、

p3j =count(A3j)/count(Aj)=0;

 (p1j*log2(p1j)+p2j*log2(p2j)+p3j*log2(p3j) )→0;

    具体说来:

LIM(p2j→1) p2j*log2(p2j) →LIM(p2j→1) 1*0→0

LIM(p1j→0) p1j*log2(p1j) →LIM(p1j→0) log2(p1j) /(1/ p1j) →LIM(p1j→0) p1j* log2(e) →0

LIM(p3j→0) p1j*log2(p3j) →LIM(p3j→0) log2(p3j) /(1/ p3j) →LIM(p3j→0) p3j* log2(e) →0

(p1j*log2(p1j)+p2j*log2(p2j)+p3j*log2(p3j) )→0+0+0=0

    可见,如果每个年龄段都对结果有确定影响,那么各年龄段的不加权的期望信息(p1j*log2(p1j)+p2j*log2(p2j)+p3j*log2(p3j) )就很小,从而E(A)就很小甚至趋近0了;

4、自变量的期望信息计算

4.1、E(A)计算

    从表4看,有两个年龄段对结果产生了不同影响,计算如下:

E(30-40)= count(Aj)/count(A)* (-(p1j*log2(p1j)+p2j*log2(p2j)+p3j*log2(p3j) ))

       =3/16*(-(2/3* log2(2/3) +1/3*log2(1/3) ))

       =0.172

E(20-30)= count(Aj)/count(A)* (-(p1j*log2(p1j)+p2j*log2(p2j)+p3j*log2(p3j) ))

       =5/16*(-(1/5* log2(1/5)+3/5* log2(3/5) +1/5*log2(1/5) ))

       =0.428

    最终算得:

E(A)= E(30-40)+ E(20-30)=0.172+0.428=0.6

  

                        表4    年龄信息表

年龄A

结果

60-70

从不

60-70

从不

60-70

从不

40-50

从不

40-50

从不

30-40

经常

30-40

偶尔

30-40

偶尔

20以下

偶尔

20以下

偶尔

20以下

偶尔

20-30

偶尔

20-30

偶尔

20-30

从不

20-30

经常

20-30

偶尔

5、信息增益的计算

年龄变量的信息增益计算为:

Gain(A)=E(结果)-E(A)= 1.406-0.6=0.806

同理可以计算Gain(B)、Gain(C);

注:信息增益大说明较好的降低了划分前的无序程度,因此决策树的第一次划分就看哪个变量的信息增益大就按哪个划分;

6、划分过程

如果是像上例那样变量选项比较少的决策树来讲,假设年龄变量的信息增益最大,那么第一部划分就是:

40-70岁      从不去光顾

20岁以下     偶尔

20-30岁      数据再按照职业和性别计算信息增益找出规则

30-40岁      数据再按照职业和性别计算信息增益找出规则

实际划分是按分割阈值的标准:
A、数值型变量——对记录的值从小到大排序,计算每个值作为临界点产生的子节点的异质性统计量。能够使异质性减小程度最大的临界值便是最佳的划分点。
B、分类型变量——列出划分为两个子集的所有可能组合,计算每种组合下生成子节点的异质性。同样,找到使异质性减小程度最大的组合作为最佳划分点。
注两个问题:根节点一定要产生两个子集吗,要是产生三个子集、四个子集呢,产生多少子集有什么标准呢?我猜测是不是多个子集之间的结果两两差异显著就可以继续进行拆分,如果新的子集不能和原来任一子集的结果都有显著差异就停止划分呢?如何构建这个阈值的统计量呢?

7、划分停止的标准

    满足以下一个即停止生长。
(1) 节点达到完全纯性;
(2) 数树的深度达到用户指定的深度;
(3) 节点中样本的个数少于用户指定的个数;
(4) 异质性指标下降的最大幅度小于用户指定的幅度。

剪枝:完整的决策树对训练样本特征的描述可能“过于精确”(受噪声数据的影响),缺少了一般代表性而无法较好的用对新数据做分类预测,出现 ”过度拟合“。
——移去对树的精度影响不大的划分。使用 成本复杂度方法,即同时度量错分风险和树的复杂程度,使二者越小越好。
剪枝方式:
A、 预修剪(prepruning):停止生长策略
B、后修剪(postpruning):在允许决策树得到最充分生长的基础上,再根据一定的规则,自下而上逐层进行剪枝。

分享到:
评论

相关推荐

    机器学习--决策树(ID3)算法及案例.docx

    机器学习--决策树(ID3)算法及案例.docx机器学习--决策树(ID3)算法及案例.docx机器学习--决策树(ID3)算法及案例.docx机器学习--决策树(ID3)算法及案例.docx机器学习--决策树(ID3)算法及案例.docx机器学习--决策树(ID3...

    决策树算法原理详解

    决策树算法效果评估 决策树生成算法 ID3算法 ID3算法优缺点 C4.5算法 8 CART算法 8 ID3\C4.5\CART分类回归树算法总结 分类树和回归树的区别 决策树优化策略 决策树的剪枝 决策树剪枝过程 附录:

    【机器学习】【决策树】ID3算法,详解+Python代码实现

    除了绘制树部分代码有借鉴,其他代码都是自己亲手完成,历时2天时间,过程稍微痛苦,当看到运行结果出现在...由于更喜欢C++编程,所以使用python类来完成~~~~,个人感觉面向对象更容易和更适合实现生成决策树的软件系统

    python实现决策树C4.5算法详解(在ID3基础上改进)

    下面小编就为大家带来一篇python实现决策树C4.5算法详解(在ID3基础上改进)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    【机器学习】python构建ID3决策树+pygraphviz可视化(代码详解,附注释)

    机器学习实验,python...python实现ID3算法构建决策树,并用pygraphviz进行可视化操作; 数据集使用西瓜数据集2.0; 建议配套我的博客文章使用:https://blog.csdn.net/ljw_study_in_CSDN/article/details/116375359

    Python机器学习之决策树算法实例详解

    本文实例讲述了Python机器学习之决策树算法。分享给大家供大家参考,具体如下: 决策树学习是应用最广泛的归纳推理算法之一,是一...在算法中一般选用ID3,D3算法的核心问题是选取在树的每个节点要测试的特征或者属性,

    python决策树之C4.5算法详解

      C4.5算法是用于生成决策树的一种经典算法,是ID3算法的一种延伸和优化。C4.5算法对ID3算法主要做了一下几点改进:   (1)通过信息增益率选择分裂属性,克服了ID3算法中通过信息增益倾向于选择拥有多个属性...

    决策树剪枝算法的python实现方法详解

    本文实例讲述了决策树剪枝算法的python实现方法。...ID3算法:ID3算法是决策树的一种,是基于奥卡姆剃刀原理的,即用尽量用较少的东西做更多的事。ID3算法,即Iterative Dichotomiser 3,迭代二叉树3

    李航统计学习第二版思维导图-决策树xmind格式

    李航统计学习第二版思维导图-决策树xmind格式,可以编辑。决策树(Decision Tree)是在已知各种情况发生...Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。

    机器学习10大经典算法详解

    C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:  1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多...

    python实现连续变量最优分箱详解–CART算法

    有监督:(1) 卡方分箱法(ChiMerge) (2) ID3、C4.5、CART等单变量决策树算法 (3) 信用评分建模的IV最大化分箱 等 本篇使用python,基于CART算法对连续变量进行最优分箱 由于CART是决策树分类算法,所以相当于是单...

    《机器学习实战》&《统计学习方法》python代码实现(附有详细的代码注释)

    决策树(ID3,C4.5,CART算法) 感知器算法 adaboost算法 随机森林 朴素贝叶斯算法 SVM算法 提升树算法 隐马尔可夫模型算法 高斯判别分析(GDA) softmax回归算法 多层前馈神经网络 高斯混合模型(GMM) 3. 模型评估...

    Machine-Learning-in-Action:《机器学习在行动》中的演示

    ch03 : 决策树    ID3_C45.py:ID3以及C4.5算法的实现    小例子 :预测隐形眼镜类型    详解: ch04 : 朴素贝叶斯    bayes.py :朴素贝叶斯算法的实现    main.py :调用bayes进行测试    小...

    asp.net知识库

    ASP.NET2.0 ObjectDataSource的使用详解(3) ASP.NET2.0 快速入门 ----默认中的主题外观 数据库开发 ADO.NET 通过DataTable获得表的主键 ADO.NET 2.0 操作实例 ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO...

Global site tag (gtag.js) - Google Analytics