决策树之ID3、C4.5
决策树是一种类似于流程图的树结构,其中,每个内部节点(非树叶节点)表示一个属性上的测试,每个分枝代表该测试的一个输出,而每个树叶节点(或终端节点存放一个类标号)。树的最顶层节点是根节点。下图是一个典型的决策树(来自《数据挖掘:概念与技术》[韩家炜](中文第三版)第八章):

在构造决策树时,使用属性选择度量来选择将元祖划分成不同类的属性。这里我们介绍三种常用的属性选择度量-----信息增益、信息增益率和基尼指数。这里使用的符号如下。设数据分区\(S\)为标记类元组的训练集。假设类标号属性具有\(m\)个不同的值,定义了\(m\)个不同的类\(C_i (i=1,2,...,m)\)。设\(C_{i,S}\)是\(S\)中\(C_i\)类元祖的集合,\(|S|\)和\(|C_{i,S}|\)分别是\(S\)和\(C_{i,S}\)中元祖的个数。
上面决策树的源数据如下表,我们将以此数据说明ID3、C4.5、C5.0、CART这几种算法。

我们先解释一下这张表,表中有14条实例数据,就是我们的训练数据,其中 age,income,student,credit_rating称作条件属性,Class:buys_computer 称作是决策属性(标签)。每一个属性都有各自的值记做:Value(age)={youth,middle,senior},Value(income)={high,medium,low},Value(student)={no,yes},Value(credit_rating)={excellent,fair},Value(Class:buys_computer)={no,yes}。
1.熵(entropy)
在说明决策树算法之前,先提出一个重要的概念:熵(entropy)。

有时\(Info(S)\)也直接写作\(Entropy(S)\)。以上表中数据说明此概念:我们数一下决策属性Class:buys_computer,一共有两个类别:Yes,No。Yes的实例数是 9,No的实例数是 5。计算决策属性的熵(Entropy):

这里的决策属性S的值只有两个值(Yes,No),当然可以有多个值(s1,s2,s3,...,sk),这些决策属性的值的概率分别为:p1,p2,p3,...,pk。
2.信息增益
ID3使用信息增益作为属性选择度量。设节点\(N\)代表或存放分区\(S\)的元祖。选择具有最高信息增益的属性作为结点\(N\)的分裂属性。
我们只拿age条件属性举例,其他的属性一样:
Value(age)={youth,middle,senior}
age是youth的实例数为5(其中Yes的个数为2,No的个数为3),占总的实例数为5/14,那么针对youth的Entropy,

age是middle的实例数为4(其中Yes的个数为4,No的个数为0),占总的实例数为4/14,那么针对middle的Entropy,

age是senior的实例数为5(其中Yes的个数为3,No的个数为2),占总的实例数为5/14,那么针对senior的Entropy,

那么最后针对age条件属性的信息增益(information gain)为:

所以针对某一条件属性的信息增益(information gain)为:
那么其他三个条件属性income,student,credit_rating的信息增益为:

我们看到age的信息增益是最大的,所以作为决策树的一个根节点。我们不断地重复上面的步骤,会得到一个决策树。至此,我们完成了对ID3算法思想的描述。
ID3算法有几个缺点:
- 对于具有很多值的属性它是非常敏感的,例如,如果我们数据集中的某个属性值对不同的样本基本上是不相同的,甚至更极端点,对于每个样本都是唯一的,如果我们用这个属性来划分数据集,它会得到很大的信息增益,但是,这样的结果并不是我们想要的。
- ID3算法不能处理具有连续值的属性。
- ID3算法不能处理属性具有缺失值的样本。
- 由于按照上面的算法会生成很深的树,所有容易产生过拟合现象。
下面,引入更加强大的C4.5算法,它可以解决上面的问题。
3.C4.5算法
C4.5算法,能够处理属性是连续型的。而且,在C4.5算法中,又提出了两个新的概念:
分离信息(Split Information)和信息增益率(Information gain ratio)
首先,给出分离信息的计算方法,数学符号表达式为:
解释为:数据集通过条件属性A的分离信息。上面一个例子,数据集通过age这个条件属性的分离信息,age有三个属性值分别为:youth,middle,senior,它们各占5,4,5,所以:

再次,给出信息增益率的公式:
上面这个例子如:数据集S针对age的信息增益率,

