ID3算法(Iterative Dichotomiser 3 迭代二叉树3代),是一个由Ross Quinlan发明的用于决策树的算法;简单理论是越是小型的决策树越优于大的决策树。
算法归纳:
1、使用所有没有使用的属性并计算与之相关的样本熵值;
2、选取其中熵值最小的属性
3、生成包含该属性的节点
4、使用新的分支表继续前面步骤
 
ID3算法以信息论为基础,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类;所以归根结底,是为了从一堆数据中生成决策树而采取的一种归纳方式;
 
具体介绍:
1、信息熵:熵的概念主要指信息的混乱程度,变量的不确定性越大,熵的值越大;
或者这样理解:假如事件A的全概率划分是(A1, A2, A3, … , An),每部分发生的概率是(P1, P2, P3, … , Pn),那么信息熵计算公式可如下表示
       Info(A) = Entropy(p1, p2, … , pn) = -p1 * log2(p1) - p2 * log2(p2)  - … - pn * log2(pn);
 
2、信息增益:信息增益指划分前后熵的变化;
或者这样理解:在某个案例中,类S的属性值A的信息增益 = 类的信息熵Info(S) - 该属性的信息熵Info(A);
 
3、一个案例中总会有一个类导向,也可以理解为结果,而产生结果统计来的信息可能会有多个相关属性,当我们使用一次信息增益计算,并在这多个属性的信息增益中得到了某个属性X的信息增益为最大值时,实际上也是选择了决策树中从根节点出发的第一层分支的依据;找到第一个分类节点后,如果这时X有三个分支x1,x2,x3,我们下一次的计算,其实就是把原表,根据X的三种情况分为了三张表,再重复计算信息增益,就可以得到整个决策树;
 
示例:http://www.cnblogs.com/zhangchaoyang/articles/2196631.html
 
优缺点:
优点:理论清晰,方法简单;
缺点:支队比较小的数据集有效,且对噪声比较敏感,当训练数据集加大时,决策树可能会随之改变;
 
 
我的理解:
整个计算其实并不复杂,有一点需要注意的是在一算整体表的某个属性A的熵时,如果A有三个取值,a1、a2、a3;A的熵其实 等于 a1出现的概率 乘 a1为独立表时该类的熵 加上 同理a2 加上 同理a3 这个计算的才是A的熵
 
 
相关:
奥卡姆剃刀:“切勿浪费较多东西,去做’用较少的东西,同样可以做好的事情’。”,即,如果同一个问题有许多种理论,每一种都能够做出同样准确的预言,那么应该挑选其中使用的嘉定最少的那一个。尽管越复杂的方法通常能做出越好的语言,但是在不考虑语言能力的情况下,前提假设越少越好。所罗门诺夫的归纳推理理论是奥卡姆剃刀的数学公式化:在所有能够完美描述已有观测的可计算理论中,较短的可计算理论在孤寂下一次观测结果的概率时具有较大权重。
 
课外:ID3也是一种metadata容器的简称,多用于MP3格式的音频文件中,他可以将相关的曲名、演唱者、转机、音轨数等信息存储在MP3文件中。ID3一般位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息被称为ID3信息,ID3信息又分为两个版本。v1版的ID3在mp3文件的末尾128字节,以TAG三个字符开头,后面跟上个区信息。v2版一般位于mp3开头,可以存储歌词,该专辑的图片等大容量的信息;

