决策树之——ID3算法及示例

news/2024/11/15 6:59:37/文章来源:https://www.cnblogs.com/hello-nullptr/p/18395381

0 前言

  • 本文主要介绍决策树ID3算法,并举出构建示例帮助理解。
  • 读者需要具备的知识:信息熵、条件熵、信息增益。
  • 本文使用数据集为:游玩数据集 1.1节。

1 ID3算法简述

ID3(Iterative Dichotomiser 3)算法是一种经典的决策树学习算法,由Ross Quinlan于1986年提出。该算法的主要目的是通过构建一个决策树模型来对样本数据进行分类。ID3算法的核心思想是基于信息增益(Information Gain)来选择最佳的属性作为决策树的节点,以此来实现对数据的划分。

2 算法流程

  1. 初始化:首先,算法将所有训练样本集放在根节点。

  2. 特征选择:对于当前节点,计算所有候选特征的信息增益。选择信息增益最大的特征作为当前节点的分裂特征。

  3. 节点分裂:根据所选特征的每个不同取值,将当前节点划分为多个子节点。每个子节点包含该特征取值下对应的所有样本。

  4. 递归构建:对于每个子节点,递归地执行步骤2和步骤3,直到满足停止条件(如所有样本属于同一类别、没有更多特征可供选择等)。

  5. 构建完成:最终,当所有节点都无法再进一步划分时,决策树构建完成。

注:ID3算法需要设定特征集阈值ε,设置阈值的主要作用是限制决策树的深度、防止过拟合、平衡模型复杂度和泛化能力。当最大信息增益小于阈值ε时,则设置为单节点,不进行分支,反之则递归地执行步骤2和步骤3。本文未考虑设置阈值

3 例题一

  • 数据集采用游玩数据集,由于样本数据较简单,例题并没有考虑设置阈值。

  • 初始化,构建根节点。具体构建方法如下图(3-1)所示。
    image
    解释:计算出随机变量play的信息熵H(play),再计算出每个特征的条件熵,得出每个特征的信息增益,选择最大的信息增益对应的属性为根节点,然后对根节点分裂,出现3条子枝。

  • 递归构建,构建图3-1的D1。具体构建方法如下图(3-2)所示。
    image
    解释:上图是构建图3-1的D1,由于图3-1的D1表示的是数据集D在outlook=rainy的条件下的新数据集,D1数据集中的outlook属性都是rainy,故不需要再计算g(play,outlook)。

  • 递归构建,构建图3-2的D2。具体构建方法如下图(3-3)所示。
    image
    解释:图3-3的windy节点构建完毕,递归构建humidity节点,仍按照算法流程计算信息增益。

  • 构建完成。到此决策树已经构造完成。由于所给数据集构造的决策树较简单,相对于其他数据集可能并非如此,在构造复杂的决策树时,对每个子集重复上述方法,直到满足停止条件。

4 例题二

  • 初始化,构建根节点。如下图(4-1)所示,选择信息增益最大的纹理作为根节点,当纹理为模糊时,样本均为坏瓜,其他类型有好有坏。
    image

  • 递归构建D1。如下图(4-2)所示,当根蒂为蜷缩时,样本均为好瓜,当根蒂为硬挺时,样本均为坏瓜,其他类型有好有坏。
    image

  • 递归构建D3。如下图(4-3)所示,当色泽为青绿时,样本均为好瓜,但没有色泽为浅白的样本,其他类型有好有坏。
    image

  • 递归构建D4。如下图(4-4)所示,当触感为硬滑时,样本均为好瓜,反之为坏瓜。
    image

  • 递归构建D2。如下图(4-5)所示,当触感为软粘时,样本均为好瓜,反之为坏瓜。
    image

  • 构建完成。所有节点都无法再进一步划分,此时所有节点构建完成。

5 算法优缺点

5.1 优点

  1. 算法原理简单,易于理解。
  2. 能够处理分类任务,并且分类速度快。
  3. 决策树模型的可解释性强,便于理解和分析。

5.2 缺点

  1. 只能处理离散值特征,对于连续值特征需要预先处理(如离散化)。
  2. 对缺失值敏感,需要进行额外的处理(如填充缺失值)。
  3. 倾向于选择取值较多的特征作为分裂特征,这可能导致模型不够稳定。
  4. 容易发生过拟合,特别是当决策树过于复杂时。

6 应用与展望

