决策树(理论篇)

定义

  由一个决策图和可能的结果(包括资源成本和风险组成),用来创建到达目的的规划。——维基百科

通俗理解

  给定一个输入值,从树节点不断往下走,直至走到叶节点,这个叶节点就是对输入值的一个预测或者分类。

算法分类

ID3(Iterative Dichotomiser 3,迭代二叉树3代)

历史

  ID3算法是由Ross Quinlan发明的用于生成决策树的算法,此算法建立在奥卡姆剃刀上。奥卡姆剃刀又称为奥坎的剃刀,意为简约之法则,也就是假设越少越好,或者“用较少的东西,同样可以做好的事情”,即越是小型的决策树越优于大的决策树。当然ID3它的目的并不是为了生成越小的决策树,这只是这个算法的一个哲学基础。

引入

  信息熵。熵是热力学中的概念,是一种测量在动力学方面不能做功的能量总数,也就是当总体熵的增加,其做功能力也下降,熵的量度正是能量退化的指标——维基百科。香农将“熵”的概念引入到了信息论中,故在信息论中被称为信息熵,它是对不确定性的测量,熵越高,不确定性越大,熵越低,不确定性越低。

  那么到底何为“信息熵”?它是衡量信息量的一个数值。那么何又为“信息量”?我们常常听到某段文字信息量好大,某张图信息量好大,实际上指的是这段消息(消息是信息的物理表现形式,信息是其内涵——《通信原理》)所包含的信息很多,换句话说传输信息的多少可以采用“信息量”去衡量。这里的消息和信息并不完全对等,有可能出现消息很大很多,但所蕴含有用的信息很少,也就是我们常说的“你说了那么多(消息多),但对我来说没用(信息少,即信息量少)”。这也进一步解释了消息量的定义是传输信息的多少。

  进一步讲,什么样的消息才能构成信息呢?

  我们为什么会常常发出感叹“某段文字的信息量好大”,得到这条消息时是不是有点出乎你的意料呢?比如,X男和X男在同一张床上发出不可描述的声音,这段消息对于你来讲可能就会发出“信息量好大”的感叹。再比如,某情侣在同一张床上发出不可描述的声音,这段消息对于你来讲可能就是家常便饭,并不会发出“信息量好大”的感叹。前一个例子的消息中所构成的信息很大,后一个例子的消息中所构成的信息很小,这是因为,只有消息中不确定的内容才构成的消息才构成信息。消息所表达的事件越不可能发生,越不可预测,就会越使人感到惊讶和意外,信息量就越大——《通信原理》。

  我们解释了消息、信息、信息量之间的关系。回到信息熵上来之前,我们还得继续上面的话题,上面提到了“事件发生的可能性”,这很理所当然的是可以以出现的概率来描述,也就是说我们现在更进一步,信息量与消息中事件发生的概率相关,上面的例子就可以这么描述:消息中的事件发生概率越小,信息量越大,消息中的事件发生的概率越大,信息量就越小。

  而信息熵是接收的每条消息中的包含的信息的平均值,数学上也就是信息量的期望,也就是在结果出来之前对可能产生的信息量的期望。

  最后小结,如果熵很大,也就是信息量的期望大,也就是事件的概率小,更或者事件的不确定性大。

  先给出信息熵的公式:,X为随机变量,其值域为{},其中P为X的概率质量函数。下面我们来逐步推导出这个公式(据《通信原理》):

  1. 非负性。消息中所含信息量就是该消息中的事件所出现的概率:
  2. 单调性。概率越大,消息量越小,P(x)=1,I=0;P(x)=0,I=∞,完全不可能发生的事情它的信息量就很大很大,例如太阳西边生气了这种事情。
  3. 累加性。若干个相互独立事件构成的消息,所含信息量等于各独立事件消息量之和,消息量具有可加性:
  4. 综上,满足以上三个性质的公式,香农将信息量定义为:
  5. 信息熵是信息量的期望,也就是,离散型随机变量的期望也即是统计平均值,是试验中每次可能的结果乘以其结果概率的综合,那么

