决策树之C4.5算法学习
决策树<Decision Tree>是一种预測模型,它由决策节点,分支和叶节点三个部分组成。
决策节点代表一个样本測试,通常代表待分类样本的某个属性,在该属性上的不同測试结果代表一个分支;分支表示某个决策节点的不同取值。每一个叶节点代表一种可能的分类结果。
使用训练集对决策树算法进行训练,得到一个决策树模型。利用模型对未知样本(类别未知)的类别推断时。从决策树根节点開始,从上到下搜索,直到沿某分支到达叶节点,叶节点的类别标签就是该未知样本的类别。
网上有个样例能够非常形象的说明利用决策树决策的过程(母亲给女儿选对象的过程)。例如以下图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5ODY5Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算非常高。中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
再看一个样例:数据集例如以下图所看到的,共同拥有14个样本,每一个样本有4个属性,分别表示天气,温度。湿度,是否刮风。最后一列代表分类结果,能够理解为是否适合出去郊游(play)。
以下是利用上面样本构建的决策树:
依据构建的模型,当再来一个样本<outlook = rainy, temperature = cool,humidity = normal windy = true>那么我们就能够从根节点開始向下搜索最后得到:no play。
细致思考下,这有点类似FP-Tree算法中的构造树过程。可是绝不一样。其实,同样的数据集,我们能够构建非常多棵决策树,也不一定以outlook 作为根节点。FP-Tree仅仅是单纯将全部样本信息存储到一个树上。而决策树显然有一个选取节点属性进行分类的过程。
那么问题来了?该怎样选取属性作为分类属性,将样本分为更小的子集?什么时候结束终止决策树的增长,使构建的决策树既对训练样本准确分类。并且对于未知样本(測试样本)也可以准确预測,可能的策略是全部的样本都属于同一类别或全部样本属性值都相等。
不同的决策树算法採用的策略不同,以下主要介绍C4.5 算法,主要学习C4.5选取节点划分子集的策略。
C4.5算法是由澳大利亚悉尼大学Ross Quinlan教授在1993年基于ID3算法的改进提出的,它可以处理连续型属性或离散型属性的数据;可以处理具有缺失值的属性数据;使用信息增益率而不是信息增益作为决策树的属性选择标准;对生成枝剪枝。减少过拟合。
例如以下为决策树算法框架:
TreeGrowth(E, F)//E--训练集 F—属性集
if stopping_cond(E, F) = true then //达到停止分裂条件(子集全部样本同为一类或其它)
leaf = createNode() //构建叶子结点
leaf.label = Classify(E) //叶子结点类别标签
return leaf
else<span style="white-space:pre">
root = createNode()<span style="white-space:pre"> //创建结点
root.test_cond = find_best_split(E, F) 确定选择哪个属性作为划分更小子集//
令 V = {v | v是root.test_cond 的一个可能的输出}
for each v V do
Ev = {e | root.test_cond(e) = v and e E}
child = TreeGrowth(Ev, F)
//加入child为root的子节点,并将边(root——>child)标记为v
end for
end if
return root
主要过程:首先用根节点代表一个给定的数据集;然后从根节点開始(包含根节点)在每一个节点上选择一个属性,使结点数据集划分(一棵树分裂为几棵树)为更小的子集(子树);直到使用某个属性。其子集中全部样本都属于一个类别。才停止分裂。
而当中节点怎样选择属性。正是C4.5要做的。
前面已经提到过:C4.5 使用信息增益率而不是信息增益作为决策树的属性选择标准。以下从熵開始逐步解释:
熵:信息论中对熵的解释。熵确定了要编码集合S中随意成员的分类所须要的最少二进制位数
pi 为集合S中第i类所占的比例。(详细举例见后面实例)
理解”最少”:
1. 对于2分类问题。用一个二进制位1和0描写叙述足以分类;对于4分类问题。至少须要用两个二进制位描写叙述00 01 10 11;c分类 log2(c)
2. 对于分类问题。还要考虑类的比例(样本不平衡问题)。m+n个样本当中m个样本分类表示的二进制位数和n个样本表示的二进制位数不同样,全部熵的定义还存在着一种加权平均的思想。
简单来说,它刻画了随意样本集的纯度,越纯,熵越小。
换句话说,“变量的不确定性越大。熵就越大,一个系统越是有序,信息熵就越低(百度百科)
对于二分类问题,熵在[0,1]之间,假设全部样本都属于同一类。熵为0,这个时候给定一个样本,类别就是确定的。假设不同的样本各占一半,熵为1=1/2+1/2。这个时候假设给定一个样本来分类,就全然无法确定了,就好像我们抛硬币全然无法预測它是正面还是反面朝上一样。
对于c分类问题,熵在[0 log2(c)]之间。
C4.5中用到的几个公式:
1 训练集的信息熵
当中 m代表分类数。pi为数据集中每一个类别所占样本总数的比例。
2 划分信息熵----如果选择属性A划分数据集S。计算属性A对集合S的划分信息熵值
case 1:A为离散类型,有k个不同取值。依据属性的k个不同取值将S划分为k各子集{s1 s2 ...sk},则属性A划分S的划分信息熵为:(当中 |Si| |S| 表示包括的样本个数)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5ODY5Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
case 2: A为连续型数据,则按属性A的取值递增排序,将每对相邻值的中点看作可能的分裂点,对每一个可能的分裂点。计算:
当中。SL和SR分别相应于该分裂点划分的左右两部分子集。选择EntropyA(S)值最小的分裂点作为属性A的最佳分裂点,并以该最佳分裂点按属性A对集合S的划分熵值作为属性A划分S的熵值。
3 信息增益
按属性A划分数据集S的信息增益Gain(S,A)为样本集S的熵减去按属性A划分S后的样本子集的熵,即
4
分裂信息
利用引入属性的分裂信息来调节信息增益
5 信息增益率
信息增益率将分裂信息作为分母。属性取值数目越大,分裂信息值越大,从而部分抵消了属性取值数目所带来的影响。
相比ID3直接使用信息熵的增益选取最佳属性,避免因某属性有较多分类取值因而有较大的信息熵,从而更easy被选中作为划分属性的情况。
公式略多,看得眼花缭乱。事实上就是为了得到信息增益率。
以下以博客開始介绍的天气数据集为例,进行属性选取。
详细过程如图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5ODY5Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5ODY5Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
根节点选取outlook属性后就得到例如以下划分:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5ODY5Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
递归进行如上过程。就得到了博客开头的决策树。
本文引用了部分《数据挖掘与机器学习WEKA应用技术与实践》中的内容,并改动了原书中决策树计算错误之处,书中outlook的信息增益率为0.44是错误的。
转载请申明: http://blog.csdn.net/u010498696/article/details/46333911
參考文献: 《数据挖掘与机器学习WEKA应用技术与实践》
决策树之C4.5算法学习的更多相关文章
- 深入了解机器学习决策树模型——C4.5算法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第22篇文章,我们继续决策树的话题. 上一篇文章当中介绍了一种最简单构造决策树的方法--ID3算法,也就是每次选择一个特 ...
- 决策树之C4.5算法
决策树之C4.5算法 一.C4.5算法概述 C4.5算法是最常用的决策树算法,因为它继承了ID3算法的所有优点并对ID3算法进行了改进和补充. 改进有如下几个要点: 用信息增益率来选择属性,克服了ID ...
- 02-22 决策树C4.5算法
目录 决策树C4.5算法 一.决策树C4.5算法学习目标 二.决策树C4.5算法详解 2.1 连续特征值离散化 2.2 信息增益比 2.3 剪枝 2.4 特征值加权 三.决策树C4.5算法流程 3.1 ...
- 《机器学习实战》学习笔记第三章 —— 决策树之ID3、C4.5算法
主要内容: 一.决策树模型 二.信息与熵 三.信息增益与ID3算法 四.信息增益比与C4.5算法 五.决策树的剪枝 一.决策树模型 1.所谓决策树,就是根据实例的特征对实例进行划分的树形结构.其中有两 ...
- 机器学习之决策树(ID3 、C4.5算法)
声明:本篇博文是学习<机器学习实战>一书的方式路程,系原创,若转载请标明来源. 1 决策树的基础概念 决策树分为分类树和回归树两种,分类树对离散变量做决策树 ,回归树对连续变量做决策树.决 ...
- C4.5算法的学习笔记
有日子没写博客了,这些天忙着一些杂七杂八的事情,直到某天,老师喊我好好把数据挖掘的算法搞一搞!于是便由再次埋头看起算法来!说起数据挖掘的算法,我想首先不得的不提起的就是大名鼎鼎的由决策树算法演化而来的 ...
- 决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)
1. 1.问题的引入 2.一个实例 3.基本概念 4.ID3 5.C4.5 6.CART 7.随机森林 2. 我们应该设计什么的算法,使得计算机对贷款申请人员的申请信息自动进行分类,以决定能否贷款? ...
- 决策树-C4.5算法(三)
在上述两篇的文章中主要讲述了决策树的基础,但是在实际的应用中经常用到C4.5算法,C4.5算法是以ID3算法为基础,他在ID3算法上做了如下的改进: 1) 用信息增益率来选择属性,克服了用信息增益选择 ...
- 机器学习总结(八)决策树ID3,C4.5算法,CART算法
本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...
随机推荐
- [洛谷P1343]地震逃生
题目大意:有n个点m条单向边,每条边有一个容量.现有x人要分批从1走到n,问每批最多能走多少人,分几批运完(或输出无法运完). 解题思路:一看就是网络流的题目.每批最多能走多少人,即最大流.分几批运完 ...
- neo4j nosql图数据库学习
neo4j 文档:https://neo4j.com/docs/getting-started/current/cypher-intro/ 1.索引 # 给某类标签节点的属性添加索引 CREATE I ...
- python虚拟环境virtualenv、virtualenv下运行IDLE、powershell 运行脚本由执行策略引起的问题
一.为什么要创建虚拟环境: 应为在开发中会有同时对一个包不同版本的需求,创建多个开发环境就能解决这个问题.或许也会有对python不同版本的需求,这就需要使用程序来管理不同的版本,virtualenv ...
- HNU 12933 Random Walks Catalan数 阶乘求逆元新技能
一个Catalan数的题,打表对每个数都求一次逆元会T,于是问到了一种求阶乘逆元的打表新方法. 比如打一个1~n的阶乘的逆元的表,假如叫inv[n],可以先用费马小定理什么的求出inv[n],再用递推 ...
- CCNP路由实验之九 路由策略
CCNP路由实验之九 路由策略 路由器在公布与接收路由信息时,可能须要实施一些策略.以便对路由信息进行过滤,比如仅仅接收或公布满足一定条件的路由信息. 一种路由协议可能须要引入其它的路由协议发现 ...
- iBatis框架使用 4步曲
iBatis是一款使用方便的数据訪问工具,也可作为数据持久层的框架.和ORM框架(如Hibernate)将数据库表直接映射为Java对象相比.iBatis是将SQL语句映射为Java对象. 相对于全自 ...
- Java读取txt文件和覆盖写入txt文件和追加写入txt
//创建文件 public static void createFile(File filename) { try { if(!filename.exists()) { filename.create ...
- Yeslab华为安全HCIE七门之--防火墙高级技术(17篇)
Yeslab 全套华为安全HCIE七门之第三门 防火墙高级技术 课程目录: 华为安全HCIE-第三门-防火墙高级技术(17篇)\1_用户认证_用户_认证域_认证策略.avi 华为安全HCIE- ...
- 【Henu ACM Round#14 D】Kefa and Dishes
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 状态压缩动规. 可以写成记忆化搜索的形式. f[bit][p] 表示选取的菜的情况为bit(用0..2^(N)-1的二进制形式表示各 ...
- Objective-C(十九、通知-消息发送模式之中的一个)——iOS开发基础
结合之前的学习笔记以及參考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结. 知识点一直在变.仅仅是作为參考.以苹果官方文档为准~ 十九.通知-消息 ...