前面学习了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. PHP中全局变量的使用global和$GLOBALS[]

    From: http://blog.csdn.net/happyqyt/article/details/7219889 用PHP开发项目,不可避免的会使用到全局变量,比如一些网站的配置信息,全站通用, ...

  2. js(数组篇02)

    原文:http://www.cnblogs.com/zaking/p/8686676.html 上一篇文章简单的介绍了一下js的类型,以及数组的增删方法.这一篇文章,我们一起来看看数组还有哪些用法,以 ...

  3. php sql纯语句

    条件语句CASE CASE WHEN a.business_mark != END as source_type, 条件语句 CASE ELSE CASE WHEN a.business_mark ! ...

  4. 避免使用jQuery的html方法来替换标签,而是使用replaceWith方法

    tblCostSplit.html内容: <nobr title="">只想显示里面内容,去掉nobr标签</nobr> <nobr title=&q ...

  5. express项目创建步骤

    安装nodejs 安装npm 安装express npm install -g express 安装express生成器 npm install -g express-generator 查看expr ...

  6. MyEclipse使用笔记

    简单记录下个人常用的一些MyEclipse设置 VS颜色方案 Window-->Preference-->Java->Editor-->Syntax Coloring Clas ...

  7. C#常用数据加密类

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...

  8. 修改ftp服务的监听端口

    需求说明: 今天在做一个项目的时候,低端的端口都给屏蔽掉了,需要进行修改为高端端口才能访问,在此记录下. 操作过程: 1.修改ftp的配置文件vsftpd.conf,增加以下的配置 listen_po ...

  9. dubbo开发前戏--ZooKeeper集群部署(3.4.6)

    最近在开发dubbo服务的时候一直用的是公司提供的zk平台,因为使用的人太多或者没人维护老是出问题,导致dubbo服务偶尔可以调通,偶尔调不通的情况,所以花点时间自己部署一套,后面出问题还方便看日志排 ...

  10. RHEL5 yum更新源

    1.检查yum是否安装 rpm -qa |grep yum 2.利用CentOS的yum更新源来实现RHEL5的YUM功能 vi /etc/yum.repos.d/CentOS-Base.repo [ ...