边学边码之决策树

前言:  本文内容是笔者在学习过程中慢慢码出来的,目的是为记录各阶段的思考过程,所以可能比较琐碎和跳跃,但尽量会注意他人的可读性,请随着我的脚步一起学习吧!


决策树是机器学习中的一种分类算法,其他常用分类算法有随机森林等,本文暂不涉及,可参看决策树与随机森林


决策树由决策结点、分支和叶子组成。决策结点为一个根结点+多个内部结点,分支最末端为叶结点。根结点和内部结点是判断模块,用来判断对特征怎样分类,叶结点是终止模块。


决策树是典型的监督算法,通过样本的训练完成学习,进而对新的数据进行分类、预测。这里插入一下我在不了解决策树要解决问题时候存在的疑问:

样本的分类是唯一的吗?给定了属性值后决策树构建的结果是唯一的吗?如果不唯一,有没有一个量与树的构建快慢或深度有关?那样是不是可以找出一种更高效的分类方法?

通过分析上图的例子,我产生疑问的原因大概能知道了,决策树确实是要解决分类的问题,但是不是针对属性的分类。晃一眼看到上面的图,我会以为是要将人群按照辈分或年代等进行划分,虽然不清楚有什么意义,不过我想当然的这么以为了好几个小时,然后产生了上面的疑问。不过在弄清楚了问题后,我认为还是有必要带着上面的问题思考下去。

那么先来通俗地说一下决策树到底是要做什么,已知一堆样本对于某件事的结果,并且知道样本的很多属性,那么要根据这些属性判断新的样本对这件事的结果。结合图例,已知一群人的各种属性:年龄、性别、职业等,并且知道他们各自是否喜爱玩游戏,判断其他人是否爱玩游戏。总的来说,就是已知一些条件,要预测结果,那将条件和结果建立起联系就是决策树要做到事了,建立联系的方法不是采用传统数学的拟合这类手段建立函数形式,而是通过对样本的属性进行分类来完成。据说决策树的原理恨接近人类思考的方式呢。

下面回到算法本身的原理上面。很显然地,对于训练样本,必须属性值都已知,分类不是目的,通过分类建立属性值与布尔问题间的联系才是目的。那么它是怎样建立合理的分类的呢?是人为分好类了然后指定每个内部结点上采用什么属性做判断依据吗?在这里应该不是的,很多复杂问题人自己都搞不清楚呢,那计算机要怎样完成呢?这里就还得说一下我们这些新人小白常常缺乏一种思维,迭代、递归!要有这些思想好吗,计算机没有直觉的,很多问题不可能一轮就找到答案,学过数据结构,知道查找和排序一些算法的人应该明白这些算法都是通过一轮轮地调整向最终结果靠近的,我想决策树应该也是这样的,毕竟看着就是二叉树的一种嘛。


决策树的概况理清楚了,现在来说说具体的算法, 目前我所听说过的决策树算法有三种(后期再加):ID3、C4.5和CART。

一、归纳决策树ID3,信息增益(谁能告诉我ID3名字的由来啊)

ID3,一种贪心算法,起源于概念学习系统,算法的核心是信息熵[1]。


怎么来理解信息熵呢?介绍几个相关的定义。

       定义1:若存在n个消息,则每个消息的概率是1/pi,则每一个消息传递的信息量为-Log2(1/pi)
       定义2:若有n个消息,其给定概率分布为P=(p1,p2…pn),则由该分布传递的信息量称为信息熵。

比如事件A的全概率划分是(A1,A2,...,An),每部分发生的概率是(p1,p2,...,pn),那信息熵的计算公式就为上式。
       定义3:信息增益度是两个信息量之间的差值,其中一个信息量是需确定T的一个元素的信息量,另一个信息量是在已得到的属性X的值后需确定的T一个元素的信息量,信息增益度公式为: Gain(X, T)=Info(T)-Info(X, T)

可以看一下归纳决策树ID3中讲的例子,抛开属性值,仅以概率的方法知道新的一天打球的概率是9/14,不打的概率是5/14,仅这样来判断打不打球当然是不准的,不过需要通过这个值来计算哪些属性与打球的关系更大。

不考虑任何属性值时,新的一天打不打球的信息熵为:

-9/14*log2(9/14)-5/14*log2(5/14)=0.940

只考虑天气后,根据以往的数据,晴天——信息熵entropy=0.971,阴天——entropy=0,雨天——entropy=0.971,新的一天是晴、阴、雨的概率分别是5/14、4/14、5/14。则以天气作为变量衡量打不打球的信息熵为:5/14 × 0.971 + 4/14 × 0 + 5/14 × 0.971 = 0.693。信息增益度gain(outlook)=0.940-0.693=0.247

同样的方法,只考虑温度、湿度、风后,gain(temperature)=0.029,gain(humidity)=0.152,gain(windy)=0.048。gain(outlook)最大(即天气在第一步使系统的信息熵下降得最快),所以决策树的根节点就取天气。为什么要取增益度最大的属性作为根结点呢?不管信息熵的意义是什么,这里都统一将其作为了去不去打球的一种度量指标,信息增益度最大的属性就是对去不去打球影响最大的属性,因此当然要优先以该属性作为判断结点。


确定了根结点之后,内部结点怎么选取呢,直接根据之前计算的其他属性的信息增益度从大到小选取?应该不是。


这张图中可以看出来,要针对每一种天气情况计算其它属性的信息增益度,别忘了各种天气各种湿度各种气温等它们的组合有很多种呢,去不去打球是要结合这个因素综合决定的。那么,N1,N2,N3及其分出的结点会不会有重复的属性呢?信息熵降为0时没必要继续构造下去了怎么理解呢?算了就知道。


天气为晴天时,分别只考虑剩下的三种属性,结果见上表。entropy=-2/5*log2(2/5)-3/5*log2(3/5)=0.97095。

这个我是用excel算的,麻烦,我决定现在去试试python,后面的内容等我算完了再补充,而且还要探讨一下信息熵的意义呢。See you!



以下贴几句别处看来的话[2]:

“常见的算法有CHAID、CART、Quest和C5.0。对于每一个决策要求分成的组之间的“差异”最大。各种决策树算法之间的主要区别就是对这个“差异”衡量方式的区别。”


“决策树很擅长处理非数值型数据,这与神经网络智能处理数值型数据比较而言,就免去了很多数据预处理工作。”


为使文章完整,有部分内容会与参考资料重合,出处已标出。学习的过程是将别人的知识转化为自己的知识的过程,但关注点和疑问点肯定会有所不同,本文仅为针对自身水平的学习笔记。

相关资料:

[1] 一些信息熵的含义

[2]  决策树五大算法


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值