使用ID3算法构造决策树

标签: Algorithm ID3 决策树 | 发表时间:2013-03-20 10:32 | 作者:四火
出处:http://www.raychase.net

文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》

决策树

决策树是一个预测模型,它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。

这张图很好地解释了决策树:

使用ID3算法构造决策树

明天要不要出去玩?

  • 晴天:
    • 潮湿:不出去
    • 不潮湿:出去
  • 阴天:出去玩
  • 雨天:
    • 刮风:不出去
    • 不刮风:出去

例子中可以找到两层的分类依据属性,第一层是晴/阴/雨,第二层是是否潮湿和是否刮风,分类依据的确定和先后顺序对决策树的质量有决定性的影响。另外,在实际构造决策树时,经常要进行剪枝,主要是因为数据中往往存在一些噪音数据,或者是存在分类过细的问题,反而失去了分类的意义。一种是先剪枝,在构造树的过程中,当某个节点满足剪枝条件,则直接停止此分支的构造;还有一种是后剪枝,先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。

ID3算法

ID3算法是J. Ross Quinlan提出的分类预测算法,它的核心是用贪心算法来根据“信息熵”分类。何为信息熵?这个概念还是香农(C. E. Shannon)提出来的,用以表示信息的不确定性。信息不确定的因素越多,这个熵就越大。

如果一组数据由{d1,d2,…,dn}构成,其和是sum,那么信息熵可以表示为:

使用ID3算法构造决策树

下面举例来说明这个公式:

假使说我们要研究狗的智商(目标属性),潜在的关联因素包括颜色和毛的长度。

颜色(color) 毛的长度(length) 智商(IQ)
black
white
white
white

3次出现“高”智商,1次出现“低智商”,所以目标属性IQ的信息熵:H IQ(D)=-(2/4)log 2(2/4)-(1/4)log 2(1/4)

color属性在取不同的值对应目标属性IQ的信息熵:

  • 在color取值为black的时候,IQ只取“高”这个值:H color(D black)=-(1/1)log 2(1/1)
  • 在color取值为white的时候,IQ取值有两个“高”,一个“低”:H color(D white)=-(1/3)log 2(1/3)-(2/3)log 2(2/3)

而color属性的整体信息熵是上述二者的加权平均值:H color(D)=(1/4)H color(D black)+(3/4)H color(D white)。同样可以求得H length(D)。

现在定义信息增益Gain color=H IQ(D)-H color(D),Gain length=H IQ(D)-H length(D),它是信息熵的有效减少量,值越高,说明目标属性IQ在参考属性处损失的信息熵越多,也就是失去的不确定性越多,那么在决策树进行分类的时候,这个参考属性应该越早作为决策的依据属性。

这个例子中如果Gain length > Gain color,说明length比color要对IQ有更大的影响,所以决策树中,要先依据length来进行分类。

在实际应用中,往往引入一个“阈值”,当节点下的任意一分类所占百分比超过这个阈值时,就不再进行分类,以避免产生出过小的没有实际意义分类节点。

ID3算法也存在诸多不足,比如分类偏向于取值数量,只能处理离散数据等等问题。C4.5算法是对ID3的一个改进,但是总体来看,由于需要反复遍历数据,二者都是效率很低的算法。

文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》

分享到:

相关 [id3 算法 构造] 推荐:

使用ID3算法构造决策树

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 决策树是一个预测模型,它代表的是对象属性与对象值之间的一种映射关系. 树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值. 这张图很好地解释了决策树:. 例子中可以找到两层的分类依据属性,第一层是晴/阴/雨,第二层是是否潮湿和是否刮风,分类依据的确定和先后顺序对决策树的质量有决定性的影响.

缓存算法

- lostsnow - 小彰
没有人能说清哪种缓存算法由于其他的缓存算法. (以下的几种缓存算法,有的我也理解不好,如果感兴趣,你可以Google一下  ). 大家好,我是 LFU,我会计算为每个缓存对象计算他们被使用的频率. 我是LRU缓存算法,我把最近最少使用的缓存对象给踢走. 我总是需要去了解在什么时候,用了哪个缓存对象.

BFPRT算法

- zii - 小彰
BFPRT算法的作者是5位真正的大牛(Blum 、 Floyd 、 Pratt 、 Rivest 、 Tarjan),该算法入选了在StackExchange上进行的当今世界十大经典算法,而算法的简单和巧妙颇有我们需要借鉴学习之处. BFPRT解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分析,BFPRT可以保证在最坏情况下仍为线性时间复杂度.

贪心算法

- Shan - 博客园-首页原创精华区
顾名思义,贪心算法总是作出在当前看来最好的选择. 也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 当然,希望贪心算法得到的最终结果也是整体最优的. 虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解. 如单源最短路经问题,最小生成树问题等.

缓存算法

- 成 - FeedzShare
来自: 小彰 - FeedzShare  . 发布时间:2011年09月25日,  已有 2 人推荐. 没有人能说清哪种缓存算法由于其他的缓存算法. (以下的几种缓存算法,有的我也理解不好,如果感兴趣,你可以Google一下  ). 大家好,我是 LFU,我会计算为每个缓存对象计算他们被使用的频率.

K-Means 算法

- - 酷壳 - CoolShell.cn
最近在学习一些数据挖掘的算法,看到了这个算法,也许这个算法对你来说很简单,但对我来说,我是一个初学者,我在网上翻看了很多资料,发现中文社区没有把这个问题讲得很全面很清楚的文章,所以,把我的学习笔记记录下来,分享给大家. k-Means 算法是一种  cluster analysis 的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法.

查找算法:

- - CSDN博客推荐文章
从数组的第一个元素开始查找,并将其与查找值比较,如果相等则停止,否则继续下一个元素查找,直到找到匹配值. 注意:要求被查找的数组中的元素是无序的、随机的. 比如,对一个整型数组的线性查找代码:. // 遍历整个数组,并分别将每个遍历元素与查找值对比. 要查找的值在数组的第一个位置. 也就是说只需比较一次就可达到目的,因此最佳情况的大O表达式为:O(1).

排序算法

- - 互联网 - ITeye博客
排序算法有很多,所以在特定情景中使用哪一种算法很重要. 为了选择合适的算法,可以按照建议的顺序考虑以下标准: .     对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要.  一、冒泡(Bubble)排序——相邻交换 .  二、选择排序——每次最小/大排在相应的位置 .

联接算法

- - CSDN博客数据库推荐文章
本文摘自《锋利的SQL》: http://item.jd.com/10380652.html. 在Microsoft SQLServer Management Studio中执行查询时,如果选定工具栏中的 按钮,可以看到为查询生成的执行计划. 执行计划以图形方式显示了SQL Server查询优化器选择的数据检索方法,如表扫描、排序、哈希匹配等.

理解EM算法

- Chin - 我爱自然语言处理
EM(Expectation-Maximization)算法在机器学习和自然语言处理应用非常广泛,典型的像是聚类算法K-means和高斯混合模型以及HMM(Hidden Markov Model). 笔者觉得讲EM算法最好的就是斯坦福大学Andrew Ng机器学习课的讲课笔记和视频. 本文总结性的给出普遍的EM算法的推导和证明,希望能够帮助接触过EM算法但对它不是很明白的人更好地理解这一算法.