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. 【Android】Android六种布局详解

    这篇就对LinearLayout.RelativeLayout.自定义ViewGroup.FrameLayout.TableLayout.AbsoluteLayout六种布局进行详细的讲解. 1.Li ...

  2. RVM Ruby 管理工具

    1.RVM 简介 1.1 Ruby 简介 Ruby 是一种面向对象的脚本语言,简单易用,功能强大.能跨平台和可移植性好等等.其实就是种脚本语言. Ruby 的软件源使用的是亚马逊的云服务,国内网络环境 ...

  3. Git 基础(分布式版本控制系统)

    1.Git 简史 自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标.它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统. 2.Git 基 ...

  4. @property的使用方法

    参看廖大神的博客 使用@property 有时间整理一下. python 没有私有成员变量的概念,通常在变量前面加单/双下划线来表示私有变量(非共有变量). 通常在python中,以单下划线开始的成员 ...

  5. 基于matplotlib的数据可视化 - 热图imshow

    热图: Display an image on the axes. 可以用来比较两个矩阵的相似程度 mp.imshow(z, cmap=颜色映射,origin=垂直轴向) imshow( X, cma ...

  6. Java 内存模型及GC原理 (转载)

    一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...

  7. SQL语句操作优先级顺序

    SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...

  8. asp.net 浏览器下载文件的四种方式

    // 方法一:TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { Response.ContentT ...

  9. Python endswith() 函数

    函数:endswith() 作用:判断字符串是否以指定字符或子字符串结尾,常用于判断文件类型 相关函数:判断字符串开头 startswith() 一.函数说明语法:string.endswith(st ...

  10. CSS margin属性与用法教程

    margin 属性是css用于在一个声明中设置所有 margin 属性的简写属性,margin是css控制块级元素之间的距离, 它们之间是透明不可见的. margin属性包含了margin left  ...