第一部分:简介

ID3和C4.5算法都是被Quinlan提出的,用于分类模型,也被叫做决策树。我们给一组数据,每一行数据都含有相同的结构,包含了一系列的attribute/value对。 其中一个属性代表了记录的类别。决策树的问题是对那些没有类别属性的记录预测出正确的类别。一般,类别属性取值为true或者false,yes或者no,success或者faliure。

举例来看,我们这有一些数据是是否打高尔夫球和天气条件的关系。类别属性是是否打高尔夫。非类别属性具体如下:

ATTRIBUTE   | POSSIBLE VALUES
============+=======================
outlook     | sunny, overcast, rain
------------+-----------------------
temperature | continuous
------------+-----------------------
humidity    | continuous
------------+-----------------------
windy       | true, false
============+=======================

训练数据如下:

OUTLOOK | TEMPERATURE | HUMIDITY | WINDY | PLAY
=====================================================
sunny   |      85     |    85    | false | Don't Play
sunny   |      80     |    90    | true  | Don't Play
overcast|      83     |    78    | false | Play
rain    |      70     |    96    | false | Play
rain    |      68     |    80    | false | Play
rain    |      65     |    70    | true  | Don't Play
overcast|      64     |    65    | true  | Play
sunny   |      72     |    95    | false | Don't Play
sunny   |      69     |    70    | false | Play
rain    |      75     |    80    | false | Play
sunny   |      75     |    70    | true  | Play
overcast|      72     |    90    | true  | Play
overcast|      81     |    75    | false | Play
rain    |      71     |    80    | true  | Don't Play

考虑到5个非类别属性中,有2个是连续值,Temperature and Humidity,ID3算法没有直接处理这样的情况,我们需要C4.5里面来思路来处理这种情况,它是ID3的扩展。

一个决策树最重要的不是它总结了我们本身所知道的,而是我们期望它能对新的case可以预测准确。

ID3背后的基本含义是:

  • 在决策树中,每一个节点对应一个非类别属性,每一条弧线对应那个属性可能的值,每一个叶子代表了类别属性的期望值,通过根节点到叶子节点的路径。
  • 在决策树中,从根节点开始每一个节点必须是最有信息量的节点。
  • 熵是衡量一个节点信息量的方法。

第二部分:ID3的定义

通常,我们给一个类别结果的一个概率分布P = (p1, p2, .., pn),这个分布传达的信息量也被为P的熵,为:

I(P) = -(p1*log(p1) + p2*log(p2) + .. + pn*log(pn))

举例,比如P=(0.5,0.5),那么I(P)=1,如果P=(0.67, 0.33),那么I(P)=0.92,P=(1,0),那么I(P)=0。分布越均匀,熵越大。

我们根据非类别属性X的值进行分割为T1,T2...,Info(X,T) = Sum for i from 1 to n of  ----(|Ti|/|T|) * Info(Ti)。

以上面的是否打高尔夫球为例,以outlook属性进行分割,Info(Outlook,T) = 5/14*I(2/5,3/5) + 4/14*I(4/4,0) + 5/14*I(3/5,2/5) = 0.694。

信息增益为,Gain(X,T) = Info(T) - Info(X,T)。这个信息增益代表的意思是,在有和没有属性X值的上信息量的不同。

在Outlook属性上,Gain(Outlook,T) = Info(T) - Info(Outlook,T) = 0.94 - 0.694 = 0.246。同理,Info(Windy,T) = 0.892 and Gain(Windy,T) = 0.048。

Gain(Outlook,T)>Gain(Windy,T),说明可以带来更大的信息增益。我们用信息增益来对属性值进行rank排序,来作为首先决策的节点。

第三部分:ID3算法

ID3算法用来构建决策树,给你一些非分类的属性C1,C2...Cn,一个分类的属性C;一个训练集T;

function ID3 (R: a set of non-categorical attributes,
C: the categorical attribute,
S: a training set) returns a decision tree;
   begin
If S is empty, return a single node with value Failure;
If S consists of records all with the same value for
   the categorical attribute,
   return a single node with that value;
If R is empty, then return a single node with as value
   the most frequent of the values of the categorical attribute
   that are found in records of S; [note that then there
   will be errors, that is, records that will be improperly
   classified];
Let D be the attribute with largest Gain(D,S)
   among attributes in R;
Let {dj| j=1,2, .., m} be the values of attribute D;
Let {Sj| j=1,2, .., m} be the subsets of S consisting
   respectively of records with value dj for attribute D;
Return a tree with root labeled D and arcs labeled
   d1, d2, .., dm going respectively to the trees

ID3(R-{D}, C, S1), ID3(R-{D}, C, S2), .., ID3(R-{D}, C, Sm);
   end ID3;

在高尔夫的例子中,我们构建了下面的决策树:

			Outlook
/ | \
/ | \
overcast / |sunny \rain
/ | \
Play Humidity Windy
/ | | \
/ | | \
<=75 / >75| true| \false
/ | | \
Play Don'tPlay Don'tPlay Play

 第四部分:使用信息增益率

