决策树算法之C4.5

机器学习中很重要的一个内容就是分类(classification).即根据已有的数据构造出一个模型,通过该模型可以给每个数据标明其所属的种类。通常所见的种类的集合包括{yes,no},{good,bad}等等。需要指出分类的结果集合必须是离散的。

决策树是一种简单且广泛使用的分类器。决策树的每个叶子节点表示对应的类别。每个非叶子节点表示待分类的属性。如何构造决策树?这里看了ID3和C4.5,所以先写这个两个方法。后面如果又看到其他的决策树生成算法再整理归纳。

ID3和C4.5其实差不多。准确的讲,C4.5是在ID3的基础上做了一点儿改进,使得生成较小的决策树。在学习C4.5之前必须对ID3算法做了解,推荐一篇博文[1]http://www.cnblogs.com/lufangtao/archive/2013/05/30/3103588.html。看完了这篇博文讲的再来看C4.5就容易了。在这儿呢我只是单纯的从例子的角度出发,说明C4.5到底是如何运算的。感觉机器学习或者是数据挖掘这些算法都没有特别特别深奥的理论,很多方法借助例子更容易理解。

C4.5相较于ID3引进了信息增益率的概念。ID3是选择信息增益最大的属性做为根节点,但这会导致很容易选择取值较多的属性做为根节点。通俗点解释这个现象产生的原因,如果某个属性下面有多个取值,而每个取值的结构属性都不一样(解释一下结构属性就是下例中的PlayTeniss,yes or no),那每个取值的信息熵就为0,因此信息增益就等于信息熵,此时肯定是这个属性对应的信息增益最大,因而他会被选为根节点。C4.5则不同,C4.5引进了信息增益率的概念,并且以此作为划分依据。这样就会弱化属性取值个数在根节点的选择时的影响。

信息增益率的计算公式如下:

其中SplitInformation(S,A)称之为分裂因子,计算公式为

接着博客[1]中的例子看看C4.5是如何运算的。

先把例子粘过来

A=outlook,Gain(S,A) = 0.246.

该属性有3个取值{sunny,rain,overcast},样本中的个数分别是{5,5,4}。则SplitInformation(S,A) = -5/14*log2(5/14)-5/14*log2(5/14)-4/14*log2(4/14)=1.577

则GainRatio(S,A) = 0.246/1.577 = 0.156.

A=temperature,Gain(S,A)=0.029.

该属性有3个取值{hot,coo,mild},其中的样本个数分别为{4,4,6}.则SplitInformation(S,A) = -4/14*log2(5/14)-4/14*log2(5/14)-6/14*log2(4/14)=1.557

则GainRatio(S,A) = 0.029/1.557=0.0186.

同理可以计算出A=humidity和A=wind是对应的信息增益率分别为0.155,0.0487.

选取信息增益率最大的属性做为根节点,故应该选取A=OUTLOOK。接下来递归的调用该方法,得到最终的决策树。只不过在本例中ID3和C4.5得到的决策树都是一样的。

时间: 2024-10-11 12:13:28

决策树算法之C4.5的相关文章

《机器学习实战》基于信息论的三种决策树算法(ID3,C4.5,CART)

============================================================================================ <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记,包含对其中算法的理解和算法的Python代码实现 另外博主这里有机器学习实战这本书的所有算法源代码和算法所用到的源文件,有需要的留言 如需转载请注明出处,谢谢 ======================================

[转]机器学习——C4.5 决策树算法学习

1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.它是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类.这样的机器学习就被称之为监督学习.C4.5分类树就是决策树算法中最流行的一种.下面给出一个数据集作为算法例子的基础,比如有这么一个数据集,如下: 我们将以这个数据集作讨论的基础.进行分类的目的就是根据某一天的天气状态,如天气,温度,湿度,是否刮风,来

决策树算法-信息熵-信息增益-信息增益率-GINI系数-转

1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.他是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类.这样的机器学习就被称之为监督学习.分类本质上就是一个map的过程.C4.5分类树就是决策树算法中最流行的一种.下面给出一个数据集作为算法例子的基础,比如有这么一个数据集,如下: 这个Golf数据集就是我们这篇博客讨论的基础.我们分类的目的就是根据某一

Thinking in SQL系列之四:数据挖掘C4.5决策树算法

原创: 牛超   2017-02-11   Mail:[email protected] C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法.它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类.C4.5的目标是通过学习,积累经验,为后续决策服务. 该算法目前能找到各类版本,C.JAVA.PYTHON.而SQL版本闻所未闻,前篇我有提过,数据处理,SQL为王,如何以SQL的思维来实现C4.5决策树算法是本篇的重点. PS:多年与

scikit-learn决策树算法类库使用小结

参考:http://www.cnblogs.com/pinard/p/6056319.html 之前对决策树的算法原理做了总结,包括决策树算法原理(上)和决策树算法原理(下).今天就从实践的角度来介绍决策树算法,主要是讲解使用scikit-learn来跑决策树算法,结果的可视化以及一些参数调参的关键点. 1. scikit-learn决策树算法类库介绍 scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归.分类决策树的类对应的是Decision

Spark机器学习(6):决策树算法

1. 决策树基本知识 决策树就是通过一系列规则对数据进行分类的一种算法,可以分为分类树和回归树两类,分类树处理离散变量的,回归树是处理连续变量. 样本一般都有很多个特征,有的特征对分类起很大的作用,有的特征对分类作用很小,甚至没有作用.如决定是否对一个人贷款是,这个人的信用记录.收入等就是主要的判断依据,而性别.婚姻状况等等就是次要的判断依据.决策树构建的过程,就是根据特征的决定性程度,先使用决定性程度高的特征分类,再使用决定性程度低的特征分类,这样构建出一棵倒立的树,就是我们需要的决策树模型,

决策树算法

利用ID3算法来判断某天是否适合打网球. (1)类别属性信息熵的计算由于未分区前,训练数据集中共有14个实例, 其中有9个实例属于yes类(适合打网球的),5个实例属于no类(不适合打网球), 因此分区前类别属性的熵为: (2)非类别属性信息熵的计算,若先选择Outlook属性. (3)Outlook属性的信息增益为: (4)同理计算出其他3个非类别属性的信息增益,取最大的那个属性作为分裂节点,此例中最大的是Outlook,进而得到如下图所示: (5)上图中,针对sunny中的子训练数据集分支,

如何实现并应用决策树算法?

本文对决策树算法进行简单的总结和梳理,并对著名的决策树算法ID3(Iterative Dichotomiser 迭代二分器)进行实现,实现采用Python语言,一句老梗,“人生苦短,我用Python”,Python确实能够省很多语言方面的事,从而可以让我们专注于问题和解决问题的逻辑. 根据不同的数据,我实现了三个版本的ID3算法,复杂度逐步提升: 1.纯标称值无缺失数据集 2.连续值和标称值混合且无缺失数据集 3.连续值和标称值混合,有缺失数据集 第一个算法参考了<机器学习实战>的大部分代码,

决策树算法原理

转载于:http://www.cnblogs.com/pinard/p/6050306.html (楼主总结的很好,就拿来主义了,不顾以后还是多像楼主学习) 决策树算法在机器学习中算是很经典的一个算法系列了.它既可以作为分类算法,也可以作为回归算法,同时也特别适合集成学习比如随机森林.本文就对决策树算法原理做一个总结,上篇对ID3, C4.5的算法思想做了总结,下篇重点对CART算法做一个详细的介绍.选择CART做重点介绍的原因是scikit-learn使用了优化版的CART算法作为其决策树算法