ID3算法详解:构建决策树的利器

目录

引言

ID3算法概述

算法基础

信息熵

​编辑

信息增益

ID3算法步骤

决策树

概念:

核心:

节点

1. 根节点

2. 非叶子节点

3. 叶子节点


引言

在机器学习领域,决策树是一种非常流行的分类和回归方法。其中,ID3算法作为决策树算法中的经典之作,自其提出以来就备受关注。本文将详细介绍ID3算法的原理、步骤、应用以及优缺点,帮助读者深入理解这一强大的分类工具。

ID3算法概述

ID3算法(Iterative Dichotomiser 3)是由澳大利亚计算机科学家Ross Quinlan在1986年提出的一种决策树学习算法。它基于信息论中的熵和信息增益的概念,通过递归地选择最佳属性来划分数据集,从而构建决策树。ID3算法的核心思想是通过选择最能降低数据不确定性的属性来进行划分,直到所有数据都属于同一类别。

算法基础

信息熵

信息熵是度量数据集中不确定性的一个指标,其值越大,表示数据集的不确定性越高,数据集的混乱程度越高。对于具有n个类别的数据集U,其信息熵H(U)可以定义为:

其中,pi​是U中第i个类别出现的概率。

例:

信息增益

信息增益是衡量某个属性对数据集分类能力的一个指标。对于数据集D和属性A,A的信息增益Gain(U,A)可以定义为:

Gain(U,A)=H(U)−∑v∈V​∣U∣∣Uv​∣​H(Uv​)

其中,V是属性A的所有可能值,Uv​是D中在属性A上取值为v的子集。

ID3算法步骤

  1. 计算信息熵:首先计算整个数据集D的信息熵H(D)。
  2. 计算信息增益:对于每个属性A,计算其信息增益Gain(D,A)。
  3. 选择最佳属性:选择信息增益最大的属性作为当前节点的分裂属性。
  4. 划分数据集:根据选定的属性A的不同取值,将数据集D划分为若干个子集。
  5. 递归构建决策树:对每个子集递归地执行步骤1-4,直到满足停止条件(如所有实例属于同一类别或没有更多属性可供划分)。

决策树

概念:


决策树通过对训练样本的学习,并建立分类规则,然后依据分类规则,对新样本数据进行分类预测,属于有监督学习。

核心:


所有数据从根节点一步一步落到叶子节点。

节点

1. 根节点
  • 定义:决策树的根节点是整棵树的起点,也是第一个进行特征判断的节点。它代表了决策过程的开始,是后续所有分支和节点的基础。
  • 作用:根节点根据训练数据集中最具分类能力的特征进行划分,从而引导数据流向不同的子节点。
2. 非叶子节点
  • 定义:非叶子节点是决策树中除了根节点和叶子节点以外的所有节点。它们位于根节点和叶子节点之间,每个非叶子节点都代表了一个特征判断或决策规则。
  • 特点
    • 入边与出边:非叶子节点通常有一条入边(来自其父节点)和两条或多条出边(指向其子节点)。这些边代表了特征的不同取值或决策结果的不同方向。
    • 决策规则:每个非叶子节点都包含对某个特征的测试条件,用于将数据集分割成更小的子集。这些决策规则是由已知数据集计算而得的,旨在减少数据集的不确定性。
  • 作用:非叶子节点通过不断的特征判断和决策规则应用,逐步将数据集细化,为最终的分类或回归结果奠定基础。
3. 叶子节点
  • 定义:叶子节点是决策树中的末端节点,表示分类或回归的最终结果。在分类问题中,每个叶子节点都对应一个类别标签;在回归问题中,每个叶子节点则对应一个具体的数值预测。
  • 特点
    • 无出边:叶子节点只有一条入边(来自其父节点),没有出边。这意味着叶子节点是决策过程的终点,不再进行进一步的特征判断或决策规则应用。
    • 分类或回归结果:每个叶子节点都包含了一个明确的分类或回归结果,这是决策树对输入数据的最终预测。
  • 生成条件:叶子节点的生成通常基于两个条件:一是无法进一步分割数据集(即所有样本都属于同一类别或具有相同的特征值);二是达到了预设的停止条件(如节点中的样本数小于某个阈值、树的深度达到了预设的最大值等)。

综上所述,决策树的根节点、非叶子节点和叶子节点共同构成了决策树的结构,通过不断的特征判断和决策规则应用,实现了对输入数据的分类或回归预测。

