数据挖掘算法之C4.5

2023-11-04

算法描述

C4.5算法是机器学习和数据挖掘领域中用于处理分类问题的算法。该算法是有监督学习类型的,即:给定一个数据集,每条记录都由一组特征来描述,每条记录仅属于一个标签,在给定的数据集上运行C4.5算法可以学习到一个从特征值到标签的映射,进而可以使用该映射去分类未知的(无标签)数据集。
C4.5算法源于ID3(iterative dichotomizers 3,迭代分解器系列算法的第三代),是一种决策树诱导算法。
所有的树诱导方法大都遵循一种递归模式。即,用根结点表示一个给定的数据集;然后,从根结点开始,在每个节点上测试一个特定的特征,并把不同的测试结果划分为不同的子数据集,并用子树表示;当子集成为“纯”的,即子集中所有数据都属于同一个标签,树停止生长。

可以测试的数据类型

  • 布尔型,测试会诱导出两个分之;
  • 类别型,就会进行多值测试;
  • 连续型,测试就是 <= 或 > 某个阈值的形式。

如何对测试进行选择

C4.5算法使用增益(gain)、增益率(gain ratio)等信息论准则来对测试进行选择。增益被定义为“执行一个测试所导致的类别分布的熵的减少量”。通俗的说,就是数据由混乱变纯的程度。
这里记住相关公式即可:
熵:在这里插入图片描述
其中,c是标签的数量,pi为取到第i个标签的概率。

条件熵:
在这里插入图片描述

信息增益 = 熵 - 条件熵

但是信息增益有个缺点,会导致算法偏向于选择具有更多输出结果的特征。举个特例,对于一个值是unique的特征,显然不是作为决策树分类的好的特征选择,但这样的特征却具有最大的信息增益。因此C4.5使用信息增益率校正这一负面效应。
信息增益率:
在这里插入图片描述
关于特征a的信息增益率 = 关于特征a的信息增益/a的信息熵。
特征a的信息熵仅取决于它的取值的概率分布,与标签无关;而特征a的信息增益是与标签有关的。
有了信息增益率,就可以从所有特征中挑选出第一个根结点开始分类了。
C4.5算法在创建决策树过程中,引入了子树复制问题,根源在于该算法遵循属性选择的贪婪策略。通常情况下,必须通过穷尽搜索才能获得最佳属性,这就要求生长出完全的树。

算法特性

1.决策树剪枝
为了避免生成的树模型过拟合训练数据,必须对树进行剪枝处理。
C4.5算法使用悲观剪枝(Pessimistic pruning,PEP)的方法:通过在训练数据集上的错误分类数量来估算未知数据上的错误率。通过递归计算目标节点的分之的错误率来获得该目标节点的错误率。如果子树被它的最佳叶节点替代后,在训练集上表现更佳,PEP方法就决定用该子树的最佳叶节点代换这颗子树。
这种方法是将叶节点的错误率e建模成服从(0,1)分布(伯努利分布)的随机变量,对于一个置信区间阈值CI(confidence intervals),存在e的一个上界 e m a x e_{max} emax,使得 e < e m a x e<e_{max} e<emax,以 1 − C I 1-CI 1CI的概率成立(CI的默认值设定为0.25)。更进一步,可以用正态分布来逼近e(只要N足够大即可)。基于这些约定条件,C4.5算法的期望误差的上界为:
在这里插入图片描述
其中z的选择是基于理想置信区间,假设z是一个拥有零均值和单位方差的正态随机变量,也就是N(0,1)。
剪枝操作是一个单一的、自底向上、直到抵达根节点的遍历过程。在剪枝过程中,非叶节点的子树有三种可能:

  • 错误率没有得到改善,维持原状
  • 被表现更佳的子树替代
  • 被叶节点替代

缺失值处理