ID3算法广泛应用于分类问题中,如客户分类、疾病诊断、信用评估等。通过构建决策树模型,可以实现对未知样本的快速分类和预测。然而,在实际应用中,为了克服ID3算法的缺点,通常会采用其改进版本(如C4.5算法和CART算法)或结合其他机器学习算法进行集成学习。

7 结语

如有错误请指正,禁止商用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791863.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder ABC 369题解

题解前言 本题解部分思路来源于网络,仅供参考 ! A - 369 题目大意 给定 \(A\) , \(B\) 两个整数,求有多少个整数 \(x\) 使得可以通过某种排列使得 \(A\) ,\(B\) ,\(x\) 为等差数列。解题思路 稍加分析即可得到:如果 \(A = B\) 则结果为 \(1\) 。如果 \(A = B\) 但 \((A …

三路快速排序

// 快速排序 function quickSort(arr) {if (arr.length <= 1) {return arr;}const pivot = arr[0];const left = [];const right = [];for (let i = 1; i < arr.length; i++) {if (arr[i] < pivot) {left.push(arr[i]);} else {right.push(arr[i]);}}return quickSort…

三路排序

// 快速排序 function quickSort(arr) {if (arr.length <= 1) {return arr;}const pivot = arr[0];const left = [];const right = [];for (let i = 1; i < arr.length; i++) {if (arr[i] < pivot) {left.push(arr[i]);} else {right.push(arr[i]);}}return quickSort…

8.30 ~ 9.8

文化课奥赛8.30 返校日。 又回到了原来的班(和化奥一个班),一个班有 69 个人; 然后我坐在最角上 🙃 第二天还要开学考试,还有 60% 的原题,这我拿头靠考啊; 遂摆。 发现了坐最后面的好处:离得远老师看不到。 8.31 开学考试。 考试顺序:语 \(\to\) 物 \(\to\) 数 \(\t…

【Spring Boot】整合MyBatis

**整合MyBatis**前言 Spring Boot和MyBatis都是非常流行的Java框架。Spring Boot简化了Spring应用的开发,而MyBatis则是一个优秀的持久层框架,支持自定义SQL、存储过程以及高级映射。 mybatis官方文档:http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconf…

C#设计模式入门实战教程

什么是设计模式 设计模式是对面向对象设计中反复出现的问题的解决方案。它们提供了被反复使用、多数人知晓的、经过分类编目的代码设计经验总结。 设计模式的作用提高代码的可重用性:通过定义一套标准的解决方案,设计模式使得相同或类似的问题可以在不同的项目中复用相同的代…

ES安装

1.初识elasticsearch Elasticsearch的官方网站如下: https://www.elastic.co/cn/elasticsearch/ 1.1.认识和安装 Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分。完整的技术栈包括:Elasticsearch:用于数据存储、计算和搜索 Logstash/Be…

java-URLDNS 链条审计

java-URLDNS 链条审计 URLDNS 链条,是我们学习 java 反序列化的启蒙链条,通过 java 内置的类函数调用,达到 DNS 外带数据的目的。 首先让我们来看一个小实验 从 dnslog.cn 平台获取一个域名 public class urlDNS {public void URL() throws UnknownHostException {InetAddre…

进程间通信——消息队列(通俗易懂)

消息队列 概念消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺陷。消息队列包括 POSIX 消息队列和 System V 消息队列。消息队列是 UNIX 下不同进程之间实现共享资源的一种机制,UN…

我克隆了我自己,数字生命有什么意义?

个人语音模型、个人视频模型、个人LLM语言模型都是基于开源的项目,但是需要进行少量的代码修改和集成的工作,这个过程不说很艰难,但是确实遇到很多问题。1. 场景... 2 2. 数字生命意义... 2 3. 具体实现思路... 4 1. 场景孩子:爸爸,今天天气不错,我们一起去打篮球吧?!…

Python批量分割Excel后逐行做差、合并文件的方法

本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,首先依据某一列数据的特征截取我们需要的数据,随后对截取出来的数据逐行求差,并基于其他多个文件夹中同样大量的Excel表格文件,进行数据跨文件合并的具体方法~本文介绍基于Python语言,针…

手动脱壳学习笔记1----手动脱upx壳

ESP定律脱壳 例题 https://files.buuoj.cn/files/ee7f29503c7140ae31d8aafc1a7ba03f/attachment.tar 两下F9按一下F9,ESP变红在ESP处右键在内存窗口处转到在下面的内存下硬件断点再按一下F9在401280处下断点scylla插件输入00401820最后处理