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…

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

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

复现 LET-NET

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

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)机制来…

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

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

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

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

Unity 麦扣 x 勇士传说 全解析 之 怪物基类(2)(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

1.怪物的动画逻辑一览 2.怪物的受伤死亡逻辑一览 using System.Collections; using System.Collections.Generic; using System.Xml; using UnityEngine;public class Monster : MonoBehaviour {[Header("速度")]public float normalSpeed;public float chaseSpeed;…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.5】yolov8使用C++部署在RK3588更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 背景…

nginx简介及功能

一、简介: 1、nginx、apache是什么? ‌Nginx‌是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它由伊戈尔赛索耶夫为Rambler.ru站点开发,以其稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而…

OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解

文章目录 协议分层的好处OSI七层网络模型TCP/IP五层网络模型网络设备所在的分层(重点)封装和分用 协议分层的好处 第一点: 在网络通信中,如果使用一个协议来解决所有的问题,那么这个协议就会非常的庞大,非常不利于去学习和理解&…

2023华为od机试C卷【转盘寿司】C 实现 单调栈

#include <stdio.h> #include <stdlib.h>/*单调栈 旋转寿司3 15 6 14 3 21 9 17*/ int main() {int i 0;int len 0;int data 0;int nums[501];char c ;while(scanf("%d",&nums[i]) 1){i;len;c getchar();if(c \n)break;}int *out NULL;int *s…

C语言-部分字符串函数详解 1-4

C语言-部分字符串函数详解 1-4 前言1.strlen1.1基本用法1.2注意事项\0size_t 1.3模拟实现 2.strcpy2.1基本用法2.2注意事项**源字符串必须以 \0 结束****会将源字符串中的 \0拷贝到目标空间****目标空间必须可修改****目标空间必须能容纳下源字符串的内容** 2.3模拟实现 3.strn…

【深度学习】【语音TTS】GPT-SoVITS v2 实战,训练一个人的音色,Docker镜像

文章目录 原理Dockerdocker push训练教程: https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/xyyqrfwiu3e2bgyk 原理 Docker 不用docker不行,不好分配显卡, 做个docker镜像: docker pull pytorch/pytorch:2.1.2