定义

  在引入了信息熵这个概念后,接着开始正式介绍ID3算法。在算法的每次迭代中,它遍历数据集每个未使用的属性,并计算该属性的熵H(S)(或信息增益IG(S)),接着选取熵最小的属性(或信息增益最大的属性),根据选择的属性对样本进行分类。(On each iteration of the algorithm, it iterates through every unused attribute of the set S and calculates the entropy H(S) (or information gain IG(S)) of that attribute. It then selects the attribute which has the smallest entropy (or largest information gain) value. The set S}is then split by the selected attribute (e.g. age is less than 50, age is between 50 and 100, age is greater than 100) to produce subsets of the data.——wikipekia)对于ID3,实际上是计算信息熵的一个过程,选择信息熵最低的属性或者称为特征,当然通常是计算信息增益,下面给出公式及推导过程。

公式及推导过程

  信息增益:IG(A) = H(D) – H(D|A)。D表示样本集,A表示属性(或特征),IG(A)表示特征A的信息增益,H(D)表示样本的信息熵,H(D|A)表示特征A对样本集D的经验条件熵(即条件概率分布)。
  信息熵在前面已经介绍过,对于经验条件熵,只需回顾一下条件概率分布。
  对于离散型随机变量X和Y,随机变量Y在条件{X = x}下的条件概率分别是:表示X和Y的联合分布概率,即“X=i,并且Y=j发生的概率”,这是数学公式。

  对于条件熵H(Y|X=x)为变数Y在变数X取特定值x条件下的熵,那么H(Y|X)就是H(Y|X=x)在X取遍所有x后平均的结果。那么可得出以下公式推导:

  整个推导过程和条件概率分布公式息息相关。
  最后也即得出信息增益的公式:,代入即可。

  给出《机器学习》中的公式:,其中充当第j个分区的权重。

练习

  一共有14个样本数据D,且有年龄、收入、是否是学生、信用评级4个特征,分类为是否可能购买电脑。计算样本数据的信息熵以及各个特征的信息增益。

  根据信息熵公式:可得:(py表示购买电脑的概率,pn表示不购买电脑的概率)

  接下来计算年龄的条件熵:

  其中低年龄占5/14,且购买电脑占2/5,不能购买电脑占3/5;

  中年龄占4/14,且购买电脑占4/4,不能购买电脑占0/4;
  高年龄占5/14,且购买电脑占3/5,不能购买电脑占2/5。

  根据条件熵的计算公式:可得:

  关于条件熵这里要再多加解释一下公式,在本例中X表示年龄且X={低,中,高},也就是说X要取完这三个值,在这三个值的条件确定下Y的条件熵,而Y表示是否购买电脑且Y={是,否},换算成公式即是:

  上面我们已经计算过,H(D)=0.94那么:

  可得:

  ,依次计算出每个特征的信息增益,选取信息增益最大的特征作为分裂特征。接着再递归计算信息增益形成一棵树决策树。

C4.5

历史

  此算法也是由ID3算法的发明者Ross Quinlan所发明,我查了资料没有找到为什么取名叫C4.5,维基百科上的解释也是successor of ID3,只说明了它是ID3算法的改进,同时也还有C5.0。

引入

  信息增益率。既然是ID3算法的改进,那说明它们既有相同点也有不同点,相同点就是同样是基于信息熵,不同点就是ID3使用的是信息增益来作为选择分裂特征,而C4.5使用的则是信息增益率。
  之所以会有ID3的改进,是因为ID3使用信息增益时如果某个特征数目较多很有可能对此特征有所偏好,改用信息增益率就会减少这种影响。
  在前面我们介绍了信息熵以及信息增益,那么什么又是信息增益率呢?信息增益率使用一个叫做“分裂信息”值将信息增益规范化,分类信息的公式为:

,和信息增益有点类似。

定义

  C4.5同ID3类似,不同的只是选择分裂特征的方式不同,C4.5引入的是“信息增益率”来选择,选择信息增益率大的特征,参考ID3算法定义。