决策树 -- ID3算法小结的更多相关文章

  1. 02-21 决策树ID3算法

    目录 决策树ID3算法 一.决策树ID3算法学习目标 二.决策树引入 三.决策树ID3算法详解 3.1 if-else和决策树 3.2 信息增益 四.决策树ID3算法流程 4.1 输入 4.2 输出 ...

  2. 数据挖掘之决策树ID3算法(C#实现)

    决策树是一种非常经典的分类器,它的作用原理有点类似于我们玩的猜谜游戏.比如猜一个动物: 问:这个动物是陆生动物吗? 答:是的. 问:这个动物有鳃吗? 答:没有. 这样的两个问题顺序就有些颠倒,因为一般 ...

  3. 决策树ID3算法[分类算法]

    ID3分类算法的编码实现 <?php /* *决策树ID3算法(分类算法的实现) */ /* *求信息增益Grain(S1,S2) */ //-------------------------- ...

  4. 决策树---ID3算法(介绍及Python实现)

    决策树---ID3算法   决策树: 以天气数据库的训练数据为例. Outlook Temperature Humidity Windy PlayGolf? sunny 85 85 FALSE no ...

  5. 机器学习之决策树(ID3)算法与Python实现

    机器学习之决策树(ID3)算法与Python实现 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每 ...

  6. 决策树ID3算法的java实现(基本试用所有的ID3)

    已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...

  7. 【Machine Learning in Action --3】决策树ID3算法

    1.简单概念描述 决策树的类型有很多,有CART.ID3和C4.5等,其中CART是基于基尼不纯度(Gini)的,这里不做详解,而ID3和C4.5都是基于信息熵的,它们两个得到的结果都是一样的,本次定 ...

  8. 决策树ID3算法的java实现

    决策树的分类过程和人的决策过程比较相似,就是先挑“权重”最大的那个考虑,然后再往下细分.比如你去看医生,症状是流鼻涕,咳嗽等,那么医生就会根据你的流鼻涕这个权重最大的症状先认为你是感冒,接着再根据你咳 ...

  9. 决策树ID3算法

    决策树 (Decision Tree)是在已知各种情况发生概率的基础上,通过构成 决策树 来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法 ...

随机推荐

  1. videoconverter转换

    以前录制的avi用vfw可以解码的,但是现在变成win7系统了,无法解码了.只好用视频转换软件把avi转成无压缩的. 选择losses uncompressed avi,点进去选UYVY就行了.

  2. C# Using 用法

    using 语句允许程序员指定使用资源的对象应当何时释放资源.为 using 语句提供的对象必须实现 IDisposable 接口.此接口提供了 Dispose 方法,该方法将释放此对象的资源. 一起 ...

  3. shadow Dom(shadowRoot) 访问

    示例 gtx.shadowRoot.getElementById("translation") gtx为host对象 起因 抓去chorome谷歌翻译插架的内容.有信息的内容div ...

  4. Tomcat单向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端安全通信

    众所周知,iOS9已经开始在联网方面默认强制使用Https替换原来的Http请求了,虽然Http和Https各有各的优势,但是总得来说,到了现在这个安全的信息时代,开发者已经离不开Https了. 网上 ...

  5. IT人 转型

    IT人 转型 转自: http://blog.sina.com.cn/s/blog_88534dff0101232b.html      “35岁,技术生涯即告终结.”这种说法在it界得到众多人认可, ...

  6. C1000k 新思路:用户态 TCP/IP 协议栈

    现在的服务器支撑上百万个并发 TCP 连接已经不是新闻(余锋2010年的演讲,ideawu 的 iComet 开源项目,WhatsApp 做到了 2.5M).实现 C1000k 的常规做法是调整内核参 ...

  7. ue4 重新生成ide project文件的命令行

    有时候换了机器,工程文件没了,通常是在编辑器里有个菜单项可以生成 但是有时编辑器自身都编不过,没法运行 这时需要调试代码,可以用命令行生成相应的工程文件: ../UnrealEngine/Genera ...

  8. jenkins自动部署maven工程到服务器----SSH+shell

    今天心情不是很美丽,玩笑话可能没那么多,还是回归正题 1.指定SSH端口.用户名.密码相关配置,我这里没有需要配置密钥啥的. 2.接下来再创建任务的时候,进行SSH配置: 3.看到这里,是不是很想打我 ...

  9. ServiceStack.OrmLite中的一些"陷阱"(2)

    注:此系列不是说ServiceStack.OrmLite的多个陷阱,这仅仅个人认为是某一个陷阱(毕竟我踩坑了)而引发的思考. 前文说到了项目需要使用两种不同的数据库语言,虽说前文问题已基本解决了,但是 ...

  10. linux下配置nginx使用service nginx start 服务

    解压出来后执行 mkdir /var/tmp/nginx/client/ -pv 接下来我们简单的为它提供一个服务脚本吧! # vim  /etc/init.d/nginx 新建文件/etc/rc.d ...