看到标题的同学可能会有点疑问,在数据挖掘十大经典算法里,ID3的名字并不在列。
其实,ID3与位列十大经典算法的C4.5、CART本是同源,他们都属于决策树算法家族,都算是决策树构建算法。后两者也都是在ID3的基础上发展优化得来。因此,本文以ID3为入口,为大家讲解决策树类算法的基本思想和ID3的具体逻辑,有了这部分铺垫,之后再来看C4.5和CART便是会是水到渠成。
什么是决策树
既然ID3是一种决策树分类算法,那么首先当然先来讲讲什么是决策树。应该说,决策树并不是一种具体的算法,而是一种分类思想。这种思想也非常直观,就是通过不断回答问题的方式来划分类别,而最终划分的结果显然是可以表达为一个树状结构图,这棵树便称之为决策树。
其实这种通过提问层层划分的思想可以说是我们日常生活中最直观也最常用的分类思路之一,这里援引一个网上看到的极为生动的例子来表现决策树的分类过程:
以下这个例子来自博客http://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html
现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。这个女孩的决策过程就是典型的分类树决策。
相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。
假设这个女孩对男人的要求是:
30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么这个可以用下图表示女孩的决策逻辑
这思路是不是直白到不行,当然原作者也说了:
此决策树纯属为了写文章而YY的产物,没有任何根据,也不代表任何女孩的择偶倾向,请各位女同胞莫质问我
什么样的决策树才算好?
相信看到这里,没有人还会不理解决策树这种分类思想。但是要作为一种能够解决实际问题的算法,光有思想显然还远远不够,还应该有明确的方法来构建这棵树。通过前面的例子,大家应该也有直观的感受,在一个决策树的决策过程中,最关键的就是这些用来分支所提出的问题,该问什么样的问题、怎样根据答案划分分支、先问什么后问什么,这些显然直接决定了一颗决策树的效率优劣,而这些也就是本文所讲的ID3以及后面会讲到CART、C4.5要解决的问题。
事实上,在构建决策树的过程中,所追求的标准应该是每一步分裂的纯度。所谓纯,也就是要尽可能让每一步分裂出来的子集中的元素属于同一类别。也就是问题要问的够“准”,比如对于分两类的情况,最好找到一个问题,可以直接根据答案区分出预期的两类;而如果一个问题问完,分出的几支中还都同时包含预期的两类中的元素,还要进一步更多的问题才能加以区分,那么就表示这一步的分裂不够纯。
一点点信息论
那么,既然要追求“纯”,那么如何找到每一步分裂时能使结果最纯的分裂方式呢?这显然先要对纯给一个能够定量计算的定义。
在这里,不同的决策树算法,所采取的标准有所不同,而在ID3算法里,采用的是信息论当中的信息熵的增益这一概念来衡量分裂的效果。
“熵”这一概念本来是来自热力学,所描述的是能量在空间中分布的混乱程度,能量分布得越混乱,熵就越大。一个体系的能量完全均匀分布时,这个系统的熵就达到最大值。
而我们信息学的祖师爷克劳德·香农把这个概念引入了信息论当中,用来描述信息的混乱程度。并且给出了信息熵的计算公式
其中,pi
表示的是一个信息要素(可以对应我们数据挖掘中一种特征值的一种取值)的概率。
而关于这个公式是如何得出的,牵涉信息论的知识点,并不是本文所关注的重点,这里不做展开。
想要简要了解的同学们可以参阅以下链接https://www.zhihu.com/question/22178202,阅读排名第一的回答
简言之,我们可以这样去理解信息熵增益这个概念:
既然信息熵描述的是信息的混乱程度,而我们分类的过程其实是让信息越来越清晰,也就是信息熵越来越小的过程。因此,信息熵增益最大也就是要找到一个划分能比其他划分带来的信息熵的减小更多。
ID3算法过程
接下来,我们通过一个例子来直观认识一下ID3的算法过程:
假设我们已经收集了隔壁老王在各种外部条件下是否会去打高尔夫球这件事的数据,如下表:
气温高低 | 天气概况 | 是否工作日 | 是否去打球 |
---|---|---|---|
低温 | 晴 | 否 | 打球 |
低温 | 下雨 | 是 | 没打 |
舒适 | 有风 | 是 | 没打 |
舒适 | 有风 | 是 | 没打 |
高温 | 有风 | 是 | 没打 |
舒适 | 下雨 | 否 | 没打 |
舒适 | 晴 | 否 | 打球 |
高温 | 有风 | 否 | 没打 |
舒适 | 晴 | 否 | 没打 |
低温 | 晴 | 是 | 打球 |
现在我们需要根据这些训练集来构建一棵决策树,以便在将来某一天针对当时的气温、天气和是否工作日这三个条件来预测老王是否会去打球。
显然,为了构建决策树,我们可以用这三类特征值分别作为每一次划分的问题,但要决定的就是我们应该先选用哪一个特征值做第一次划分?
这时,根据前面学习到的信息熵增益的理论,假设原本的信息熵为
而我们要以特征值R作为第一次划分,则划分之后的信息熵为
我们的目标是让信息熵增益,即两个值的差值达到最大
然而,不论我们选择了哪个特征值R,减号前面的Info(D)都是一样的,因此我们根本不用去计算这个值,只需要让减号后面的值最小即可。
接下来我们就依次来计算各个特征值划分后的信息熵,以气温高低为例,划分之后的信息熵为:
低温的概率 * 低温情况下的信息熵 + 舒适的概率 * 舒适情况下的信息熵 + 高温概率 * 高温情况下的信息熵
即
同理,我们也可以算出按照天气概况和是否工作日划分出来的信息熵分别为0.326和0.846,因此我们应该选择新信息熵最小的,也就是天气概况来作为第一次划分,使得划分最“纯”。
这样,在第一步之后,我们的决策树已经变成了如下所示:
那么接下来我们需要决策的是第二步划分选用气温高低还是是否工作日。显然,重复第一步的动作,就可以计算出这一步改选谁了。以此类推,直到得到整颗完整的决策树。
简单总结一下ID3的算法过程就是:
- 依次将数据中的每一个特征作为分支标准,并计算其相对于原始数据的信息增益,选择最大信息增益的分支标准来划分数据
- 按照选出的特征属性进行划分,得到每一个子划分
- 对每一个子划分重复上述过程,直到得到完整决策树
如何处理连续数据
其实上面给出的例子是一种简化版的决策过程,因为所有特征属性都是离散化的,其实在实际当中,许多属性都是连续值,比如例子当中的气温。那么对于特征属性为连续值,应该如何使用ID3算法呢?
先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点,从第一个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最小期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。
ID3的特点与优劣
优点:
- 可以处理同时具有离散和连续数据的输入
- 分类过程与领域知识无关,几乎所有模式和场景都可以跑出结果
缺点:
- 一次只用一类特征值进行划分
- 在样本量较小时,可能会导致过度分类
- 对连续数据的处理不够好
- 对样本数据缺失的情况无法处理
- 不适合处理包含多重分支的特征值
好了,这一part对决策树和ID3算法的介绍就到这里。在下一篇文章当中,会继续对C4.5,CART以及决策树的剪枝等概念做进一步的讲解。