1. 决策树(Decision Tree)-决策树原理

2. 决策树(Decision Tree)-ID3、C4.5、CART比较

1. 前言

上文决策树(Decision Tree)1-决策树原理介绍了决策树原理和算法,并且涉及了ID3,C4.5,CART3个决策树算法。现在大部分都是用CART的分类树和回归树,这三个决策树算法是一个改进和补充的过程,比较它们之间的关系与区别,能够更好的理解决策时算法。

2. ID3算法

2.1 ID3原理

ID3算法就是用信息增益大小来判断当前节点应该用什么特征来构建决策树,用计算出的信息增益最大的特征来建立决策树的当前节点。算法具体过程看决策树(Decision Tree)1-决策树原理

2.2 ID3的不足

ID3算法虽然提出了新思路,但是还是有很多值得改进的地方。  

  1. ID3没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。
  2. ID3采用信息增益大的特征优先建立决策树的节点。很快就被人发现,在相同条件下,取值比较多的特征比取值少的特征信息增益大。比如一个变量有2个值,各为1/2,另一个变量为3个值,各为1/3,其实他们都是完全不确定的变量,但是取3个值的比取2个值的信息增益大。如果校正这个问题呢?
  3. ID3算法对于缺失值的情况没有做考虑
  4. 没有考虑过拟合的问题

ID3 算法的作者昆兰基于上述不足,对ID3算法做了改进,这就是C4.5算法,也许你会问,为什么不叫ID4,ID5之类的名字呢?那是因为决策树太火爆,他的ID3一出来,别人二次创新,很快就占了ID4,ID5,所以他另辟蹊径,取名C4.0算法,后来的进化版为C4.5算法。下面我们就来聊下C4.5算法

3. C4.5算法

3.1 C4.5对ID3的改进

C4.5改进了上面ID3的4个问题,C4.5算法流程具体过程看决策树(Decision Tree)1-决策树原理

  1. 对于ID3不能处理连续特征,C4.5的思路是将连续的特征离散化。比如\(m\)个样本的连续特征\(A\)有\(m\)个,从小到大排列为\(a_1,a_2,...,a_m\),则C4.5取相邻两样本值的平均数,一共取得\(m-1\)个划分点,其中第i个划分点Ti表示为:\(T_i=\frac{a_i+a_{i+1}}{2}\)。对于这\(m-1\)个点,分别计算以该点作为二元分类点时的信息增益。选择信息增益最大的点作为该连续特征的二元离散分类点。比如取到的增益最大的点为\(a_t\),则小于\(a_t\)的值为类别1,大于\(a_t\)的值为类别2,这样我们就做到了连续特征的离散化。要注意的是,与离散属性不同的是,如果当前节点为连续属性,则该属性后面还可以参与子节点的产生选择过程。
  2. 对于ID3的第2个问题,信息增益作为标准容易偏向于取值较多的特征的问题。我们引入一个信息增益比的变量\(I_R(X,Y)\),它是信息增益和特征熵的比值。
    \[
    I_R(D,A)=\frac{I(A,D)}{H_A(D)}
    \]
  3. 对于ID3的第3个缺失值处理的问题,主要需要解决的是两个问题,一是在样本某些特征缺失的情况下选择划分的属性,二是选定了划分属性,对于在该属性上缺失特征的样本的处理。

    1. 对于第一个子问题,对于某一个有缺失特征值的特征\(A\)。C4.5的思路是将数据分成两部分,对每个样本设置一个权重(初始可以都为1),然后划分数据,一部分是有特征值A的数据\(D_1\),另一部分是没有特征A的数据\(D_2\)。然后对于没有缺失特征A的数据集\(D_1\)来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征\(A\)缺失的样本加权后所占加权总样本的比例。
    2. 对于第二个子问题,可以将缺失特征的样本同时划分入所有的子节点,不过将该样本的权重按各个子节点样本的数量比例来分配。比如缺失特征\(A\)的样本a之前权重1,特征\(A\)有3个特征值\(A_1,A_2,A_3\)。3个特征值对应的无缺失A特征的样本个数为2,3,4.a同时划分入\(A_1,A_2,A_3\)。对应权重调节为2/9,3/9, 4/9。
  4. 对于ID3的第4个问题,C4.5引入了正则化系数进行剪枝。剪枝的思路已经在上一篇文章中讨论过了。

