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. linux压缩文件——解压方法

    linux下 tar解压 gz解压 bz2等各种解压文件使用方法 .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar ...

  2. 开发人员为组件添加自定义的className

    在开发过程当中需要给组件写上自己的样式,这个时候怎么办呢? 直接给组件添加className这样是无效的 当给组件添加className之后 在写组件的时候需要对使用你的组件的开发人员提供自定义cla ...

  3. FOJ Problem 2273 Triangles

    Problem 2273 Triangles Accept: 201    Submit: 661Time Limit: 1000 mSec    Memory Limit : 262144 KB P ...

  4. 【CF1073D】Berland Fair(模拟)

    题意:初始有t元,每次从1开始买,从1到n依次有n个人,每个人的东西价格为a[i],该人依次能买就买,到n之后再回到1从头开始,问最后能买到的东西数量 n<=2e5,t<=1e18,a[i ...

  5. What and How in an Application

    Basically, two concerntrations: 1. What: business docs and prototype design 2. How: technical docs a ...

  6. luogu 2463 [SDOI2008]Sandy的卡片 kmp || 后缀数组 n个串的最长公共子串

    题目链接 Description 给出\(n\)个序列.找出这\(n\)个序列的最长相同子串. 在这里,相同定义为:两个子串长度相同且一个串的全部元素加上一个数就会变成另一个串. 思路 参考:hzwe ...

  7. LeetCode OJ-- Flatten Binary Tree to Linked List **

    https://oj.leetcode.com/problems/flatten-binary-tree-to-linked-list/ 二叉树的处理,将二叉树转换成类似一个单链表的东东,并且原地. ...

  8. UVA 272 TEX Quotes【字符串】

    https://vjudge.net/problem/UVA-272 [分析]:标记一下. [代码]: #include <bits/stdc++.h> using namespace s ...

  9. [Python Debug] SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.

    I Got a SettingWithCopyWarning when I ran the following code: tmp=date[date['date'].isnull().values= ...

  10. OBS插件开发以及OBS插件的选择(obs直播插件)研究思路

    obs版本的选择: 工作室版,优化了很多东西,缺点是不能用插件,在部分机型不稳定,因为更新的很频繁.不过这个插件不能用的说法还是停留在早起,截至到今天已经完美支持,所以在不久的将来会越来越好,如果是开 ...