前面学习了ID3,知道了有关“熵”以及“信息增益”的概念之后。

今天,来学习一下C4.5。都说C4.5是ID3的改进版,那么,ID3到底哪些地方做的不好?C4.5又是如何改进的呢?

在此,引用一下前人的总结:

ID3算法是决策树的一个经典的构造算法,在一段时期内曾是同类研究工作的比较对象,但通过近些年国内外学者的研究,ID3算法也暴露出一些问题,具体如下:

(1)信息增益的计算依赖于特征数目较多的特征,而属性取值最多的属性并不一定最优。

(2)ID3是非递增算法。

(3)ID3是单变量决策树(在分枝节点上只考虑单个属性),许多复杂概念的表达困难,属性相互关系强调不够,容易导致决策树中子树的重复或有些属性在决策树的某一路径上被检验多次。

(4)抗噪性差,训练例子中正例和反例的比例较难控制。

于是Quilan改进了ID3,提出了C4.5算法。C4.5算法现在已经成为最经典的决策树构造算法,排名数据挖掘十大经典算法之首,下一篇文章将重点讨论。

决策树的经典构造算法——C4.5(WEKA中称J48)

由于ID3算法在实际应用中存在一些问题,于是Quilan提出了C4.5算法,严格上说C4.5只能是ID3的一个改进算法。

C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:

1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

2) 在树构造过程中进行剪枝;

3) 能够完成对连续属性的离散化处理;

4) 能够对不完整数据进行处理。

C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

另外,无论是ID3还是C4.5最好在小数据集上使用,决策树分类一般只试用于小数据。当属性取值很多时最好选择C4.5算法,ID3得出的效果会非常差。

总结的很不错。下面,我们就一起来对这些是是非非进行讨论。

1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

信息增益PK信息增益率

这里说信息增益选择属性时,会偏向选择取值多的属性,so,why?

举个例子,userid(用户登录账号)。userid不可能存在相同的值,因此,有几个userid就意味着有几个元组,也就是说按照userid来划分的话,太纯了,每一个都不一样,所以他的。当然,我们也可以通过计算得出,基于userid对数据集D分类所需要的信息为:(假设有n个userid)

因此,通过对userid的划分得到的信息增益最大。显然,这种划分对分类毫无意义。

所以呢,就出现了另一种叫做“信息增益率”的度量,显然,它克服了信息增益的这种缺陷,让我们来看一下它是怎么做到的。

信息增益率利用“分裂信息”值将信息增益规范化。分裂信息类似于Info(D),定义如下:

“分裂信息”:代表训练数据集D划分成对应于属性A测试的v个输出的v个分区产生的信息。注意,对于每个输出,它相对于D中元组的总数考虑具有该输出的元组数。它不同于信息增益,信息增益是基于同样划分所获得的信息。

信息增益率的定义:

选择具有较大增益率的属性作为分裂属性。然而,需要注意的是,随着划分信息趋向于0,信息增益率将变得不稳定。为了避免这种情况,增加一个约束:选取的测试的信息增益必须较大,至少与考察的所有测试的平均增益一样大。

以上是书上的,我们照着再练习一下别的属性。

再来重温一下这段话:

  选择具有较大增益率的属性作为分裂属性。然而,需要注意的是,随着划分信息趋向于0,信息增益率将变得不稳定。为了避免这种情况,增加一个约束:选取的测试的信息增益必须较大,至少与考察的所有测试的平均增益一样大。

  增益率都求出来了,要选较大的(较大的有student&age)。还有一个约束我们得看看。

  至少与考察的所有测试的平均增益一样大,因此,我们得先求出平均增益。

因此,这里就毙掉了两个属性:income&credit_rating。然后呢?然后选择一个较大的,但是,由于这个例子中所有的属性都是离散的,并不存在我们所说的类似userid的情况。所以说书上这个例子不是很能说明C4.5的优越性。

因此,接下来的内容引用:http://fangdonghao1029.blog.163.com/blog/static/34364307201281352032174/     写的很不错。欢迎交流。

C4.5的算法步骤:

Step1.对数据源进行数据预处理,将连续型的属性变量进行离散化处理形成决策树的训练集(如果没有连续取
值的属性则忽略);
  (1)根据原始数据,找到该连续型属性的最小取值a0。、最大取值a(n+1) ;
  (2)在区间[a,b]内插入n个数值等分为n+1个小区间;
  (3)分别以ai,i=l,2,⋯ ,n为分段点,将区间【a0, a(n+1) 】划分为两个子区间:
  Step2.计算每个属性的信息增益和信息增益率;
  (1)计算属性A的信息增益Gain(A)

信息增益Gain(A)的计算和ID3算法中的完全一致;
  (2)计算属性A的信息增益率Gain—Ratio(A)
Gain—Ratio(A)= Gain(A)/I(A)
  对于取值连续的属性而言,分别计算以ai (i=l,2,⋯,n)为分割点,对应分类的信息增益率,选择最大信息
增益率对应的n ,作为该属性分类的分割点。
  选择信息增益率最大的属性,作为当前的属性节点,得到决策树的根节点。
  Step3.根节点属性每一个可能的取值对应一个子集,对样本子集递归地执行以上Step2过程,直到划分的每个