公式及推导过程

  上面引入了信息增益率,开头我们提到了C4.5不直接只用“信息增益”来选择分裂特征,而是通过“信息增益率”,而信息增益率是在信息增益的基础上除以分类信息。

  ,信息增益IG(A)以及分裂信息SplitInfo(D|A)均已给出,此处不再重复。

练习

  还是ID3中的例子,在ID3的例子中我们已经计算了特征为age时的信息增益,我们只需再计算出特征age的分裂属性即可。

  当然增益率就根据得出。

  具体数值以及其他特征的增益率不再给出,选择增益率最大的特征。

CART(Classification and Regression Trees,分类回归树)

历史

  ID3、C4.5和CART都是决策树模型的经典算法。决策树不仅可以用来分类,同时它也可以做回归,CART就是既可以用作分类也可以用作回归。它是由Leo Breiman, Jerome Friedman, Richard Olshen与Charles Stone于1984年提出的。

引入

  基尼(Gini)指数。与ID3和C4.5通过信息熵来确定分裂特征不同,CART通过一个叫基尼指数的东西来确定分裂特征。
  在经济学中也有一个基尼系数(或基尼指数),我暂时未找到这两者之间有没有什么联系,或者这里的基尼指数是否引自经济学。
  基尼指数和信息熵类似,都是数值越大其不确定性越大,之所以选用基尼指数是因为相对于信息熵的计算更快一些。

定义

  CART是一个分类及回归的算法,使用基尼指数小的特征作为分裂特征。

公式及推导过程

  CART算法其核心公式就是基尼指数的计算,基尼指数越大不确定越大,基尼指数的计算公式为:

  ,其中pi是D中元组中Ci类的概率。

练习

  现在有10个样本,其中有是否有房、婚姻状况、年收入3个特征,根据这三个特征来判断是否拖欠贷款。

  先选取是否有房这个特征来计算它的基尼指数。

  可知有房者占3/10,其中未拖欠贷款占3/3,拖欠贷款占0/3;
  无房者占7/10,其中未拖欠贷款占4/7,拖欠贷款占3/7;

  有房者的基尼指数记为;

  无房者的基尼指数记为;

  是否有房的基尼指数为

  以此计算各个特征的基尼指数,选取最小的作为分裂特征。



  机器学习中有关决策树相关的理论方面大致已经介绍完毕,实际上是主要介绍了ID3、C4.5、CART三种算法,对于决策树并没有很详尽的理论讲解,例如构造过程剪枝等。在后面对决策树的学习中随时再来舔砖加瓦,也请看到此篇博客的朋友能给予指点。

时间: 2024-08-26 00:53:59

决策树(理论篇)的相关文章

【SSH2(理论篇)】--Struts2配置详解

上篇博客讨论了SSH2框架模型,在开发过程中发现SSH2的开发模型其实类似于经典的三层模式,在每一层中分别添加了不同的框架,显示层使用的是Struts2进行配置的,业务逻辑层使用的是Spring配置,数据持久层则采用的是Hibernate,开发模式简单易懂,接下来将会分别从三层着手讨论每一层的运行内容. 一.Struts体系简介 struts,是Apache软件基金会(ASF)赞助的一个开源项目,它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-V

【机器学习】Logistic Regression 的前世今生(理论篇)

Logistic Regression 的前世今生(理论篇) 本博客仅为作者记录笔记之用,不免有非常多细节不正确之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上本文链接,不甚感激! http://blog.csdn.net/cyh_24/article/details/50359055 写这篇博客的动力是源于看到了以下这篇微博: 我在看到这篇微博的时候大为触动,由于,如果是rickjin来面试我.我想我会死的非常慘,由于他问的问题我基本都回答不上来.

Logistic Regression 的前世今生(理论篇)

[机器学习]Logistic Regression 的前世今生(理论篇) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上本文链接,不甚感激! http://blog.csdn.net/cyh_24/article/details/50359055 写这篇博客的动力是源于看到了下面这篇微博: 我在看到这篇微博的时候大为触动,因为,如果是rickjin来面试我,我想我会死的很惨,因为他问的问题我基本都回答不上

三层学习------理论篇

