ID3算法(1)
1 简述
1.1
id3是一种基于决策树的分类算法,由J.Ross Quinlan
在1986年开发。id3根据信息增益,运用自顶向下的贪心策略
建立决策树。信息增益用于度量某个属性对样本集合分类的好坏程度。
由于采用了信息增益,id3算法建立的决策树规模比较小,
查询速度快。id3算法的改进是C4.5算法,C4.5算法可以
处理连续数据,采用信息增益率,而不是信息增益。
理解信息增益,需要先看一下信息熵。
1.2 信息熵
信息熵是随机变量的期望。度量信息的不确定程度。
信息的熵越大,信息就越不容易搞清楚。处理信息就是
为了把信息搞清楚,就是熵减少的过程。
Entropy(X) = -Sum(p(xi) * log(p(xi))) {i: 0 <= i <= n}
p(x)是概率密度函数;对数是以2为底;
1.3 信息增益
用于度量属性A降低样本集合X熵的贡献大小。信息增益
越大,越适于对X分类。
Gain(A, X) = Entropy(X) - Sum(|Xv| / |X| * Entropy(Xv)) {v: A的所有可能值}
Xv表示A中所有为v的值;|Xv|表示A中所有为v的值的数量;
2 id3算法流程
输入:样本集合S,属性集合A
输出:id3决策树。
1) 若所有种类的属性都处理完毕,返回;否则执行2)
2)计算出信息增益最大属性a,把该属性作为一个节点。
如果仅凭属性a就可以对样本分类,则返回;否则执行3)
3)对属性a的每个可能的取值v,执行一下操作:
i. 将所有属性a的值是v的样本作为S的一个子集Sv;
ii. 生成属性集合AT=A-{a};
iii.以样本集合Sv和属性集合AT为输入,递归执行id3算法;
3 一个的例子
3.1
这个例子来源于Quinlan的论文。
假设,有种户外活动。该活动能否正常进行与各种天气因素有关。
不同的天气因素组合会产生两种后果,也就是分成2类:能进行活动或不能。
我们用P表示该活动可以进行,N表示该活动无法进行。
下表描述样本集合是不同天气因素对该活动的影响。
Attribute class
outlook temperature humidity windy
---------------------------------------------------------
sunny hot high false N
sunny hot high true N
overcast hot high false P
rain mild high false P
rain cool normal false P
rain cool normal true N
overcast cool normal true P
sunn y mild high false N
sunny cool normal false P
rain mild normal false P
sunny mild normal true P
overcast mild high true P
overcast hot normal false P
rain mild high true N
3.2
该活动无法进行的概率是:5/14
该活动可以进行的概率是:9/14
因此样本集合的信息熵是:-5/14log(5/14) - 9/14log(9/14) = 0.940
3.3
接下来我们再看属性outlook信息熵的计算:
outlook为sunny时,
该活动无法进行的概率是:3/5
该活动可以进行的概率是:2/5
因此sunny的信息熵是:-3/5log(3/5) - 2/5log(2/5) = 0.971
同理可以计算outlook属性取其他值时候的信息熵:
outlook为overcast时的信息熵:0
outlook为rain时的信息熵:0.971
属性outlook的信息增益:gain(outlook) = 0.940 - (5/14*0.971 + 4/14*0 + 5/14*0.971) = 0.246
相似的方法可以计算其他属性的信息增益:
gain(temperature) = 0.029
gain(humidity) = 0.151
gain(windy) = 0.048
信息增益最大的属性是outlook。
3.4
根据outlook把样本分成3个子集,然后把这3个子集和余下的属性
作为输入递归执行算法。
原文链接:http://blog.csdn.net/leeshuheng/article/details/7777722
ID3算法(1)的更多相关文章
- 决策树ID3算法的java实现(基本试用所有的ID3)
已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...
- 数据挖掘之决策树ID3算法(C#实现)
决策树是一种非常经典的分类器,它的作用原理有点类似于我们玩的猜谜游戏.比如猜一个动物: 问:这个动物是陆生动物吗? 答:是的. 问:这个动物有鳃吗? 答:没有. 这样的两个问题顺序就有些颠倒,因为一般 ...
- 决策树 -- ID3算法小结
ID3算法(Iterative Dichotomiser 3 迭代二叉树3代),是一个由Ross Quinlan发明的用于决策树的算法:简单理论是越是小型的决策树越优于大的决策树. 算法归 ...
- 机器学习笔记----- ID3算法的python实战
本文申明:本文原创,如有转载请申明.数据代码来自实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. Hell ...
- 决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)
1. 1.问题的引入 2.一个实例 3.基本概念 4.ID3 5.C4.5 6.CART 7.随机森林 2. 我们应该设计什么的算法,使得计算机对贷款申请人员的申请信息自动进行分类,以决定能否贷款? ...
- 决策树笔记:使用ID3算法
决策树笔记:使用ID3算法 决策树笔记:使用ID3算法 机器学习 先说一个偶然的想法:同样的一堆节点构成的二叉树,平衡树和非平衡树的区别,可以认为是"是否按照重要度逐渐降低"的顺序 ...
- ID3算法 决策树的生成(2)
# coding:utf-8 import matplotlib.pyplot as plt import numpy as np import pylab def createDataSet(): ...
- ID3算法 决策树的生成(1)
# coding:utf-8 import matplotlib.pyplot as plt import numpy as np import pylab def createDataSet(): ...
- 决策树的基本ID3算法
一 ID3算法的大致思想 基本的ID3算法是通过自顶向下构造决策树来进行学习的.我们首先思考的是树的构造从哪里开始,这就涉及到选择属性进行树的构造了,那么怎样选择属性呢?为了解决这个问题,我们使用统 ...
- Python实现ID3算法
自己用Python写的数据挖掘中的ID3算法,现在觉得Python是实现算法的最好工具: 先贴出ID3算法的介绍地址http://wenku.baidu.com/view/cddddaed0975f4 ...
随机推荐
- PHP树结构,实现无限分级
一.从数据库查出来的数据需要id.parentid.level. id唯一识别栏目,parentid为该栏目所属父类id,level标示该栏目是几级栏目.以下代码就可以实现一个简单的树结构. publ ...
- python基础(7):字符编码
今天我们进入字符编码的学习.字符编码是一个多理论少结论的知识点,我会总结很多的知识点.我们只需要通读当作了解即可,最后我会总结需要我们理解掌握的重点. 一.学习字符编码的计算机基础储备 1.计算机软件 ...
- Objectiv-C UIKit基础 NSLayoutConstraint的使用(VFL实现)
利用VFL可视化语言 (简单的抛砖引玉) 构建3个View 橙色和绿色左中右间隔20 上间隔40 高为200 蓝色在橙色内(0,0)处 宽高为橙色的一半 实现效果如下 由于atutosize和auto ...
- 浅析python 的import 模块(转)
摘要: 学习python有几天了,对import一直不是很清楚,和C里面的include是否一样,重复引入有问题么?搜索路径是怎样的?整理解决下我的疑问. 一 模块的搜索路径 模块的搜索路径都放在了s ...
- ECMAScript 6 学习(二)async函数
1.什么是async函数 2.用法 2.1基本用法 3.语法 3.1返回promise对象 3.2promise状态的变化 3.3await命令 1.什么是async函数 async函数也是异步编程 ...
- 1.Why Apache Spark?
Why Apache Spark? 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark ...
- zabbix 配置发送邮件报警
标签:监控/SQLServer/Windows 概述 本篇文章主要介绍如何配置zabbix借助外部邮件进行发送邮件报警,zabbix通过配置文件调用mailx来进行邮件的发送.在Centos6以上的版 ...
- 将域名转移到 Google Domains
之前存放域名用过 Godaddy.Dynadot.Namesilo 也有阿里云(万网)和腾讯云(新网),这回就用 Google Domains 啦! 话说 Google Domains 早已是 201 ...
- iOS项目冗余资源扫描脚本
iOS项目冗余资源扫描脚本 随着iOS项目的版本不断迭代,app中冗余文件会越来越多,app size也持续增加,是时候需要对app冗余资源进行检测,对app进行瘦身. 使用方法: 1. 运行环境为m ...
- MySql 事务与锁
事务介绍 首先,什么是事务?事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子),不可分割,要么都执行,要么回滚(rollback)都不执行. MySQL 事务主要用于处理操作量大, ...