观念是信息增益会导致偏爱那些包含很多值的属性,举一个极端例子,如果我们有一个属性,它的每一条记录的属性值都不同,那么Info(D,T) = 0,但是G(D,T) = 最大。所以,Quinlan建议我们用信息增益率来代替信息增益。

GainRatio(D,T) = Gain(D,T) / SplitInfo(D,T)。而SplitInfo(D,T)代表属性值D的基础上分类T的信息,SplitInfo(D,T) = I(|T1|/|T|, |T2|/|T|, .., |Tm|/|T|)。以高尔夫为例子,SplitInfo(Outlook,T) = -5/14*log(5/14) - 4/14*log(4/14) - 5/14*log(5/14) = 1.577。那么GainRatio(Outlook,T) = 0.246/1.577 = 0.156。

第五部分:C4.5扩展

C4.5是ID3算法的一个扩展。改进地点有:

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

2)在树构造过程中进行剪枝,在构造决策树的时候,那些挂着几个元素的节点,不考虑最好,不然容易导致overfitting。

3)对非离散数据也能处理。

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

小啃机器学习(1)-----ID3和C4.5决策树的更多相关文章

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

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

  2. 机器学习回顾篇(7):决策树算法(ID3、C4.5)

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  3. 机器学习总结(八)决策树ID3,C4.5算法,CART算法

    本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...

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

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

  5. ID3、C4.5、CART、RandomForest的原理

    决策树意义: 分类决策树模型是表示基于特征对实例进行分类的树形结构.决策树可以转换为一个if_then规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布. 它着眼于从一组无次序.无规则的样 ...

  6. ID3、C4.5、CART决策树介绍

    决策树是一类常见的机器学习方法,它可以实现分类和回归任务.决策树同时也是随机森林的基本组成部分,后者是现今最强大的机器学习算法之一. 1. 简单了解决策树 举个例子,我们要对”这是好瓜吗?”这样的问题 ...

  7. python机器学习笔记 ID3决策树算法实战

    前面学习了决策树的算法原理,这里继续对代码进行深入学习,并掌握ID3的算法实践过程. ID3算法是一种贪心算法,用来构造决策树,ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性 ...

  8. ID3和C4.5分类决策树算法 - 数据挖掘算法(7)

    (2017-05-18 银河统计) 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来判断其可行性的决策分析方法,是直观运用概率分析的一种图解法.由于这种决策分支画 ...

  9. Python3实现机器学习经典算法(四)C4.5决策树

    一.C4.5决策树概述 C4.5决策树是ID3决策树的改进算法,它解决了ID3决策树无法处理连续型数据的问题以及ID3决策树在使用信息增益划分数据集的时候倾向于选择属性分支更多的属性的问题.它的大部分 ...

随机推荐

  1. Ext.Slider的试用小记

    最近需要做一个滑动条,动态改变地图动画播放的速度.实在没有自己用js写一个的那个水平,于是找到了Ext.Slider,ExtJS的版本是3.3.0. new Ext.Slider({ id: 'pla ...

  2. 开始学习css

    今天开始学习css:应用一本<HTML5与CSS3网页设计基础> 先学习css样式规则声明. Body{ color:blue} 对应:选择符:{声明属性:声明值}: Background ...

  3. 我的jquery之路

    不知不觉jquery已经看完了. 以前不知道jquery是什么,现在依然不是很清晰.或许学习的结果就是这样吧,忘记你所学的.

  4. Quartz Scheduler(2.2.1) - Working with SchedulerListeners

    SchedulerListeners SchedulerListeners are much like TriggerListeners and JobListeners, except they r ...

  5. Redis 命令 - Pub/Sub

    PSUBSCRIBE pattern [pattern ...] Listen for messages published to channels matching the given patter ...

  6. 在Ubuntu中USB连接手机调试

    1.打开手机USB调试功能 显示“开发者选项”(开发者选项默认隐藏,一般需要进入到“设置”-->“关于手机”连续点击七次,可将“开发者选项显示出来”) 将“开发者选项”设置为“开启”状态 打开U ...

  7. ubuntu(16.04.01)学习-day1

    1.修改root用户密码 sudo passwd root 按提示进行设置. 2.从Ubuntu 16.04开始,用户可以实现改变启动器的位置,可以将启动器移到屏幕底部,但是无法移到右边或顶部.打开终 ...

  8. 北大ACM(POJ1001-Exponentiation)

    Question:http://poj.org/problem?id=1001问题点:大数运算(求幂) #include <iostream> using namespace std; # ...

  9. 动态磁盘恢复为基本磁盘--DiskGenius

    近日在老电脑中安装了Win8.1,想不到使用起来比Win7还流畅. 周末,手贱,由于C盘只有10GB,为主分区,D盘有40GB,为扩展分区,想要将C.D两个分区合二为一,在Win8.1的磁盘管理器中, ...

  10. css笔记——区分css3中的transform transition animation

    出处:http://blog.csdn.net/dyllove98/article/details/8957232   CSS3中和动画有关的属性有三个  transform. transition  ...