import pandas as pd
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt# 假设的数据集(从图片中猜测的)
data = {'Outlook': ['sunny', 'sunny', 'overcast', 'rainy', 'rainy', 'rainy', 'overcast', 'sunny', 'sunny', 'rainy', 'sunny','overcast', 'overcast', 'rainy'],'Temperature': ['hot', 'hot', 'hot', 'mild', 'cool', 'cool', 'cool', 'mild', 'cool', 'mild', 'mild', 'mild', 'hot','mild'],'Humidity': ['high', 'high', 'high', 'high', 'normal', 'normal', 'normal', 'high', 'normal', 'normal', 'normal','high', 'normal', 'high'],'Wind': ['weak', 'strong', 'weak', 'weak', 'weak', 'strong', 'strong', 'weak', 'weak', 'weak', 'strong', 'strong','weak', 'strong'],'PlayTennis': ['no', 'no', 'yes', 'yes', 'yes', 'no', 'yes', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'no']
}# 将数据转换为DataFrame
df = pd.DataFrame(data)# 将类别数据转换为数值型数据(scikit-learn要求)
df = pd.get_dummies(df, drop_first=True)  # 使用one-hot编码# 分离特征和标签
X = df.drop('PlayTennis_yes', axis=1)
y = df['PlayTennis_yes']# 创建决策树模型
clf = DecisionTreeClassifier(criterion='entropy')  # 使用熵作为分裂标准,类似于ID3的信息增益
clf.fit(X, y)# 绘制决策树
plt.figure(figsize=(20, 10))
plot_tree(clf, filled=True, feature_names=X.columns, class_names=['no', 'yes'])
plt.show()

运行结果:

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

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

相关文章

jenkins最佳实践(二):Pipeline流水线部署springCloud微服务项目

各位小伙伴们大家好呀,我是小金,本篇文章我们将介绍如何使用Pipeline流水线部署我们自己的微服务项目,之前没怎么搞过部署相关的,以至于构建流水线的过程中中也遇到了很多自己以前没有考虑过的问题,特写此篇&#xff0…

使用 Python 进行 PDF 文件加密

使用 Python 解密加密的 PDF 文件-CSDN博客定义一个名为的函数,该函数接受三个参数:输入的加密 PDF 文件路径input_pdf、输出的解密 PDF 文件路径output_pdf和密码password。https://blog.csdn.net/qq_45519030/article/details/141256661 在数字化时代…

Linux驱动开发基础(设备树)

所学来自百问网 目录 1. 引入设备树的原因 2. 设备树语法 2.1 Devicetree格式 2.1.1 DTS文件格式 2.1.2 node的格式 2.1.3 properties的格式 2.1.4 dts 文件包含dtsi文件 2.2 常用属性 2.2.1 #address-cells、#size-cells 2.2.2 compatible 2.2.3 model 2.2.4 st…

Total Commander 右键卡死问题,百度云冲突

一段时间TC总是右键卡死,后来发现是跟百度云冲突了,只要把右键菜单里的百度云删除即可 不仅仅是跟TC冲突,资源管理器也受累的 可以通过360安全卫士的右键菜单管理搞定,也可以注册表删除,可以先备份注册表 运行里 re…

一步解决Ubuntu中/mnt/hgfs无共享文件夹的问题

当我们启用了共享文件夹后,但是在终端/mnt/hgfs任然没有文件 在终端输入 sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other 之后,就可以查到共享文件了

复现 LET-NET

摘要 稀疏光流法是计算机视觉中的一项基本任务。然而,它依赖于恒定的假设限制了其在高动态范围(HDR)场景中的适用性。在本研究中,我们提出了一种新的方法,旨在通过学习一个对光照变化具有鲁棒性的特征映射来超越图像的…

【TC3xx芯片】TC3xx芯片CAN模块详解

目录 前言 正文 1.CAN硬件资源】 1.1. CAN硬件单元 1.2. CAN时钟 1.2.1. CAN时钟设计 1.2.2. MCMCAN配置实例 1.3. CAN中断 1.3.1. TC3xx芯片CAN中断设计 1.3.2. 通过查看寄存器看中断配置和产生状态 1.3.3. 实际AUTOSAR工程CAN中断配置 2.功能描述 2.1. 操作模式…

KubeSphere核心实战_kubesphere部署redis01_为redis指定配置文件_指定存储卷_配置服务---分布式云原生部署架构搭建047

然后我们再来,部署一下redis,可以看到,首先去容器官网去找到对应的redis的镜像然后 可以看到镜像中都有说的,如何启动,以及 --appendonly yes 是指定持久化.然后 /data表示数据存储的位置. 可以看到数据存储位置 然后还有配置文件的位置. 可以看到,我们首先去创建配置文件,然后…

