更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/

决策树C4.5算法

为了解决决策树ID3算法的不足,ID3算法的作者昆兰基于它的不足改进了决策树ID3算法。但是可能会有人有疑问,既然上一个决策树算法叫做ID3算法,为什么改进版本不叫做ID4或者ID5呢?因为当时决策树过于火爆,有人二次创新把ID4、ID5都用掉了,由此作者另辟蹊径把ID3算法的改进版本称为C4算法,后来C4算法又一次升级便有了现在的C4.5算法。

一、决策树C4.5算法学习目标

  1. 使用C4.5算法对连续特征值离散化
  2. 信息增益比
  3. 使用C4.5算法对特征值加权
  4. 决策树C4.5算法步骤
  5. 决策树C4.5算法优缺点

二、决策树C4.5算法详解

上一次说到决策树ID3算法有4个缺点,而这次作者也是基于这4个缺点改进了算法,也就是现在的C4.5算法。

假设现有一个训练集\(D\),特征集\(A\),训练集中有\(m\)个样本,每个样本有\(n\)个特征,我们通过该训练集聊一聊作者对C4.5算法做了哪些改进。

2.1 连续特征值离散化

ID3算法的第一个缺点:没有考虑到连续值的情况。

假设现有一个特征\(F\)的特征值为连续值,从大到小排序为\(f_1,f_2,\ldots,f_m\),C4.5算法对相邻样本间的特征值\(f_i,f_{i+1}\)取平均数,一共可以得到\(m-1\)个划分点,其中第\(j\)个划分点可以表示为
\[
S_j = {\frac {f_i + f_{i+1}} {2}}
\]
对于这\(m-1\)个划分点,分别计算以该点作为二元分类点的信息增益比,选择信息增益比最大的点作为该连续特征的二元离散分类点,把改点记作\(f_t\),则特征值小于\(f_t\)的点记作\(c_1\);特征值大于\(f_t\)的点记作\(c_2\),这样就实现了连续特征值的离散化。

2.2 信息增益比

ID3算法的第二个缺点:以信息增益作为划分训练数据集的特征,存在于偏向于选择取值较多的特征的问题。

信息增益作为标准容易偏向于取值较多的特征,因此可以使用信息增益比作为划分节点的标准。信息增益比的概念已经在《熵和信息增益》一文中介绍过,这里只给出公式
\[
g_R(D,A) = {\frac{g(D,A)}{H_A(D)}}
\]
由于特征越多的特征对应的特征熵\(H_A(D)\)越大,则信息增益比\(g_R(D,A)\)则会变小,因此可以校正信息增益容易偏向于取值较多的特征的问题。

2.3 剪枝

ID3算法的第三个缺点:没有考虑过拟合问题。

决策树一般采用剪枝的方法解决过拟合问题,剪枝的具体思路将在《CART树》一文中细讲。

2.4 特征值加权

ID3算法的第四个缺点:没有考虑特征中含有缺失值的情况。

假设某个特征\(F\)有2个特征值\(f_1,f_2\),先设定缺失\(F\)特征的样本\(D_i\)的关于特征\(F\)的特征值权重都为1,即\(f_1\)和\(f_2\)。假设\(2\)个特征值对应的无缺失值的样本个数为\(3\)和\(5\),现在把特征值\(f_1,f_2\)重新划入样本\(D_i\)中,在样本\(D_i\)中\(f_1\)的权重调节为\({\frac{3}{8}}\),\(f_2\)的权重调节为\({\frac{5}{8}}\),即样本\(D_i\)的特征\(F\)的特征值为\({\frac{3}{8}}*f_1和{\frac{5}{8}}*f_2\)。

计算样本\(D_i\)的特征\(F\)的信息增益比的时候,及计算\({\frac{3}{8}}*f_1\)和\({\frac{5}{8}}*f_2\)的信息增益比。

三、决策树C4.5算法流程

3.1 输入

假设现有一个训练集\(D\),特征集\(A\),阈值\(\epsilon\)。

3.2 输出

C4.5算法决策树。

3.3 流程

  1. 初始化信息增益的阈值\(\epsilon\)
  2. 如果\(D\)中的所有样本都属于同一类\(C_k\),则返回单节点树\(T\),标记类别为\(C_k\)
  3. 如果\(A\)为空集,则返回单节点树\(T\),标记类别为\(D\)中样本数最大的类\(C_k\)
  4. 计算\(A\)中各个特征对输出\(D\)的信息增益比,选择信息增益比最大的\(A_g\)
  5. 如果\(A_g\)小于阈值\(\epsilon\),则返回单节点数\(T\),标记类别为\(D\)中样本数最大的类\(C_k\)
  6. 如果\(A_g\)大于阈值\(\epsilon\),则按照特征\(A_g\)的不同取值\(A_{g_i}\)把\(D\)分割成若干个子集\(D_i\),每个子集生成一个子节点,子节点对应特征值为\(A_{g_i}\),递归调用\(2-6\)步,得到子树\(T_i\)并返回

四、决策树C4.5算法的优缺点

4.1 优点

  1. 理论清晰,方法简单
  2. 学习能力强

4.2 缺点

  1. 只能用于分类
  2. C4.5算法由于使用了熵的概念,即决策树的生成需要大量的熵值计算,并且如果特征值为连续值,还需要进行排序运算
  3. 使用模型较为复杂的多叉树结构

