浅谈决策树

决策树(decision tree)是一种常见的机器学习方法。看了周志华西瓜书后来简要谈谈自己的认识:
首先,引入了“信息熵”的概念,信息熵(information entropy)是离散随机事件的出现概率,是衡量样本集合纯度最常用的一种指标,与热力学的熵有密切的关系。
通常,一个信源发送出什么符号是不确定的,衡量它可以根据其出现的概率来度量。概率大,出现机会多,不确定性小;反之就大。这种不确定性即为熵。
熵的函数需要满足以下两个条件:不确定性函数f是概率P的单调递降函数;两个独立符号所产生的不确定性应等于各自不确定性之和,即f(P1,P2)=f(P1)+f(P2),这称为可加性。同时满足这两个条件的函数f是对数函数,即 f(p)=log1p=−logp 。
假定当前样本集合D中第(k)类样本所占的比例为pk(k=1,2,….,|y|),D的信息熵定义为 Ent(D)=−∑|y|k=1pKlog2pk,其中y为样本种类数。
式中对数一般取2为底,单位为比特。但是,也可以取其它对数底,采用其它相应的单位,它们间可用换底公式换算。 Ent(D)的值越小,D的纯度越高。Ent(D)最小值为0,最大值为log2|y|
对于样本的属性a有V种可能的选择{a1,a2,...,aV},在进行划分时会产生V个分支点,根据属性a对样本进行划分时可获得“信息增益”(information gain):
Gain(D,a)=Ent(D)−∑Vv=1|Dv||D|Ent(Dv)
其中Dv属性为av的样本数,D表示总样本数;一般而言,信息增益越大,意味着使用属性a进行划分所获得的“纯度提升”越大,这是用来进行决策树属性划分的依据之一。ID3(Iterative Dichotomiser)决策树就是以信息增益为标准来划分的。

用周老师的西瓜数据集2.0进行分析,在样本中正例占为p1=8/17,反例为p2=9/17,可以计算出根节点的信息熵为:
Ent(D)=−∑k=12pklog2=−817log2817+917log2917=0.998
先用颜色这一属性进行分类进行分类,得到三个属性值D1(青绿),D2(乌黑),D3(浅白),生成三个分支。其中D1青绿包含6个样本,其中正例p1=3/6,反例p2=3/6;D2乌黑含6个样本其中正例p1=4/6,反例p2=2/6;D3浅白含5个样本其中正例p1=1/5,反例p2=4/5;三个分支节点的信息熵根据公式可求出:
Ent(D1)=−(36log236+36log236)=1
Ent(D2)=−(26log226+46log246)=0.918
Ent(D3)=−(15log215+45log245)=0.722
根据公式可计算出属性“色泽”的信息增益为:
Gain(D,色泽)=Ent(D)−∑3v=1|Dv||D|Ent(Dv)=0.998−(617∗1.000+617∗0.918+517∗0.722)=0.109
同理我们可以求出其他属性的信息增熵:
Gain(D,根蒂)=0.143;Gain(D,敲声)=0.141;
Gain(D,纹理)=0.381;Gain(D,脐部)=0.289;
Gain(D,触感)=0.006
从中可以看出纹理的信息增熵最大,所以用它来做为对根节点的划分属性较为适合,划分后如下图:

分成三个支点:D1(清晰),D2稍糊,D2模糊
对于支点D1可用属性{色泽,根蒂,敲声,脐部,触感}进行划分,仿照对根节点的划分方法,求出各属性的信息增熵:
Gain(D1,色泽)=0.043;Gain(D1,根蒂)=0.458;
Gain(D1,敲声)=0.331;Gain(D1,脐部)=0.458;
Gain(D1,触感)=0.458
从结果中可以看出根蒂,脐部,触感的信息增熵一样,可任选其一对D1进行分类,类似的对每个节点用信息增熵进行划分,最后可以得到:

这是ID3决策树对西瓜数据2.0进行划分的结果。

时间: 2024-07-29 08:46:24

