首页 > 编程语言 >决策树之——ID3算法及示例

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

时间:2024-09-03 21:37:09浏览次数:4  
标签:示例 样本 ID3 算法 构建 节点 决策树

0 前言

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 结语

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

标签:示例,样本,ID3,算法,构建,节点,决策树
From: https://www.cnblogs.com/hello-nullptr/p/18395381

相关文章

  • 字典操作示例
    字典用{}标识,它是一个无序的“键(key):值(value)”对集合。在同一个字典中,键必须是唯一的,但值不必唯一,值可以是任何数据类型,但键必须是不可变的,如字符串,数字,元组首先需要先定义一个字典dict1={'Alice':'123','Beth':'456','Cecil':'abc'}输出123print(dict1['Alice'])增......
  • 列表操作示例
    首先先定义一个列表,列表是写在[]里,用逗号隔开的,元素是可以改变的列表的截取语法结构是:变量[头下标:尾下标]L=['abc',12,3.45,'python',2.789]输出完整列表print(L)输出列表的第一个元素print(L[0])将列表的第一个元素修改为‘a’L[0]='a'将列表的第2个元素到第3个元素......
  • PHP 代码示例 拷贝文件夹目录下的所有子目录及文件到另一个文件夹目录
    PHP 拷贝文件夹目录下的所有子目录及文件到另一个文件夹目录:调用示例:$srcFolder="C:/www/upload/src";$dstFolder="C:/www/upload/dst";$this->recurseCopy($srcFolder,$dstFolder);functionrecurseCopy($src,$dst){$dir=o......
  • flask多线程下数据库操作(简单示例)
    前言背景:开了两个线程操作数据库插入但是获取不到db的信息,自己摸索的方法不一定是最佳的,有更好的可以评论或私信,感谢大佬话不多说,直接上代码 #模型里面的多线程新增操作@staticmethoddefadd_users_by_thread(username,password,session):user=U......
  • 决策树算法 0基础小白也能懂(附代码)
    决策树算法原文链接啥是决策树决策树(Decisiontree)是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法(也就是带有标签的训练数据集训练的,比如后文中使用到的训练集中的好瓜坏瓜就是标签,形容瓜的就是特征)决策树模型(Decision......
  • 4个成功的事务性邮件示例
    如何确定您正在充分利用交易邮件?您可能已经了解了一些关于交易邮件的基础知识以及一些确保邮件合规和良好执行的一般最佳实践。但是,您是否能够轻松地利用多种数据源个性化您的交易邮件,例如提取客户特有的忠诚积分数量?您是否能够战略性地安排其他通信与您的交易流程同步,例如仅......
  • https 服务示例 go-gin框架 支持ssl/tls,
    本文为演示采用自签名证书一.生成证书通过openssl工具生成证书1.1安装opensslmacos通过brew安装brewinstallopenssl1.2生成跟证书私钥opensslgenrsa-outca.key40961.3准备配置文件vimca.conf内容如下   [req]   default_bits      =4096   distin......
  • 配置 expect 免交互自动化脚本 2个示例
    文章目录示例1:实现密码输入错误的提示示例2:用免交互的方式给硬盘分区、格式化、挂载示例1:实现密码输入错误的提示在expect脚本中,可以通过捕捉密码错误的输出信息来提示用户。比如:expect{"password"{send"$password\r"}"Permissiondenied"{send_......
  • vue使用echart示例
    <template><el-cardshadow="never"><template#header><divclass="flexjustify-between"><spanclass="text-sm">订单统计</span><div&g......
  • 25. shell当中的函数详解,管理函数,定义函数,交互式环境调用函数,查看删除函数,脚本中的函
    文章目录前言管理函数定义函数交互式环境调用函数查看函数删除函数脚本中的函数定义及使用函数使用函数文件环境函数示例总结友情链接前言函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独......