五、小结

决策树C4.5算法流程上和决策树ID3算法大相径庭,只是在决策树ID3算法上的某一步流程进行了优化,总而言之,它这种处理方式还是治标不治本的,并且还是无法处理回归问题。

接下来我们将要将一个改革意义的决策树,目前scikit-learn算法中以及集成学习中都使用该树作为目标决策树,即决策树CART算法。

02-22 决策树C4.5算法的更多相关文章

  1. 决策树-C4.5算法(三)

    在上述两篇的文章中主要讲述了决策树的基础,但是在实际的应用中经常用到C4.5算法,C4.5算法是以ID3算法为基础,他在ID3算法上做了如下的改进: 1) 用信息增益率来选择属性,克服了用信息增益选择 ...

  2. Python实现决策树C4.5算法

    为什么要改进成C4.5算法 原理 C4.5算法是在ID3算法上的一种改进,它与ID3算法最大的区别就是特征选择上有所不同,一个是基于信息增益比,一个是基于信息增益. 之所以这样做是因为信息增益倾向于选 ...

  3. 决策树 -- C4.5算法

    C4.5是另一个分类决策树算法,是基于ID3算法的改进,改进点如下: 1.分离信息   解释:数据集通过条件属性A的分离信息,其实和ID3中的熵:   2.信息增益率   解释:Gain(A)为获的A ...

  4. python实现决策树C4.5算法(在ID3基础上改进)

    一.概论 C4.5主要是在ID3的基础上改进,ID3选择(属性)树节点是选择信息增益值最大的属性作为节点.而C4.5引入了新概念"信息增益率",C4.5是选择信息增益率最大的属性作 ...

  5. 决策树C4.5算法——计算步骤示例

    使用决策树算法手动计算GOLF数据集 步骤: 1.通过信息增益率筛选分支. (1)共有4个自变量,分别计算每一个自变量的信息增益率. 首先计算outlook的信息增益.outlook的信息增益Gain ...

  6. 决策树(C4.5)原理

    决策树c4.5算法是在决策树ID3上面演变而来. 在ID3中: 信息增益 按属性A划分数据集S的信息增益Gain(S,A)为样本集S的熵减去按属性A划分S后的样本子集的熵,即 在此基础上,C4.5计算 ...

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

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

  8. 决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)

    1. 1.问题的引入 2.一个实例 3.基本概念 4.ID3 5.C4.5 6.CART 7.随机森林 2. 我们应该设计什么的算法,使得计算机对贷款申请人员的申请信息自动进行分类,以决定能否贷款? ...

  9. 决策树之C4.5算法

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

随机推荐

  1. Taro框架下qq小程序开发体验

    qq小程序发布了,作为第一批体验者 .还是发现了和微信小程序很多不同的地方. 最新的小程序我这里都是用Taro开发的,体验较为不错.数据管理用的是redux.JS用的ES6加async等. 微信小程序 ...

  2. 使用Elasticsearch7 java api实现pdf全文检索

    前提:pdf的内容是文字形式而不是图片形式! 一.方法 Elasticsearch实现pdf的全文检索,原理是将pdf转换为Base64,然后提取pdf的文字内容然后将其存储起来. Elasticse ...

  3. Python的6种运算符(日记)

    学习了许久的Python,我单独总结出了Python中比较常见的6种运算符,感觉略有不全,希望大伙可以一起讨论与研究Python! 一.算术运算符 加 减 - 乘 * 除 / 取余 % 取整 // 异 ...

  4. springboot数据库主从方案

    本篇分享数据库主从方案,案例采用springboot+mysql+mybatis演示:要想在代码中做主从选择,通常需要明白什么时候切换数据源,怎么切换数据源,下面以代码示例来做阐述: 搭建测试环境(1 ...

  5. 【第十五篇】easyui datagrid的列编辑,同时插入两张表的数据进去

    看图说话. 需求:插入两张表,上面的表单是第一张表的内容,下面的两个表格是第二张详情表的内容,跟第一张表的id关联 第二张表有一个列是需要用户手动填写添加的. 国际惯例,上代码 <div id= ...

  6. ActiveMQ的安装与使用。

    1.什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE .4规范的 JMS Provider实现,尽 ...

  7. Mybatis多数据源读写分离(注解实现)

    #### Mybatis多数据源读写分离(注解实现) ------ 首先需要建立两个库进行测试,我这里使用的是master_test和slave_test两个库,两张库都有一张同样的表(偷懒,喜喜), ...

  8. iOS渠道追踪统计方法大全

    说起 iOS 的渠道统计,不少人会想到苹果官方的 App 分析功能(iTunes Connect),但实际操作中我们会发现,这个服务的统计维度还不够全面,许多广告主和运营人员更关心的是各个推广渠道实际 ...

  9. [VB.NET Tips]程序的启动和终止

    当执行一个VB.NET应用程序时,CLR会把IL翻译成x86指令,并且寻找一个名为Main的方法. 并从该方法开始执行程序.Main方法也称为程序的"入口"(entry point ...

  10. web-文件上传漏洞总结

    思维导图: 一,js验证绕过 1.我们直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可. 或者可以不加载所有js,还可以将html源码copy一份到本地,然后对相应代码进行 ...