决策树J48算法
1、J48原理
基于从上到下的策略,递归的分治策略,选择某个属性放置在根节点,为每个可能的属性值产生一个分支,将实例分成多个子集,每个子集对应一个根节点的分支,然后在每个分支上递归地重复这个过程。当所有实例有相同的分类时,停止。
问题:如何选择根节点属性,建立分支呢?
例如:weather.arff
我们希望得到的是纯分裂,即分裂为纯节点,希望找到一个属性,它的一个节点全是yes,一个节点全是no,或许第三个节点又全是yes,这是最好的情况,因为如果是混合节点则需要再次分裂。
通过量化来确定能产生最纯子节点的属性---计算纯度(目标是得到最小的决策树)。而自上而下的树归纳法用到了一些启发式方法---产生纯节点的启发法是以信息论为基础的,即信息熵,以bits测量信息。
信息增益=分裂前分布的信息熵-分裂后分布的信息熵,选择信息增益最大的属性。
(分裂前分部信息熵)
(分布后分布信息熵)
(属性A的信息增益)
计算这四个属性的信息增益,如下图:
经过计算得到outlook、windy、humidity、temperature的信息增益分别为0.247bits、0.048bits、0.152bits、0.029bits,所以选择outlook为根节点。
........
2、举例
(1)所给数据如下图
(2)选择根节点
先求age的信息增益
分裂前分布的信息熵:
分裂后分布的信息熵:
信息增益:
类似地:
比较得到选择age为根节点,然后得到决策树的第一层,如下图:
然后在每个分支上递归地重复这个过程,直到所有实例有相同的分类。
3、总结
J48分类算法可信度高,建立的决策树简单易懂,并且结果非常容易理解。
决策树J48算法的更多相关文章
- 决策树归纳算法之C4.5
前面学习了ID3,知道了有关“熵”以及“信息增益”的概念之后. 今天,来学习一下C4.5.都说C4.5是ID3的改进版,那么,ID3到底哪些地方做的不好?C4.5又是如何改进的呢? 在此,引用一下前人 ...
- 数据挖掘之决策树ID3算法(C#实现)
决策树是一种非常经典的分类器,它的作用原理有点类似于我们玩的猜谜游戏.比如猜一个动物: 问:这个动物是陆生动物吗? 答:是的. 问:这个动物有鳃吗? 答:没有. 这样的两个问题顺序就有些颠倒,因为一般 ...
- 决策树 -- ID3算法小结
ID3算法(Iterative Dichotomiser 3 迭代二叉树3代),是一个由Ross Quinlan发明的用于决策树的算法:简单理论是越是小型的决策树越优于大的决策树. 算法归 ...
- 决策树ID3算法[分类算法]
ID3分类算法的编码实现 <?php /* *决策树ID3算法(分类算法的实现) */ /* *求信息增益Grain(S1,S2) */ //-------------------------- ...
- day-7 一个简单的决策树归纳算法(ID3)python编程实现
本文介绍如何利用决策树/判定树(decision tree)中决策树归纳算法(ID3)解决机器学习中的回归问题.文中介绍基于有监督的学习方式,如何利用年龄.收入.身份.收入.信用等级等特征值来判定用户 ...
- 03机器学习实战之决策树CART算法
CART生成 CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有 ...
- 决策树分类算法及python代码实现案例
决策树分类算法 1.概述 决策树(decision tree)——是一种被广泛使用的分类算法. 相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置 在实际应用中,对于探测式的知识发现 ...
- 决策树ID3算法--python实现
参考: 统计学习方法>第五章决策树] http://pan.baidu.com/s/1hrTscza 决策树的python实现 有完整程序 决策树(ID3.C4.5.CART ...
- 用Python开始机器学习(2:决策树分类算法)
http://blog.csdn.net/lsldd/article/details/41223147 从这一章开始进入正式的算法学习. 首先我们学习经典而有效的分类算法:决策树分类算法. 1.决策树 ...
随机推荐
- [Rails] 从 Request 到 Response(1)
本文翻译自:Rails from Request to Response 系列:个人选择了自己感兴趣的部分进行翻译,需要阅读原文的同学请戳前面的链接. 第一部分 导言(Introduction) 服务 ...
- Jedis操作redis(转)
package org.jzkangta.jedis; import java.util.ArrayList; import java.util.HashMap; import java.util.I ...
- 腾讯应用开发3006 : name lookup timed out 错误
昨天到今天发现应用访问不正常,用户发表数据很少,一查日志,QQ的 openApi 返回的结果全是 name lookup timed out,莫名其妙. 在服务器上 ping , nslookup , ...
- kali Rolling 安装QQ
------------------------------------------------------------------- 环境: kali Rolling 64位 所需软件包: Wi ...
- js--事件对象的理解1
在触发DOM上的某个事件时,会产生一个事件对象event.这个对象中包含着所有与事件有关的信息.包括导致事件的元素,事件的类型以及其他与特定事件相关的信息. 举例鼠标操作导致的事件对象中,会包含鼠标位 ...
- linux 添加定时任务脚本
主要分2个步骤第一步 编写要定时执行的脚本touch mytask.shvi mytask.sh里面写入:#! /bin/bashecho `date` >> /tmp/mytask.l ...
- input美化上传按钮美化
今天工作需求碰到 样式改变上传按钮 效果: <a href="javascript:;" class="a-upload"> <input t ...
- Java 泛型 协变式覆盖和泛型重载
Java 泛型 协变式覆盖和泛型重载 @author ixenos 1.协变式覆盖(Override) 在JDK 1.4及以前,子类方法如果要覆盖超类的某个方法,必须具有完全相同的方法签名,包括返回值 ...
- More on wrapper types
原文地址:http://fsharpforfunandprofit.com/posts/computation-expressions-wrapper-types-part2/ 上一篇中,我们说明了包 ...
- Python之迭代器&装饰器&生成器&正则
1.迭代器 迭代器是访问数据集合的一种方式,它只能从集合的第一个元素开始顺序访问,直到最后一个元素结束.类似于linux里的cat命令,只能挨行读取文本内容,不可以跳到中间或者尾部读取(不会把所有的数 ...