小啃机器学习(1)-----ID3和C4.5决策树
第一部分:简介
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决策树的更多相关文章
- 机器学习之决策树(ID3 、C4.5算法)
声明:本篇博文是学习<机器学习实战>一书的方式路程,系原创,若转载请标明来源. 1 决策树的基础概念 决策树分为分类树和回归树两种,分类树对离散变量做决策树 ,回归树对连续变量做决策树.决 ...
- 机器学习回顾篇(7):决策树算法(ID3、C4.5)
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 机器学习总结(八)决策树ID3,C4.5算法,CART算法
本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...
- 《机器学习实战》学习笔记第三章 —— 决策树之ID3、C4.5算法
主要内容: 一.决策树模型 二.信息与熵 三.信息增益与ID3算法 四.信息增益比与C4.5算法 五.决策树的剪枝 一.决策树模型 1.所谓决策树,就是根据实例的特征对实例进行划分的树形结构.其中有两 ...
- ID3、C4.5、CART、RandomForest的原理
决策树意义: 分类决策树模型是表示基于特征对实例进行分类的树形结构.决策树可以转换为一个if_then规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布. 它着眼于从一组无次序.无规则的样 ...
- ID3、C4.5、CART决策树介绍
决策树是一类常见的机器学习方法,它可以实现分类和回归任务.决策树同时也是随机森林的基本组成部分,后者是现今最强大的机器学习算法之一. 1. 简单了解决策树 举个例子,我们要对”这是好瓜吗?”这样的问题 ...
- python机器学习笔记 ID3决策树算法实战
前面学习了决策树的算法原理,这里继续对代码进行深入学习,并掌握ID3的算法实践过程. ID3算法是一种贪心算法,用来构造决策树,ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性 ...
- ID3和C4.5分类决策树算法 - 数据挖掘算法(7)
(2017-05-18 银河统计) 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来判断其可行性的决策分析方法,是直观运用概率分析的一种图解法.由于这种决策分支画 ...
- Python3实现机器学习经典算法(四)C4.5决策树
一.C4.5决策树概述 C4.5决策树是ID3决策树的改进算法,它解决了ID3决策树无法处理连续型数据的问题以及ID3决策树在使用信息增益划分数据集的时候倾向于选择属性分支更多的属性的问题.它的大部分 ...
随机推荐
- iOS下使用sqlite3
1.创建数据库 使用firefox的sqlite manager创建和打开数据库,详细请参考: http://www.cnblogs.com/hanjun/archive/2012/10/29/274 ...
- Jersey(1.19.1) - Life-cycle of Root Resource Classes
By default the life-cycle of root resource classes is per-request, namely that a new instance of a r ...
- JavaScript之可运行按钮
看到好多大神都写了像这种在页面"可运行"的Javascript脚本,感觉很好奇,所以我今天也试着写了一个. 自从有了这个"可运行"按钮,好多代码就再也不以图片的 ...
- Android布局属性全面剖析
第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:la ...
- 【SQL】关于存储过程调用过程中事务的点点滴滴
1.调用两个存储过程 ---------------------------------------------------------------- -- 表[dbo].[aaa_test]中[id ...
- 第七篇、微信小程序-video组件
主要属性: 效果图: ml: <View>1.播放网络视频</View> <view > <video style="width: 100%;hei ...
- js及jQuery实现checkbox的全选、反选和全不选
html代码: <label><input type="checkbox" id="all"/>全选</label> < ...
- windows下nginx以服务自启动
1,下载最新版的 Windows Service Wrapper 程序,例如:"winsw-1.9-bin.exe" 也可以修改它的名字,例如:myapp.exe 2, 将重命名后 ...
- EasyUI –tree、combotree学习总结
EasyUI –tree.combotree学习总结 一. tree总结 (一).tree基本使用 tree控件是web页面中将数据分层一树形结构显示的. 使用$.fn.tree.defaults ...
- DevExpress gridLookUpEdit 实现多选
一:创建类GridCheckMarksSelection #region Fileds RepositoryItemGridLookUpEdit _currentRepository; prote ...