浅谈决策树的相关文章

浅谈Python中copy()方法的使用

  这篇文章主要介绍了浅谈Python中copy()方法的使用,Python中的拷贝分为潜拷贝和深拷贝,本文只是简单介绍用法,需要的朋友可以参考下 copy()方法返回字典的浅拷贝. 语法 以下是copy()方法的语法: ? 1 dict.copy() 参数 NA 返回值 此方法返回字典的浅拷贝. 例子 下面的例子显示了copy()方法的使用. ? 1 2 3 4 5 6 #!/usr/bin/python   dict1 = {'Name': 'Zara', 'Age': 7};   dict

浅谈document.write()输出样式

  这篇文章主要介绍了浅谈document.write()输出样式,十分的简单实用,有需要的小伙伴可以参考下. js中的最基本的命令之一:document.write(),用于简单的打印内容到页面上,可以逐字打印你需要的内容--document.write("content"),这里content就是需要输出的内容;当然还有一种情况,需要输出JS之中比如变量等等变化的东西,那么就需要用document.write(+variable);当然variable就是你想要输出的变量. 既然可

图标字体化浅谈[转]

在做手机端Web App项目中,经常会遇到小图标在手机上显示比较模糊的问题,经过实践发现了一种比较好的解决方案,图标字体化.在微社区项目中,有很多小的Icon(图 标),如分享.回复.赞.返回.话题.访问.箭头等,这些Icon(图标)一般都是纯色的.开始制作时考虑用双倍大小的Sprite图,通过CSS样式设 置只显示二分之一尺寸,这样在Retina屏上显示的大小是正常的,一旦放大屏幕后图标又变得模糊不清,测试的效果不是很理想,后来又考虑多套图标适配方 案.SVG矢量图等,都因为种种原因放弃掉了(

浅谈PHP5中垃圾回收算法(Garbage Collection)的演化

前言:PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection).现在如果去PHP官方网站(php.net)可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.3版本对5.2并不是完全兼容.PHP5.3在PHP5.2的基础上做了诸多改进,其中垃圾回收算法就属于一个比较大的改变.本文将分别

浅谈算法和数据结构 十一 哈希表

在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度: 可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度. 那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table) 什么是哈希表 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 哈希的思路很简单

浅谈关于JavaScript API设计的一些建议和准则

  这篇文章主要介绍了浅谈关于JavaScript API设计的一些建议和准则,文中列举了许多知名的JS API进行辅助说明,极力推荐!需要的朋友可以参考下 设计是一个很普遍的概念,一般是可以理解为为即将做的某件事先形成一个计划或框架. (牛津英语词典)中,设计是一种将艺术,体系,硬件或者更多的东西编织到一块的主线.软件设计,特别是作为软件设计的次类的API设计,也是一样的.但是API设计常常很少关注软件发展,因为为其他程序员写代码的重要性要次于应用UI设计和最终用户体验. 但是API设计,作为

浅谈在openSUSE下ASP.NET 4开发环境配置(1)

浅谈在openSUSE下ASP.NET 4开发环境配置(1)

浅谈ASP.NET MVC 3中如何使用Model

昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^ 原文地址:http://www.youguanbumen.net/Article.aspx?id=79 原文: 前两天写了个文章ASP.NET MVC 3 -- Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见

“IT列国”之“毛遂自荐”--浅谈一个优秀项目经理的基本素质

素质|项目|项目 "IT列国"之"毛遂自荐"--浅谈一个优秀项目经理的基本素质 0.前言 说起毛遂,大家可能并不清楚,可是成语"毛遂自荐",几乎没有人不知道.毛遂在关键时候自己站出来,不但自我推荐,而且解决了大问题,成就千古佳话. 在IT行业,也有很多像毛遂一样的人,他们也为了公司.为了整个IT行业,不断重演毛遂自荐的一幕. 1. 形势危急 话说三秦科技集团最近在市场上攻城略地,与冀赵高科公司几次正面竞争连连获胜.虽然换掉了精明能干的经理白起,却