学校放假了,刚回家的孩子就像个客人被父母招待着.在放假的前几天里,你尽管开口,想吃啥爸妈都会满足你,不过好景可不长!在我家,厨房是老妈的地盘,买菜.做饭.洗碗刷锅,一个人全包了.而在饭店吃饭呢,吃饭的人多了,顾客点的饭菜种类各不相同.前前后后,一个人忙乎,哪里顾得过来,所以饭店就有了分工.前台服务员负责将顾客点的菜上报给厨师和:厨师根据上报的菜单做菜:采购员负责柴米油盐酱醋茶.这样,大家各司其职,井井有条. 我们在家中吃饭比较简单,没有具体的分工.饭店就是一个复杂庞大的系统了,需要合理规划,分工

MySQL知识理论篇

此篇文件献给正在学习MySQL的同学们,如果希望探讨学习请加我QQ:402283866 [思维理论篇] MySQL的定义 MySQL就是一个存表格的仓库,用规范的语句可以操作这个表(我们称sql语句).这些表格的每一行为一个单位,被公司记录一些信息. MySQL的使用方法 MySQL中的表格,每一行在被调用的时候会使用一些标准的语句,语句可以完成增删改查等操作.这些语句有6类,常用的有3类,每一类只有3-5个总有固定的单词,反复练习很容易掌握. MySQL主从同步 因为两个原因要设置主从同步:1

小蚂蚁学习sphinx(1)--理论篇

网上有视频在讲php+mysql+sphinx,以前只是听说过,心想今天终于能够学习一下涨涨见识了,一个小时的理论篇讲完,并没有预想中那种汲取大量知识的满足感,一来讲的理论多一些,二来都是在linux下的操作,没办法实践,先把今天的小笔记写一下,以后慢慢钻研这块内容. sphinx生成索引数据,并为数据库提供更专业的搜索功能. 为什么要用sphinx?1.做搜索时当数据量很大单纯的mysql搜索比较慢(如果表进行了分表会更慢)2.搜索中文分词3.速度快 获取sphinx.http://sphin

二进制序列化与反序列化。Net理论篇上(一)

对于从事底层信息通信的同行而言,序列化及反序列化想必都是耳熟能详的.脱离很多书面的标准概念,就个人理解而言,序列化和反序列化的本质其实为了找到一种公共的通用的数据格式达到一个无界的境界,正如方言对于普通话,各国语言对于英语.而我们需要做的是去发现这么一种具体的格式,并且完成一个相对对称的特性,如同压缩跟解压缩. 常规的序列化和反序列化的格式通常有如下几种:binary,JSON, XML和SOAP等. 当然有其他的,这个只能恕我孤陋寡闻了.通常我们会选取短小精悍的JSON 和更具通用的XML,当

Oracle内存组件理论篇一

目标 1.SGA结构 2.PGA结构 1.SGA Shared pool 1).共享池是对SQL.PL/SQL程序进行语法分析.编译.执行的内存区域. 在执行SELECT * FROM emp语句时,会对sql语句进行语法分析->编译->生成执行计划->运行执行计划等,这些操作都在共享池中完成: 如果再次执行SELECT * FROM emp语句时,会在共享池中查找是否有相同的sql,如果存在则省去编译.生成执行计划操作步骤而是直接运行执行计划. 因此养成良好的编码习惯对于提高oracl

三层架构-------理论篇

概念: 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦合"的思想. 各层概念 1.表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得. 2.业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理. 3.数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添.删除.修改.查找等. 注:应用三层离不开另一个重要的类:实体类,

机器学习之理论篇—线性模型

机器学习之理论篇-线性模型 2016-05-02 雷厉风行 机器学习与大数据算法 线性模型是机器学习中的最基本模型,其形式简单.易于建模.线性回归模型虽然简单,但却非常的实用,许多非线性模型也都是建立在线性模型的基础之上的. 线性模型定义为由n个属性x=(x1,x2-xn),其中xi为x在第i个属性上的取值,线性模型通过这些属性的线性组合来建立预测函数: f(x)=β0+β1X1+β2X2+-βnXn 写成向量形式为:f(x)=βX 因为估计我们想让f(x)尽可能的接近其真实值yi,所以求β向量