LNMP 架构(Linux+NGINX+memcache+PHP)

目录 1 源码编译PHP与NGINX 1.1 NGINX 源码编译 1.2 PHP 源码编译安装 2 实现PHP与NGINX的连接 2.1 php-fpm的详细介绍 2.2 LNMP与LAMP的区别 2.3 PHP配置文件的介绍 2.4 实例实现php-fpm 与 NGINX的连接 2.4.1 指定pid的存放位置 2.4.2 php-fpm设置监听自己端口与IP 2.4.3 主配…

配置 昇腾 Ascend C/C++ 开发环境

配置 昇腾 Ascend C/C 开发环境 flyfish 这里以Orange Pi Ai Pro 为例 先说如何配置MindStudio,然后再说如何查看Orange Pi Ai Pro的一些信息 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板,其搭载了昇腾 AI 处理器。Linux 桌面…

VSCode系列 - 如何用VSCode搭建C++高效开发环境(2)

1. 插件的用法 1.1. C/C 1.1.1. 插件介绍1.1.2. 插件配置 1.2. Clang-Format1.3. cpp-check-lint 1.3.1. cpplint1.3.2. cppcheck1.3.3. 插件的使用 1.4. C/C Advanced Lint 1.4.1. 插件介绍1.4.2. 插件配置 1.5. Bracket Pair Colorizer 1.5.1. 插件介绍1.5.2. 功能配置 1.6. …

海外独立站站外推广:拓展全球市场的策略与实践

海外独立站的站外推广是一个系统工程,涉及市场研究、品牌本土化、多渠道推广、广告投放、网站体验优化、客户服务和数据分析等多个方面。通过本文的探讨,企业可以更好地理解海外推广的策略和实践,把握全球化电商的发展趋势,实现企…

【机器学习】探索机器学习在旅游业的革新之旅

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 🔍1. 引言📒2. 机器学习在旅游需求分析中的应用🌞用户行为数据分析🌙旅客偏好预测模型⭐…

Java面试八股之如何保证消息队列中消息不重复消费

如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费,通常需要从以下几个方面来着手: 消息确认机制: 对于像RabbitMQ这样的消息队列系统,可以使用手动确认(manual acknowledge)机制来…

vue里组件化引入svg图标的方式

配置好后可以轻松从iconfont导入svg图标或者任意svg图标。 参考:https://blog.csdn.net/weixin_39729729/article/details/137348970 https://blog.csdn.net/CMDN123456/article/details/139854354 官网https://www.iconfont.cn/help/detail?spma313x.help_detai…

C++ 设计模式——策略模式

策略模式 策略模式主要组成部分例一:逐步重构并引入策略模式第一步:初始实现第二步:提取共性并实现策略接口第三步:实现具体策略类第四步:实现上下文类策略模式 UML 图策略模式的 UML 图解析 例二:逐步重构…

Flask-SQLAlchemy 和 Alembic 的结合

Flask-SQLAlchemy 和 Alembic 的结合 安装必要的库配置 Flask-SQLAlchemy定义数据库模型初始化 Alembic配置 Alembic配置 env编写迁移脚本应用迁移后续迁移Flask-SQLAlchemy 和 Alembic 是两个非常流行的 Python 库,它们通常一起使用来管理 Flask 应用中的数据库迁移。Flask-S…

低功耗神经网络

低功耗神经网络(Low-Power Neural Networks)是指在有限能源或资源条件下设计和实现的高效神经网络模型。这些网络旨在减少能耗,同时在性能上保持与传统神经网络相近的水平。随着深度学习在移动设备、物联网(IoT)和边缘…

【c语言】整数在内存中的储存(大小端字节序)

整数在内存中的储存(大小端字节序) 1.整数在内存中的储存 2.大小端字节序 3.整数在内存中储存例子 4.字节序判断 5.死循环现象 文章目录 整数在内存中的储存(大小端字节序)整数在内存中的储存大小端字节序什么是大小端为什么会有…

深入理解 Go 语言原子内存操作

原子内存操作提供了实现其他同步原语所需的低级基础。一般来说,你可以用互斥体和通道替换并发算法的所有原子操作。然而,它们是有趣且有时令人困惑的结构,应该深入了解它们是如何工作的。如果你能够谨慎地使用它们,那么它们完全可以成为代码优化的好工具,而不会增加复杂性…