决策树归纳算法之ID3
学习是一个循序渐进的过程,我们首先来认识一下,什么是决策树。顾名思义,决策树就是拿来对一个事物做决策,作判断。那如何判断呢?凭什么判断呢?都是值得我们去思考的问题。
请看以下两个简单例子:
第一个例子
现想象一个女孩的母亲要给自己家的闺女介绍男朋友,女孩儿通过对方的一些情况来考虑要不要去,于是有了下面的对话:
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
这个女孩的决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么这个可以用下图表示女孩的决策逻辑
图1
第二个例子
此例子来自Tom M.Mitchell著的机器学习一书:
小王的目的是通过下周天气预报寻找什么时候人们会打高尔夫,他了解到人们决定是否打球的原因最主要取决于天气情况。而天气状况有晴,云和雨;气温用华氏温度表示;相对湿度用百分比;还有有无风。如此,我们便可以构造一棵决策树,如下(根据天气这个分类决策这天是否合适打网球):
图2
上述决策树对应于以下表达式:
(Outlook=Sunny ^Humidity<=70)V (Outlook = Overcast)V (Outlook=Rain ^ Wind=Weak)
看完两个例子之后,给出决策树的定义:一种类似于流程图的树结构,其中,
每个非叶子结点表示在一个属性上的测试;
每个分支代表该测试的一个输出;
每个叶子结点代表一个类标号。
看到这里,心里应该大概有了一个决策树的样子了。然后,引出两个问题:
1:如何使用决策树分类?
怎么用?那是很简单的,给定一个元组,我从决策树的根开始,一一地找到一条从根到叶子结点符合条件的路径,那么叶子结点上保存的类预测就是我们想要的答案。因此,决策树容易转换成一种分类规则(把某个类分到哪一条路径上去)。
2:为什么决策树分类器如此流行?
1:决策树的构造不需要任何领域知识或参数设置,因此适合于探测式知识发现;
2:决策树可以处理高维数据;
3:决策树的表现形式直观,容易被理解;
4:一般来说,决策树分类器具有很好地准确率;
有了以上简单的预备知识,相信你已经迫不及待地想去构造一棵决策树玩玩了。那么,问题来了,怎么去构造这棵美丽的树呢?
很显然,有些东西我们可以猜想一下:
1、既然他是一棵树,如果要构造他,一定要从根开始构造吧?!没有根的存在其他的结点毫无意义,因此,决策树的构造将会是一个自顶向下的过程(根在最顶部);
2、当我们要向下进行延拓这棵树,那么每一次选择属性进行延拓的过程就是一个递归的过程,至于选择哪一个属性用来延拓,我们一定会学习到相应地度量方法。
下面,为大家隆重推出两个方法(算法)来解决这个问题。他们就是ID3和C4.5。因为C4.5算法是ID3算法的改进版,因此,首先来介绍一下ID3是怎么回事。
打开维基百科:
ID3算法(Iterative Dichotomiser 3 迭代二叉树3代)是一个由Ross Quinlan发明的用于决策树的算法。
这个算法是建立在奥卡姆剃刀的基础上:越是小型的决策树越优于大的决策树(简单理论)。尽管如此,该算法也不是总是生成最小的树形结构。而是一个启发式算法。奥卡姆剃刀阐述了一个信息熵的概念:
这个ID3算法可以归纳为以下几点:
- 使用所有没有使用的属性并计算与之相关的样本熵值
- 选取其中熵值最小的属性
- 生成包含该属性的节点
看到这里,心里差不多对ID3有点感觉了。下面,引用一个网上的关于ID3思想的总结:
- 自顶向下的贪婪搜索遍历可能的决策树空间构造决策树(此方法是ID3算法和C4.5算法的基础);
- 从“哪一个属性将在树的根节点被测试”开始;
- 使用统计测试来确定每一个实例属性单独分类训练样例的能力,分类能力最好的属性作为树的根结点测试(如何定义或者评判一个属性是分类能力最好的呢?这便是下文将要介绍的信息增益,or 信息增益率)。
- 然后为根结点属性的每个可能值产生一个分支,并把训练样例排列到适当的分支(也就是说,样例的该属性值对应的分支)之下。
- 重复这个过程,用每个分支结点关联的训练样例来选取在该点被测试的最佳属性。
在大概了解了ID3是如何构造决策树之后,我们来对仍不太清楚的环节进行讨论。
a:在构造决策树的过程中,如何判断哪个属性是最佳属性,即我们要用哪个属性进行延拓决策树?
显然,这是一个属性相互PK的过程,谁输谁赢,要有一个评判的标准,专业名称就是属性选择度量。一般有三种常用的属性选择度量——信息增益(ID3),增益率(C4.5)和基尼指数(Gini指数,CART)。ID3使用信息增益作为属性选择度量,因此,本文只讲信息增益。他是由香农在研究消息的值或“信息内容”的信息论中提出来的。设结点N代表或存放分区D的元组。选择具有最高信息的属性作为结点N的分裂属性。该属性使结果分区中对元组分类所需要的信息量最小,并反映这些分区中的最小随机性或“不纯性”。这种方法使得对一个对象分类所需要的期望测试数目最小,并确保找到一棵简单的树(还记得“奥卡姆剃刀”么?)。
(因为书上讲的足够详细,且并不晦涩。所以,在次引用书本上的内容。)
下面作一些补充:
在信息增益中,衡量标准是看特征能够为分类系统带来多少信息,带来的信息越多,该特征越重要。对一个特征而言,系统有它和没它时信息量将发生变化,而前后信息量的差值就是这个特征给系统带来的信息量。所谓信息量,就是熵。
因此,我们在计算出每个属性的Gain()值之后,要挑最大的!
既然已经了解了熵以及信息增益的概念与计算方法。我们就拿一个例子来练练手吧。
eg:
问题描述:根据以上表中的信息,得到一棵预测顾客是否会购买电脑的决策树。
步骤:
1、计算Info(buy_computer);
buy_computer是离散的(这个例子中所有的属性都是离散的,如果是连续的,可以对其进行离散化)
表中可以看出,类no对应5个元组,类yes对应9个元组。
故得:
2、计算其余每个属性的期望信息需求。
age的熵:
age的信息增益:
显然,age在属性中具有最高的信息增益,所以它被选作分裂属性。
得到:
接下来,我们要做的事情就是递归下去。也就是把问题分为了3个子问题进行求解。
决策树归纳算法之ID3的更多相关文章
- day-7 一个简单的决策树归纳算法(ID3)python编程实现
本文介绍如何利用决策树/判定树(decision tree)中决策树归纳算法(ID3)解决机器学习中的回归问题.文中介绍基于有监督的学习方式,如何利用年龄.收入.身份.收入.信用等级等特征值来判定用户 ...
- 决策树归纳算法之C4.5
前面学习了ID3,知道了有关“熵”以及“信息增益”的概念之后. 今天,来学习一下C4.5.都说C4.5是ID3的改进版,那么,ID3到底哪些地方做的不好?C4.5又是如何改进的呢? 在此,引用一下前人 ...
- 决策树笔记:使用ID3算法
决策树笔记:使用ID3算法 决策树笔记:使用ID3算法 机器学习 先说一个偶然的想法:同样的一堆节点构成的二叉树,平衡树和非平衡树的区别,可以认为是"是否按照重要度逐渐降低"的顺序 ...
- 用Python开始机器学习(2:决策树分类算法)
http://blog.csdn.net/lsldd/article/details/41223147 从这一章开始进入正式的算法学习. 首先我们学习经典而有效的分类算法:决策树分类算法. 1.决策树 ...
- python 之 决策树分类算法
发现帮助新手入门机器学习的一篇好文,首先感谢博主!:用Python开始机器学习(2:决策树分类算法) J. Ross Quinlan在1975提出将信息熵的概念引入决策树的构建,这就是鼎鼎大名的ID3 ...
- 02-23 决策树CART算法
目录 决策树CART算法 一.决策树CART算法学习目标 二.决策树CART算法详解 2.1 基尼指数和熵 2.2 CART算法对连续值特征的处理 2.3 CART算法对离散值特征的处理 2.4 CA ...
- 决策树分类回归,ID3,c4.5,CART,及其Python代码
决策树模型 内部节点表示一个特征或者属性,叶子结点表示一个类.决策树工作时,从根节点开始,对实例的每个特征进行测试,根据测试结果,将实例分配到其子节点中,这时的每一个子节点对应着特征的一个取值,如此递 ...
- 03机器学习实战之决策树CART算法
CART生成 CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有 ...
- 决策树分类算法及python代码实现案例
决策树分类算法 1.概述 决策树(decision tree)——是一种被广泛使用的分类算法. 相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置 在实际应用中,对于探测式的知识发现 ...
随机推荐
- 创建Swing的步骤
(1)导入Swing包 (2)选择界面风格 (3)设置顶层容器 (4)设置按钮和标签 (5)将组件放到容器上 (6)为组件增加边框 (7)处理事件 (8)辅助技术支持 package Com.MySw ...
- Tomcat5内存简单优化
tomcat版本:apache-tomcat-5.5.28 解压版tomcat 修改catalina.bat文件,在开头添加如下内容: JAVA_OPTS='-Xms1024m -Xmx2048m - ...
- Hadoop分布式集群部署(单namenode节点)
Hadoop分布式集群部署 系统系统环境: OS: CentOS 6.8 内存:2G CPU:1核 Software:jdk-8u151-linux-x64.rpm hadoop-2.7.4.tar. ...
- HttpURLConnection如何添加请求头?
1.conn.setRequestProPerty(name,value),两个参数都是字符串.... 2.用httpURLConnection的setRequestProPerty(name,val ...
- ApkTool反编译和重新打包
有时会需要反编译APK,各人有各人的原因,你都懂的…… 准备工作: 下载APKTool,通过下面这个连接进行下载,https://code.google.com/p/android-apktool/d ...
- Lua之转义字符
print("\a"); --bell 硬件滴一声 print("a"); print("\b"); --back space ...
- ubuntu 的chmod 和 chown
1.chown改文件或目录的所有者和群组权限 格式 chown [OPTION]... [OWNER][:[GROUP]] FILE... 参数: -R 递归操作当前目录下的所有目录和文件: -h 更 ...
- Python+Django(Python Web项目初体验)
参考:https://blog.csdn.net/qq_34081993/article/details/79229784 Django是一个开放源代码的Web应用框架,由Python写成. 安装Dj ...
- 关于float样式
在认识float样式之前务必要认识position:absolute position:absolute 功能是:当前节点脱离文档流,对于其兄弟节点(即同一父节点下的节点)已经感觉不到他的存在(即他的 ...
- 虚拟机安装linux系统无法上网的解决方法
原文:https://www.jb51.net/article/118267.htm 周末闲来无事,用虚拟机安装了centos6.5系统,安装成功后发现不能连接网络,然后我就一脸蒙蔽了,无奈之下,只能 ...