面临三个主要问题

  1. 在部分数据缺失个别特征值时,如何选出用于分裂树的合适属性?
  2. 为测试选定特征后,对于缺少该特征值的数据,无法分配到任何测试的结果子集中。这些数据如何参与到下一步树的生长中?
  3. 将模型用于新的数据时,可能会在树中遇到某个测试,如果该数据没有对应的特征,模型如何执行下去?
    前两个问题涉及诱导树的学习,第三个问题发生在使用训练好的模型进行分类的阶段。

解决办法
4. 在含缺失值的特征a上,进行特征选择准则的计算,包括:
- 忽略带有缺失值的数据
- 选用最常用的值或均值
- 对该特征的信息增益/信息增益率的计算问题,依据涉及缺失值的数据的比重折算
- 对训练数据中的缺失值进行“填充”,例如赋予一种独特的新值,或通过其他已知的特征尝试确定缺失值。
5. 在分裂过程中,有以下方法:
- 直接忽略该数据
- 为该数据缺失的该特征取一个常用值,从而进行数据划分
- 将该数据切分后,赋给每个子数据集,不同子数据集得到该数据的份额同其他已知属性的数据的数量成正比
- 直接将该数据赋给所有子数据集
- 为该特征缺失的情况专门建一个分之
- 确定该特征最可能的值,然后赋给相关的子集数据集
- 不再进行测试,将最有可能的类别赋给该数据

记得关注我的微信公众号菜鸟想超神

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据挖掘算法之C4.5 的相关文章

