决策树

  • Post author:
  • Post category:其他




简介





很多人都玩过一个游戏,通过限定次数的提问猜出对方在纸上写出的一个词,当然对方必须对我们的每一个猜测做出回应,通过一连串正确或者错误的判断,如果最终我们猜出了对方的那个词,那么我们就取得了胜利,决策树的工作原理就和这个游戏类似,看下面一个例子:



上面这张图就是一个典型的决策树,我们每天出门前要想一下今天是开车还是走路呢?首先看看窗外,下雨了吗?如果有再看看到底是雪还是雨?哇靠!是雪,开车吧!这样一个决策的过程就是在根节点处做出的,其他的节点可以类似的推导,每一个椭圆的节点都对应着我们需要考虑的属性(天气,气温,时间,地点…..)而每个叶子节点就是我们做出的决策了,到这里就是一棵树生长的终点。

现在如果要建立一棵决策树,需要什么数据呢?需要建立的是一堆属性到最后决策的映射关系,那么训练数据集包含了一堆属性值,以及样例正确分类的值,如下所示,对于星期六,我们有一下属性,每个属性的取值包含在了花括号内。

outlook, with values {sunny, overcast, rain}

temperature, with values {cool, mild, hot}

humidity, with values {high, normal}

windy, with values {true, false }

将各个属性去一定的值并集合在一起,就形成了一个特殊的星期天:

outlook: overcast

temperature: cool

humidity: normal

windy: false

分类的类别只有两类:N(反例),P(正例),任务是建立一个分类的方式,将属性值正确的映射至分类方式。



试想如果训练样例中只有两例,而且他们的属性值相同,但是对应着不同的分类,那么这样肯定不能从这样的数据集中正确的分类。所以我们需要足够的原料来开锅(喂给算法学习).如果训练的样例充足,我们总是可能利用训练数据来建立一棵决策树的,所以是否能不仅仅让它符合训练数据,还能在未知的数据集上表现出色?那么需要我们的决策树很好的抓住了属性与分类值之间的联系,越是简单的树约可能在未知的数据集上表现良好,因为他的复杂度较低,可能遭遇的variance也会较低,在未知的数据中的表现更接近于在训练数据中的表现。


决策树算法


Hunt算法




从原则上讲,给定我们一个训练数据集,通过各种属性的组合可以构造指数级的决策树,找出最佳的决策树在计算上是不可行的,所以决策树是人们在复杂度和效率之间权衡的产物,现在市面上的决策树都采用了贪心算法策略,在选择划分的数据属性时,采用一系列局部最优决策来构造决策树。他们的基础就是Hunt算法,算法的描述如下:


Hunt算法:


在Hunt算法中,通过递归的方式建立决策树。


1:如果数据集D中所有的数据都属于一个类,那么将该节点标记为为节点。


2:如果数据集D中包含属于多个类的训练数据,那么选择一个属性将训练数据划分为较小的子集,对于测试条件的每个输出,创建一个子女节点,并根据测试结果将D中的记录分布到子女节点中,然后对每一个子女节点重复1,2过程,对子女的子女依然是递归的调用该算法,直至最后停止。


ID3算法




ID3算法(Iterative Dichotomiser 3 迭代二叉树3代)是一个由Ross Quinlan发明的用于决策树的算法。这个算法便是建立在上述所介绍的奥卡姆剃刀的基础上:越是小型的决策树越优于大的决策树(

be simple

简单理论)。尽管如此,该算法也不是总是生成最小的树形结构,而是一个启发式算法。




从信息论知识中我们知道,期望信息越小,信息增益越大,从而纯度越高。ID3算法的核心思想就是以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。该算法采用自顶向下的贪婪搜索遍历可能的决策树空间。


所以,ID3的思想便是:



版权声明:本文为u012175010原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。