3.2 C4.5的不足

C4.5虽然改进或者改善了ID3算法的几个主要的问题,仍然有优化的空间。

  1. 由于决策树算法非常容易过拟合,因此对于生成的决策树必须要进行剪枝。C4.5的剪枝方法是PEP。PEP的准确度比较高,但是依旧会存在以下的问题:

    1. PEP算法实用的从从上而下的剪枝策略,这种剪枝会导致和预剪枝同样的问题,造成剪枝过度。
    2. PEP剪枝会出现剪枝失败的情况。
  2. C4.5生成的是多叉树,即一个父节点可以有多个节点。很多时候,在计算机中二叉树模型会比多叉树运算效率高。如果采用二叉树,可以提高效率。
  3. C4.5只能用于分类,如果能将决策树用于回归的话可以扩大它的使用范围。
  4. C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。如果能够加以模型简化可以减少运算强度但又不牺牲太多准确性的话,那就更好了。

4. CART算法

4.1 CART对C4.5的改进

CART算法在C4.5的基础上,对于C4.5中的出现的问题进行了改进。针对上面提到的C4.5中出现的4点问题,进行如下改进:

  1. CART使用了CCP代价复杂度剪枝算法,对C4.5的剪枝方法进行了优化。
  2. 针对C4.5的多叉树的问题,CART改成了二叉树。CART采用的是不停的二分,举个例子,CART分类树会考虑把A分成\(\{A1\}\)和\(\{A2,A3\}\),\(\{A2\}\)和\(\{A1,A3\}\),\(\{A3\}\)和\(\{A1,A2\}\)三种情况,找到基尼系数最小的组合,比如\(\{A2\}\)和\(\{A1,A3\}\),然后建立二叉树节点,一个节点是\(\{A2\}\)对应的样本,另一个节点是\(\{A1,A3\}\)对应的节点。同时,由于这次没有把特征A的取值完全分开,后面我们还有机会在子节点继续选择到特征\(A\)来划分\(\{A1\}\)和\(\{A3\}\)。这和ID3或者C4.5不同,在ID3或者C4.5的一棵子树中,离散特征只会参与一次节点的建立,而CART中的离散特征会参与多次节点建立
  3. CART可以分为CART分类树和CART回归树。CART分类树和CART回归树的算法大致相同,主要区别有下面两点:
    1. 连续值的处理方法不同。

      1. CART分类树采用的是用基尼系数的大小来度量特征的各个划分点的优劣情况
      2. CART回归树的度量目标是,对于任意划分特征A,对应的任意划分点s两边划分成的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。表达式为:
        \[
        \underbrace{min}_{A,s}\Bigg[\underbrace{min}_{c_1}\sum\limits_{x_i \in D_1(A,s)}(y_i - c_1)^2 + \underbrace{min}_{c_2}\sum\limits_{x_i \in D_2(A,s)}(y_i - c_2)^2\Bigg]
        \]
    2. 决策树建立后做预测的方式不同。
      1. CART分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。
      2. CART回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。
  4. CART分类树使用了使用的是基尼系数的度量方式

CART算法相比C4.5算法的分类方法,采用了简化的二叉树模型,同时特征选择采用了近似的基尼系数来简化计算。当然CART树最大的好处是还可以做回归模型,这个C4.5没有。

4.2 CART的不足

  1. 应该大家有注意到,无论是ID3, C4.5还是CART,在做特征选择的时候都是选择最优的一个特征来做分类决策,但是大多数,分类决策不应该是由某一个特征决定的,而是应该由一组特征决定的。这样决策得到的决策树更加准确。这个决策树叫做多变量决策树(multi-variate decision tree)。在选择最优特征的时候,多变量决策树不是选择某一个最优特征,而是选择最优的一个特征线性组合来做决策。这个算法的代表是OC1,这里不多介绍。
  2. 如果样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习里面的随机森林之类的方法解决。

