C4.5 是对 ID3 的一个优化,它依据信息增益率来进行属性选择。

关于决策树。请參见:http://blog.csdn.net/bone_ace/article/details/46299681

关于 ID3,请參见:http://blog.csdn.net/Bone_ACE/article/details/46312215

关于 C4.5

C4.5 主要针对 ID3 的缺陷作了一些优化改进,相当于是一个“升级版”的 ID3:

  1. 可以处理连续型和离散型的数据。
  2. 可以处理包括缺失值的数据。
  3. 对生成的决策树进行了减枝。

  4. 使用信息增益率作为属性选择的标准。

信息增益率

信息增益率定义为:

GainRatio(A)=Gain(A)SplitE(A)

当中。分母 SplitE(A) 叫做分裂信息,公式定义为:

SplitE(A)=−∑i=1k|Si||S|log2|Si||S|

信息增益 Gain(A) 的求解和 ID3 一样:

Gain(S,A)=Entropy(S)−EntropyA(S)


信息熵:

Entropy(S)=−∑i=1mpi⋅log2pi

另外,属性 A 划分 S 的信息熵 EntropyA(S) 的求解添加了对连续型数据的处理。

假设属性 A 是离散型的数据。则:

EntropyA(S)=∑i=1k|Si||S|Entropy(Si)

假设属性 A 是连续型的数据,则:

EntropyA(S)=|SL||S|Entropy(SL)+|SR||S|Entropy(SR)

(将属性A的值按递增的顺序排序,对相邻的两个值取中间值(平均值),SL和SR就是这个中间值左右两部分子集。文字解释比較拗口难懂,详细的使用见后面的样例。)

缺失值和减枝

缺失值处理:

缺失值处理的方法有两种:

一种,是抛弃含有缺失值的数据,这样的适合于仅仅含少量缺失值的情况。

还有一种,是填充。C4.5 算法不是直接填充缺失值,而是用概率知识把信息增益率的求解作些变化:

  1. Gain(A)= 属性 A 在数据集中不空的比率×(Entropy(S)−EntropyA(S))。
  2. SplitE(A)=−∑i=1k|Si||S|log2|Si||S|−|Sunknow||S|log2|Sunknow||S|

    (当中。Sunknow是含缺失值的数据组成的样本集。)

