分类--决策树(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分类算法可信度高,建立的决策树简单易懂,并且结果非常容易理解。

时间: 2024-10-09 22:43:10

分类--决策树(J48选择根节点-信息熵)的相关文章

【JSTREE】 jstree-初始化时默认选中根节点

var contacttree = $('#contact-org').jstree({ "core" : { "animation" : false, "multiple" : false, "check_callback" : true, "themes" : { "icons" : true, "dots" : false }, "data"

监督式学习 -- 分类决策树(一)

决策树(decision tree)是一种基本的分类与回归方法. 其表示的树型结构,能够觉得是if-else规则的集合.基本的长处是分类可读性好,速度快. 一般会有三个步骤:特征选择.决策树的生成和决策树的修剪. 决策树由结点(node)和有向边(directed edge)组成.结点有两类:内部结点(表示一个特征或者属性)和叶节点(表示一个类或者决策结果).决策树学习样本集,学习的目标是依据给定的训练数据集构建决策树模型.可以对測试集以及实例进行正确的分类.通常默认.训练集和測试集拥有同样或近

机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树

摘要: Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),本文介绍了CART用于离散标签分类决策和连续特征回归时的原理.决策树创建过程分析了信息混乱度度量Gini指数.连续和离散特征的特殊处理.连续和离散特征共存时函数的特殊处理和后剪枝:用于回归时则介绍了回归树和模型树的原理.适用场景和创建过程.个人认为,回归树和模型树

EasyUI的treegrid实现自动顺序选择行节点

这两天用EasyUI的treegrid写了一个根据滚动条滚动时相应的依次选中treegrid中的行的demo,之前用了一个递归实现不了,所以用了两个递归实现的,效果如图: 这里的使用的easyui 1.4版本,这个treegrid的方法很少,所以实现起来很费劲,需要自己写函数.好了,上代码: 1 <%@ include file='/main/head.jsp' %> 2 3 <div data-options="region:'center',title:'项目时刻进度展示'

ASPxTreeList控件去根节点的新增修改操作(写在onCommandColumnButtonInitialize()事件中)

treelist去掉根节点按钮效果图: //去掉父节点及子节点旁的新增.修改.删除操作(写在onCommandColumnButtonInitialize事件中) protected void Tree_Gooslist_CommandColumnButtonInitialize(object sender, TreeListCommandColumnButtonEventArgs e) { if (e.NodeKey != null) { TreeListNode node = this.Tr

第4章第1节练习题12 删除以指定节点为根节点的所有子树

问题描述 已知二叉树以二叉链表存储,编写算法完成对于树中每一个元素值为x的节点,删去以它为根的子树,并释放相应空间 算法思想 本题可以分成两个部分来完成.第一步:查找值为x的节点:第二步:删除以值为x的节点为根节点的所有子树: 因为删除的是x的所有子树,因此遍历方式应该选择自上而下的遍历方式,即先序遍历或层次遍历方式,这里选择层次遍历的方式实现. 删除值为x的节点的所有子树,可以考虑使用递归的方式: 即此时可以认为删除的是以值为x的节点作为根节点的树: 首先删除该树的叶子节点,这样该树的倒数第二

easyui 获取树的平级根节点

1.easyui的树的根节点一般是几个平级的,怎样获取这些父节点的id? 可以将获取到的平级根节点放在一个数组中 var roots=[]; roots=$("#tree1").tree("getRoots",node.target); 这样得到的roots是一个包含了所有平级的根节点的数组 然后就可以遍历这个数组 for(var i=0;i<roots.length;i++){ roots[i].id } 2.怎样选择性地展示easyui树的一个根节点? 思

esayui combotree 只能选择子节点

esayui combotree 只能选择子节点用onBeforeSelect:参数是node,节点被选中之前触发,返回false取消选择动作. 网上找了好多都没一个可用的,要想知道他是子节点还是根节点,我们先来看看combotree的数据结构: data:[{ "id":1, "text":"My Documents", "children":[{ "id":11, "text":&q

选择从节点,数据通信部分代码

1 选择从节点,建立连接 1 if ( !simpleBLEScanning && simpleBLEScanRes > 0) 2 { 3 simpleBLEScanIdx++; 4 if ( simpleBLEScanIdx >= simpleBLEScanRes ) 5 { 6 simpleBLEScanIdx = 0; 7 } 8 uint8 addrType; 9 uint8 *peerAddr: 10 11 if ( simpleBLEScanRes > 0 )