2. 决策树(Decision Tree)-ID3、C4.5、CART比较的更多相关文章

  1. 用于分类的决策树(Decision Tree)-ID3 C4.5

    决策树(Decision Tree)是一种基本的分类与回归方法(ID3.C4.5和基于 Gini 的 CART 可用于分类,CART还可用于回归).决策树在分类过程中,表示的是基于特征对实例进行划分, ...

  2. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

  3. 数据挖掘 决策树 Decision tree

    数据挖掘-决策树 Decision tree 目录 数据挖掘-决策树 Decision tree 1. 决策树概述 1.1 决策树介绍 1.1.1 决策树定义 1.1.2 本质 1.1.3 决策树的组 ...

  4. ID3\C4.5\CART

    目录 树模型原理 ID3 C4.5 CART 分类树 回归树 树创建 ID3.C4.5 多叉树 CART分类树(二叉) CART回归树 ID3 C4.5 CART 特征选择 信息增益 信息增益比 基尼 ...

  5. 决策树模型 ID3/C4.5/CART算法比较

    决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...

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

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

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

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

  8. 决策树decision tree原理介绍_python sklearn建模_乳腺癌细胞分类器(推荐AAA)

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  9. 机器学习方法(四):决策树Decision Tree原理与实现技巧

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面三篇写了线性回归,lass ...

  10. (ZT)算法杂货铺——分类算法之决策树(Decision tree)

    https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html 3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分 ...

随机推荐

  1. js验证身份证类

    var idCardNoUtil = { provinceAndCitys: {11:"北京",12:"天津",13:"河北",14:&qu ...

  2. Linux中断概述

    中断和异常 1.1中断的由来及实质 Linux内核要管理计算机上的硬件设备,首先要和他们通信.而处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后 ...

  3. java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)

    原文链接: http://www.cnblogs.com/kenkofox/archive/2010/04/25/1719649.html 代码: http://files.cnblogs.com/k ...

  4. FreeSWITCH呼叫参数之sip_cid_type

    这个参数定义了呼叫中主叫信息的头字段类型.支持两种类型: 1. rpidRemote-Party-ID头,这是默认的设置.{sip_cid_type=rpid}sofia/default/user@e ...

  5. python appium 有道云笔记分享文章到qq

    有道云添加一个笔记,笔记的title为aff 使用appium 把这篇文章分享到qq,前提是android里面有登录qq Python代码 from appium import webdriver i ...

  6. django-TDD

    1.什么是TDD: 测试驱动开发(Test-Driven Development) 它的总体思想是在写“实现”之前先写针对实现的“测试”,由于编写测试的时候 你要思考很多的可能性能,更多的思考也就意味 ...

  7. js中表达式 >>> 0 浅析 (以及用php简单翻译)

    今天在看lodash的源码中slice这个函数实现的时候发现了里面有这么一行代码 length = start > end ? 0 : ((end - start) >>> 0 ...

  8. c# xml 输出注释格式控制

    string str="\n\t///*! 妆容类物品子分类 */\n\tenum MakeupSubType\n\t{\n\t\tItem_InvalidMakeupSubType = - ...

  9. Spark学习笔记之-Spark远程调试

    Spark远程调试                          本例子介绍简单介绍spark一种远程调试方法,使用的IDE是IntelliJ IDEA.   1.了解jvm一些参数属性   -X ...

  10. Xilinx FPGA用户约束文件(转自xilinx ISE 开发指南

    FPGA设计中的约束文件有3类:用户设计文件(.UCF文件).网表约束文件(.NCF文件)以及物理约束文件(.PCF文件),可以完成时序约束.管 脚约束以及区域约束.3类约束文件的关系为:用户在设计输 ...