减枝处理:

  • 减枝的目的是消除过度拟合,提高决策树的品质。
  • 减枝的原则是去除预測精确度低的子树、减少决策树的复杂度、让决策树更加浅显易懂。
  • 减枝的方法有两个:一种,在构建决策树之前给出限定条件,限定树的生长。还有一种,在决策树全然生长以后。对不良子树进行减枝。
  • C4.5 採用后一种方法:从底往上。假设用某个使用频率非常高的子节点(或者叶子节点)替换该决策节点后。可以使得整棵树的预測误差率减少,则进行相应的减枝。
  • 然而怎么求预測误差率呢?(以后再补上。

C4.5 步骤

  1. 对数据集进行预处理,对连续型属性求数据的最佳分裂点。
  2. 计算每一个属性的信息增益率,选取信息增益率最大的属性作为决策节点的划分属性。

  3. 对决策节点属性的每一个可能取值所相应的样本子集递归地执行步骤2。直到划分的每一个子集中的观測数据都属于同一个类标号,终于生成决策树。
  4. 对全然生长的决策树进行剪枝,得到优化后的决策树。
  5. 从剪枝后的决策树中提取分类规则。对新的数据集进行分类。

C4.5的优缺点

长处:产生的分类规则易于理解。准确率较高。

缺点:

  • 在构造树的过程中,须要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。

  • 精度不够高。商业上用 C5.0 而非 C4.5。就是由于它的预測精度还不能非常好的满足用户的需求。
  • C4.5 仅仅适合于可以驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法执行。
转载请注明出处。谢谢。(原文链接:http://blog.csdn.net/bone_ace/article/details/46322815

决策树之 C4.5的更多相关文章

  1. 决策树之C4.5算法

    决策树之C4.5算法 一.C4.5算法概述 C4.5算法是最常用的决策树算法,因为它继承了ID3算法的所有优点并对ID3算法进行了改进和补充. 改进有如下几个要点: 用信息增益率来选择属性,克服了ID ...

  2. 机器学习之决策树二-C4.5原理与代码实现

    决策树之系列二—C4.5原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9435712.html I ...

  3. 深入了解机器学习决策树模型——C4.5算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第22篇文章,我们继续决策树的话题. 上一篇文章当中介绍了一种最简单构造决策树的方法--ID3算法,也就是每次选择一个特 ...

  4. 决策树(ID3,C4.5,CART)原理以及实现

    决策树 决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布. [图片上传失败...(image ...

  5. 分类算法:决策树(C4.5)(转)

    C4.5是机器学习算法中的另一个分类决策树算法,它是基于ID3算法进行改进后的一种重要算法,相比于ID3算法,改进有如下几个要点: 1)用信息增益率来选择属性.ID3选择属性用的是子树的信息增益,这里 ...

  6. 决策树 ID3 C4.5 CART(未完)

    1.决策树 :监督学习 决策树是一种依托决策而建立起来的一种树. 在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象,树中的每一个分叉路径代表某 ...

  7. 决策树之C4.5算法学习

    决策树<Decision Tree>是一种预測模型,它由决策节点,分支和叶节点三个部分组成. 决策节点代表一个样本測试,通常代表待分类样本的某个属性,在该属性上的不同測试结果代表一个分支: ...

  8. 21.决策树(ID3/C4.5/CART)

    总览 算法   功能  树结构  特征选择  连续值处理 缺失值处理  剪枝  ID3  分类  多叉树  信息增益   不支持 不支持  不支持 C4.5  分类  多叉树  信息增益比   支持 ...

  9. Python3实现机器学习经典算法(四)C4.5决策树

    一.C4.5决策树概述 C4.5决策树是ID3决策树的改进算法,它解决了ID3决策树无法处理连续型数据的问题以及ID3决策树在使用信息增益划分数据集的时候倾向于选择属性分支更多的属性的问题.它的大部分 ...

随机推荐

  1. mysql查看语句执行状态的常见函数

    row_count() 返回上一个insert.update.delete语句的影响行数 found_rows() 返回上一个select查到的记录条数 last_insert_id() 返回上一次插 ...

  2. BZOJ 4827 [Shoi2017]分手是祝愿 ——期望DP

    显然,考虑当前状态最少需要几步,直接贪心即可. 显然我们只需要考虑消掉这几个就好了. 然后发现,关系式找出来很简单,是$f(i) f(i+1) f(i-1)$之间的. 但是计算的时候并不好算. 所以把 ...

  3. source ~/.bashrc 什么意思

    source:使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录 https://www.cn ...

  4. IDA 调试 Android

    最近都在学一些反编译安卓相关的东西,其实网上有很多教程关于用 IDA 调试 Android 的过程,主要记录一下我遇到的坑 首先 Android手机要是root过的 还要注意的一点是apk中的 And ...

  5. poj 2441 Arrange the Bulls

    Arrange the Bulls Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 5427   Accepted: 2069 ...

  6. favicon还是这个网站生成的比较正确

    原文发布时间为:2011-11-16 -- 来源于本人的百度文章 [由搬家工具导入] http://tools.dynamicdrive.com/favicon/ http://www.rw-desi ...

  7. mac使用matplotlib

    mac系统,安装了matplotlib之后, 导入matplotlib.pyplot的时候报错 RuntimeError: Python is not installed as a framework ...

  8. getchar吸收回车

    #include "stdio.h" int main() { int a; char b,c; scanf("%d",&a); c = getchar ...

  9. 项目中使用libsodium扩展

    前段时间研究了微信小微商户,地址:https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=19_11 其接口操作中需要下载证书针对返回的密 ...

  10. (21)python lambda表达式

    lambda表达式是一个匿名函数 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用 最简单的例子 add = lambda x,y : x + y print add(3,5) #out ...