分子和分母这两个值都已经求出来,选择信息增益率最大的那个属性,作为节点。
4.C5.0和CART算法
C5.0是一个商业软件,对于公众是不可得到的。它是在C4.5算法做了一些改进,具体请参考:C5.0算法改进
C5.0主要增加了对Boosting的支持,它同时也用更少地内存。它与C4.5算法相比,它构建了更小地规则集,因此它更加准确。
CART (Classification and Regression Trees)与C4.5算法是非常相似的,但是CART支持预测连续的值(回归)。CART构建二叉树,而C4.5则不一定。
CART用训练集和交叉验证集不断地评估决策树的性能来修剪决策树,从而使训练误差和测试误差达到一个很好地平衡点。
scikit-learn的实现为CART算法的最优版本,详细文档请参考:scikit-learn实现CART
待续~
决策树之ID3、C4.5的更多相关文章
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...
- 机器学习算法总结(二)——决策树(ID3, C4.5, CART)
决策树是既可以作为分类算法,又可以作为回归算法,而且在经常被用作为集成算法中的基学习器.决策树是一种很古老的算法,也是很好理解的一种算法,构建决策树的过程本质上是一个递归的过程,采用if-then的规 ...
- 机器学习之决策树(ID3 、C4.5算法)
声明:本篇博文是学习<机器学习实战>一书的方式路程,系原创,若转载请标明来源. 1 决策树的基础概念 决策树分为分类树和回归树两种,分类树对离散变量做决策树 ,回归树对连续变量做决策树.决 ...
- 决策树之ID3、C4.5、C5.0等五大算法
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- C5.0决策树之ID3.C4.5.C5.0算法 ...
- 决策树(ID3,C4.5,CART)原理以及实现
决策树 决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布. [图片上传失败...(image ...
- 《机器学习实战》学习笔记第三章 —— 决策树之ID3、C4.5算法
主要内容: 一.决策树模型 二.信息与熵 三.信息增益与ID3算法 四.信息增益比与C4.5算法 五.决策树的剪枝 一.决策树模型 1.所谓决策树,就是根据实例的特征对实例进行划分的树形结构.其中有两 ...
- 决策树(上)-ID3、C4.5、CART
参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解决策树): 1.https://zhuanlan.zhihu.com/p/85731206 2.https://zhuanla ...
- 决策树之ID3算法
一.决策树之ID3算法简述 1976年-1986年,J.R.Quinlan给出ID3算法原型并进行了总结,确定了决策树学习的理论.这可以看做是决策树算法的起点.1993,Quinlan将ID3算法改进 ...
- 《机器学习_09_01_决策树_ID3与C4.5》
简介 先看一个例子,某银行是否给用户放贷的判断规则集如下: if 年龄==青年: if 有工作==是: if 信贷情况==非常好: 放 else: 不放 else: if 有自己的房子==是: if ...
- 后端程序员之路 16、信息熵 、决策树、ID3
信息论的熵 - guisu,程序人生. 逆水行舟,不进则退. - 博客频道 - CSDN.NEThttp://blog.csdn.net/hguisu/article/details/27305435 ...
随机推荐
- Spark:spark df插入hive表后小文件数量多,如何合并?
在做spark开发过程中,时不时的就有可能遇到租户的hive库目录下的文件个数超出了最大限制问题. 一般情况下通过hive的参数设置: val conf = new SparkConf().setAp ...
- 分析ajax请求抓取今日头条关键字美图
# 目标:抓取今日头条关键字美图 # 思路: # 一.分析目标站点 # 二.构造ajax请求,用requests请求到索引页的内容,正则+BeautifulSoup得到索引url # 三.对索引url ...
- 【Java入门提高篇】Day15 Java泛型再探——泛型通配符及上下边界
上篇文章中介绍了泛型是什么,为什么要使用泛型以及如何使用泛型,相信大家对泛型有了一个基本的了解,本篇将继续讲解泛型的使用,让你对泛型有一个更好的掌握和更深入的认识. 上篇中介绍完泛型之后,是不是觉得泛 ...
- C++的三大特性:封装、继承和多态性的详解
封装 所谓封装就是将某些东西包装盒隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问.封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是通过外部接口以及特定的访问权限来使 ...
- ASP.NET MVC5 使用NPOI导出ExceL 返回浏览器下载
一,什么是NPOI 该项目是位于http://poi.apache.org/的POI Java项目的.NET版本.POI是一个开源项目,可以帮助您读取/写入xls,doc,ppt文件.它有着广泛的应用 ...
- github学习(三)
Git学习(二) 分支学习: 创建新分支dev:git branch dev 切换到dev分支:git checkout dev 可以简写为一句话:git checkout -b dev 可以用命令g ...
- [SDOI 2014]数表
Description 有一张N×m的数表,其第i行第j列(1 < =i < =N,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...
- bzoj 4830: [Hnoi2017]抛硬币
Description 小A和小B是一对好朋友,他们经常一起愉快的玩耍.最近小B沉迷于**师手游,天天刷本,根本无心搞学习.但是 已经入坑了几个月,却一次都没有抽到SSR,让他非常怀疑人生.勤勉的小A ...
- [Luogu 3807]【模板】卢卡斯定理
Description 给定n,m,p(1≤n,m,p≤10^5) 求 C_{n+m}^{m} \mod p 保证P为prime C表示组合数. 一个测试点内包含多组数据. Input 第一行一 ...
- ORACLE 启动过程
1 STARTUP NOMOUNT 1.读取环境变量下dbs目录下的参数文件(spfile/pfile) 查找参数文件的顺序如上面列表的,读取优先级: spfilechongshi.ora > ...