子集中的观测数据在分类属性上取值都相同,生成决策树。
  Step4.根据构造的决策树提取分类规则,对新的数据集进行分类。

决策树归纳算法之C4.5的更多相关文章

  1. day-7 一个简单的决策树归纳算法(ID3)python编程实现

    本文介绍如何利用决策树/判定树(decision tree)中决策树归纳算法(ID3)解决机器学习中的回归问题.文中介绍基于有监督的学习方式,如何利用年龄.收入.身份.收入.信用等级等特征值来判定用户 ...

  2. 决策树归纳算法之ID3

    学习是一个循序渐进的过程,我们首先来认识一下,什么是决策树.顾名思义,决策树就是拿来对一个事物做决策,作判断.那如何判断呢?凭什么判断呢?都是值得我们去思考的问题. 请看以下两个简单例子: 第一个例子 ...

  3. 决策树构建算法之—C4.5

    这个网站值得收藏一下,原文链接:http://shiyanjun.cn/archives/428.html 决策树算法的优越性在于:离散学习算法进行组合总可以表达任意复杂的布尔函数,并不受数据集的限制 ...

  4. 机器学习之决策树(ID3 、C4.5算法)

    声明:本篇博文是学习<机器学习实战>一书的方式路程,系原创,若转载请标明来源. 1 决策树的基础概念 决策树分为分类树和回归树两种,分类树对离散变量做决策树 ,回归树对连续变量做决策树.决 ...

  5. 决策树之ID3、C4.5、C5.0等五大算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- C5.0决策树之ID3.C4.5.C5.0算法 ...

  6. 《机器学习实战》学习笔记第三章 —— 决策树之ID3、C4.5算法

    主要内容: 一.决策树模型 二.信息与熵 三.信息增益与ID3算法 四.信息增益比与C4.5算法 五.决策树的剪枝 一.决策树模型 1.所谓决策树,就是根据实例的特征对实例进行划分的树形结构.其中有两 ...

  7. 【十大经典数据挖掘算法】C4.5

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 决策树模型与学习 决策树(de ...

  8. 决策树剪枝算法-悲观剪枝算法(PEP)

    前言 在机器学习经典算法中,决策树算法的重要性想必大家都是知道的.不管是ID3算法还是比如C4.5算法等等,都面临一个问题,就是通过直接生成的完全决策树对于训练样本来说是“过度拟合”的,说白了是太精确 ...

  9. 决策树 -- ID3算法小结

          ID3算法(Iterative Dichotomiser 3 迭代二叉树3代),是一个由Ross Quinlan发明的用于决策树的算法:简单理论是越是小型的决策树越优于大的决策树. 算法归 ...

随机推荐

  1. e859. 将键盘事件和字符串对应

    The KeyStroke.toString() method does not return a string that can be parsed by KeyStroke.getKeyStrok ...

  2. JAVA代码中最常见到的关键字表

    abstract 抽象类或方法 assert 用来查找内部程序错误 break 跳出一个switch或循环 byte 8 位整数类型 case switch的一个分支 catch 捕获异常的try块子 ...

  3. C#或者.NET下的强制垃圾回收办法

    转载 2011年03月16日 17:21:00 标签: c# / .net / button / object / stream / class 8185 今天来谈谈C#的GC,也就是垃圾回收机制,非 ...

  4. 嵌入式开发之zynq---Zynq PS侧DMA驱动

    http://xilinx.eetrend.com/blog/10760 http://xilinx.eetrend.com/blog/10787

  5. (原)关于sdl在部分机器上做视频显示,改变显示窗口大小会崩溃

    今天测试人员反应,之前做的视频绘图显示,会在她机器上,会出现崩溃现象,最后我在她机器上对代码进行跟踪,发现在某种情况,确实会崩溃. 最主要的原因是,视频显示窗口变成非活动窗口的时候,sdl内部会循环消 ...

  6. 一款标注颜色,距离的小软件 markman

    长度标记   坐标和矩形标记   色值标记   文字标记   长度自动测量   标记拖拽删除   支持多种图片格式 支持PSD(需用最大兼容保存).PNG.BMP.JPG格式 设计稿自动刷新 在标注的 ...

  7. 混合线路接入时,360、QQ管家等测速显示电信IP或任意线路的IP

    最近很多人QQ上问我,我有电信.联通接入,用户测速的时候有的时候显示联通的IP,可是我想让他显示为电信的IP,怎么办? 3年前开始使用联通的线路时,就这样设置了,有些人还拿这个设置当宝贝了???? 其 ...

  8. linux升级php至5.6

    1 查看终端当前php版本 php -v 会反馈以下信息: PHP 5.4.35 (cli) (built: Nov 14 2014 07:04:10) Copyright (c) 1997-2014 ...

  9. Android 监听屏幕唤醒和关闭的广播

    今天希望应用程序的服务运行时,可以监听到屏幕的唤醒.继续百度学习法,连同监听闭幕关闭也一同学习了. 此种情况需要动态注册系统广播.在AndroidManifest.xml中静态注册的实际运行中无效. ...

  10. CentOS7 防火墙配置(关闭)

    CentOS7 的防火墙配置跟曾经版本号有非常大差别,经过大量尝试,最终找到解决这个问题的关键 CentOS7这个版本号的防火墙默认使用的是firewall.与之前的版本号使用iptables不一样. ...