随机推荐

  • 腾讯云2022年双11云服务器配置及报价表汇总

    活动直达 点此进入腾讯云2022年双11活动主会场 腾讯云2022年双11活动的既有轻量应用服务器又有云服务器 购买资格分为个人企业同享和企业用户专享 因此 价格表可分为个人企业同享轻量应用服务器 个人企业同享云服务器 企业专享轻量应用服务
  • 618来袭!我用Python脚本实现了淘宝定时自动秒杀,小白也能轻松搞定!

    准备工作 我们需要把秒杀的商品加入购物车 因为脚本点击的是全选 所以不需要的商品要移出购物车 展示篇幅有限 淘宝秒杀程序的完整源代码已经打包好了 需要的朋友可以扫码加v 我分享给你 过程分析 1 打开某宝网站 pq webdriver Ch
  • 基于Fisco的测压工具使用笔记

    基本过程就是这样了 因为当初写的时候是用OneNote写的 复制过来是图片形式 然后主要的坑就是官方的源码有错误 官方也给了修改意见 根据 修改意见 修改源码 修改完我还碰到一个坑 不知道为什么这个位置缺少文件 移动到这个文件下添加solc
  • 【LeetCode】Day211-不用加减乘除做加法

    题目 剑指 Offer 65 不用加减乘除做加法 中等 题解 不能用加减乘除的题 要考虑位运算 设两数字的二进制形式a b s a b a i 代表a的二进制的第i位 则分为以下四种情况 a i b i 无进位和n i 进位c i 1 0
  • 字符串的总结(atoi和itoa函数的实现)

    目录 一 常见的字符串函数 strlen strcpy strcat strcmp 二 关于atoi函数的实现 三 关于itoa函数的实现 一 常见字符串的函数 strlen strcpy strcat strcmp 1 strlen 求字
  • 在网址上输入www.xxx.com到返回界面给用户发生了什么?

    在网址上输入www xxx com到返回界面给用户发生了什么 DNS域名解析 https blog csdn net m0 37812513 article details 78775629 gt tcp三次握手建立连接 https blo
  • Shiro 如何使用注解式进行授权操作呢?

    转自 Shiro 如何使用注解式进行授权操作呢 下文笔者讲述Shiro进行注解式授权操作的方法分享 如下所示 Shiro注解授权 常使用以下注解字段 如 RequiresRoles RequiresPermissions RequiresA
  • 关闭TCP中135、139、445、593、1025 等端口的操作方法 (转)(记录下)

    操作要领 封闭端口 杜绝网络病毒对这些端口的访问权 以保障计算机安全 减少病毒对上网速度的影响 近日发现有些人感染了新的网络蠕虫病毒 该病毒使用冲击波病毒专杀工具无法杀除 请各位尽快升级计算机上的杀毒软件病毒库 在断开计算机网络连接的情况下
  • AndeSight头文件缺失错误

    使用AndeSight开发山景Demo遇到的问题 路径别带中文名字 一个都不要 其实主要就是一个 当我导入demo之后 编译时遇到问题 缺失 h文件 各种缺失 那么这里我们也可以一个个导入 但是很难受 这里实际上只要在baseSDK建立工程
  • 西门子PLC入门-PLC介绍

    PLC全名 可编程逻辑控制器 Programmable Logic Controller 一种具有微处理器的用于自动化控制的数字运算控制器 可以将控制指令随时载入内存进行储存与执行 PLC由CPU 指令及数据内存 输入 输出接口 电源 数字
  • Stream流处理快速上手最佳实践

    一 引言 JAVA1 8得益于Lambda所带来的函数式编程 引入了一个全新的Stream流概念Stream流式思想类似于工厂车间的 生产流水线 Stream流不是一种数据结构 不保存数据 而是对数据进行加工处理 Stream可以看作是流水
  • 【前端面试题】/【Vue】组件中的data为什么要定义成一个函数而不是一个对象?

    Q 组件中的data为什么要定义成一个函数而不是一个对象 A 因为当定义为一个数组 对象时候 我们改变data中其中一个数据的值的时候 会影响到其他的数据 导致数据污染 而定义为一个函数 则可以避免这个情况 参考 每个组件都是 Vue 的实
  • Cadence(OrCAD)原理图导入到PADS Layout遇到的问题和解决方法

    看到有网友留言说将Cadence画的原理图导入到PADS Layout中没有成功 先在Cadence中导出原理图的网表 当然这里的网表是PADS Layout支持的 asc格式 然后在PADS Layout导入该网表文件 最终出现提示错误的
  • ARM汇编指令

    ARM汇编指令 1 汇编语法 1 1 mov movw r0 63500 0xf80c 将63500放到r0寄存器的低八位中 movt r0 25667 0x6443f80c 将25667放到r0寄存器的高八位中 1 2 lsl 左移 st
  • (十)服务器K8S集群部署SpringBoot项目实战

    1 准备springboot项目 可以在 https start spring io 网站准备一个项目 这里作为k8s的学习所以springboot项目中准备一个简单的访问接口即可 2 服务器环境准备 安装Jdk 1 更新系统软件包 sud
  • MybatisPlus分页类型转换 不要在用循环转换了

    使用MybatisPlus查询的sql 返回的必须是一个对应表实体的泛型分页数据 我们给前端返回只需返回VO 我们可能会循环进行对象复制从新赋值 优化 MybatisPlus分页对象有直接转换的方法 优化前 最终分页对象 Page
  • openwrt中添加自定义驱动模块和APP

    驱动模块添加 1 make menuconfig中的 kernel modules 其中的各个配置选项来自于下面目录中的 mk文件 这里以other mk为对照 后续我们添加的驱动模块 添加到other分支当中 2 建立模块目录 路径是pa
  • 力扣 [104、111、222]

    文章目录 104 二叉树的最大深度 原题链接 思路 代码 111 二叉树的最小深度 原题链接 思路 代码 222 完全二叉树的节点个数 原题链接 思路 广度优先遍历 思路 深度优先遍历 代码 代码 104 二叉树的最大深度 原题链接 思路
  • 【HDLBits 刷题 4】Verilog Language(4)Procedures 和 More Verilog Features 部分

    目录 写在前面 Procedures Alwaysblock1 Alwaysblock2 Always if Always if2 Always case Always case2 Always casez Always nolatches
  • 数据挖掘算法之C4.5

    算法描述 C4 5算法是机器学习和数据挖掘领域中用于处理分类问题的算法 该算法是有监督学习类型的 即 给定一个数据集 每条记录都由一组特征来描述 每条记录仅属于一个标签 在给定的数据集上运行C4 5算法可以学习到一个从特征值到标签的映射 进