《机器学习》 决策树 ID3算法

目录

一、什么是决策树?

1、概念

2、优缺点

3、核心

4、需要考虑的问题

二、决策树分类标准,ID3算法

1、什么是ID3 算法

2、ID3算法怎么用

1)熵值计算公式

2)用法实例

三、实操 ID3算法

1)求出play标签的熵值

2)分别计算天气、温度、湿度、风、play的信息增益

• 求outlook 总熵值及信息增益

• 求temperature 总熵值及信息增益

• 求humidity总熵值及信息增益

• 求windy总熵值及信息增益

当前可以绘画出决策树根节点部分:

3)此时需要对sunny对应的块进行当做一个表来计算其内数值的熵:

• play标签的熵

• 求temperature 总熵值及信息增益

• 求humidity总熵值及信息增益

• 求windy总熵值及信息增益

4)此时需要对rainy对应的块进行当做一个表来计算其内数值的熵:

• play标签的熵

• 求temperature 总熵值及信息增益

• 求humidity总熵值及信息增益

• 求windy总熵值及信息增益


一、什么是决策树?

1、概念

        决策树是机器学习中一种常见的分类和回归算法。它基于树状结构的模型,通过对数据进行逐步划分,最终生成一棵决策树来进行预测或分类任务。

        在决策树中,每个节点代表一个特征或属性,每个分支代表该特征的不同取值,而每个叶节点代表一个类别或者一个预测结果。

        决策树的构建过程通过选择最优的特征和划分点来进行。这个选择过程通常基于一些衡量指标,比如信息增益、基尼指数等,来选择最能区分不同类别的特征进行划分。递归地对数据集进行划分,直到满足某个停止条件,例如达到最大深度、样本数量不足等。这样就生成了一棵完整的决策树模型。

2、优缺点

        易于理解和解释,能够处理离散和连续型特征,对缺失值和异常值具有鲁棒性,同时可以处理多分类问题。

        容易过拟合训练数据,对噪声敏感,不适合处理高维稀疏数据。针对这些问题,可以采用剪枝、集成学习等方法进行改进。

3、核心

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

        例如下图,房产是根节点,下面的车辆、年收入是非叶子节点,那么其结果可以贷款和不可贷款就是叶子结点

4、需要考虑的问题

1)哪个节点作为根节点?哪些节点作为中间节点?哪些节点作为叶子结点?

2)节点如何分裂?

3)节点分裂标准的依据是什么?

二、决策树分类标准,ID3算法

1、什么是ID3 算法

        衡量标准:熵值,熵值表示随机变量不确定性的度量,或者说是物体内部的混乱程度。

        用于根据给定的训练数据集构建决策树模型,其基本思想是在每个节点上选择最佳的属性来进行划分,以使得划分后的子节点中的样本尽可能属于同一类别。

        ID3算法通过计算每个属性的信息增益来度量属性选择的好坏。信息增益反映了在已知某个属性的取值的条件下,对类别的不确定性减少了多少。在每个节点上选择信息增益最大的属性作为划分依据,递归地构建决策树。

        其缺点是仅适用于处理离散型属性,不适用于处理连续型属性。此外,ID3算法在处理缺失数据时也存在问题。

2、ID3算法怎么用

1)熵值计算公式

2)用法实例

        集合A:[1,1,1,1,1,1,1,1,2,2],共10项

        集合B:[0,1,2,3,4,5,6,7,8,9],同样10项

        A的熵值为:1的概率乘上其log,2的概率乘上其log,然后再求和即可得到熵值

        即:-8/10 * log(8/10)-(2/10)log(2/10)=0.722

        同理:B的熵值为:(-1/10 log(1/10))*10=3.322

所以:B的熵值更大,其数据更混乱

三、实操 ID3算法

有如下数据图表,画出其决策树

1)求出play标签的熵值

result = -5/14log(5/14)- 9/14log(9/14)= 0.94

2)分别计算天气、温度、湿度、风、play的信息增益

        信息增益 = 标签的熵 - 总熵值

        总熵值 = 每列的不同种类熵值的比例求和

• 求outlook 总熵值及信息增益

sunny熵值 = -3/5log(3/5) - 2/5log(2/5) =0.97

overcast熵值 = -4/4log(4/4) = 0

rainy熵值 = -3/5log(3/5) - 2/5log(2/5) =0.97

outlook 总熵值 = 5/14 * sunny熵值 + 4/14 * overcast熵值 + 5/14 * rainy熵值 = 0.6929

信息增益 = 标签熵值 - 总熵值 = 0.2471

• 求temperature 总熵值及信息增益

hot熵值 = -2/4log(2/4)-2/4log(2/4)= 1.0

mild熵值 = -4/6log(4/6) -2/6log(2/6)= 0.92

cool熵值 = -1/4log(1/4) -3/4log(3/4)= 0.81

temperature总熵值 = 4/14 * 1.0 + 6/14 * 0.92 + 4/14 * 1.0 = 0.91

信息增益 = 0.94 - 0.91 = 0.03

• 求humidity总熵值及信息增益

high熵值 = -4/7log(4/7)- 3/7log(3/7)= 0.985

normal熵值 = -6/7log(6/7) - 1/7log(1/7) = 0.592

humidity总熵值 = 7/14*0.985 + 7/14*0.597 = 0.788

信息增益 = 0.94 - 0.788 = 0.152

• 求windy总熵值及信息增益

FALSE熵值 = -6/8log(6/8) - 2/8log(2/8) = 0.81

TRUE熵值 = -1/2log(1/2) - 1/2log(1/2)= 1.0

windy总熵值 = 8/14 *0.81 + 6/14*1.0 = 0.89

信息增益 = 0.94 - 0.89 = 0.05

由上述可得:

        outlook信息增益为:0.2471

        temperature信息增益为:0.03

        humidity信息增益为: 0.152

        windy信息增益为:0.05

        所以可知,outlook的信息增益最大,信息增益越大表示在划分属性上获得更多的信息,即在已知某个属性的取值的条件下,类别的不确定性减少了更多。因此,信息增益越大,说明选择该属性作为划分依据能够更好地区分不同类别的样本,所以将其当做根节点。

当前可以绘画出决策树根节点部分:

3)此时需要对sunny对应的块进行当做一个表来计算其内数值的熵:

• play标签的熵

        result = -3/5log(3/5) -2/5log(2/5)= 0.97

• 求temperature 总熵值及信息增益

        hot熵值 = -2/2log(2/2)= 0

        mild熵值 = -1/2log(1/2) -1/2log(1/2)= 1.0

        cool熵值 = -1 log 1 = 0

        总熵值 = 1/5 * 1 = 0.2

        信息增益 = 0.97 - 0.2 =0.77

• 求humidity总熵值及信息增益

        high熵值 = -1 log 1 = 0

        normal熵值 = -1 log 1 = 0

        总熵值 = 0

        信息增益 = 0.97 - 0 = 0.97

• 求windy总熵值及信息增益

        False熵值 = -1/3log(1/3)-2/3log(2/3)= 0.918

        TRUE熵值 = -1/2log(1/2) -1/2log(1/2)= 1.0

        总熵值 = 3/5 * 0.918 + 2/5 * 1 = 0.9508

        信息增益 = 0.97 - 0.9508 = 0.0192

        由上述可得最大信息增益为湿度humidity,所以可得出上述决策树图sunny对应的非叶子节点为湿度

此时可发现湿度为high是,标签为no,湿度为normal时,标签为yes,如下图所示:

4)此时需要对rainy对应的块进行当做一个表来计算其内数值的熵:

• play标签的熵

        result = -3/5log(3/5) -2/5log(2/5)= 0.97

• 求temperature 总熵值及信息增益

        mild熵值 = -1/3log(1/3)-2/3log(2/3)= 0.918

        cool熵值 =  -1/2log(1/2) -1/2log(1/2)= 1.0

        总熵值 = 0.918 * 3/5 + 1 * 2/5 = 0.9508

        信息增益 = 0.97 - 0.9508 = 0.0192

• 求humidity总熵值及信息增益

        high熵值 = -1/2log(1/2) -1/2log(1/2)= 1.0

        normal熵值 =  -1/3log(1/3)-2/3log(2/3)= 0.918

        总熵值 = 1 * 2/5 + 0.918 * 3/5 = 0.9508

        信息增益 = 0.97 - 0.9508 = 0.0192

• 求windy总熵值及信息增益

        False熵值 = 0

        TRUE熵值 = 0

        总熵值 = 0

        信息增益 = 0.97 

所以可得出上述rainy对应非叶子结点的项为windy

然后再观察可得到风为FALSE时标签为yes,风为TRUE时,标签为no

所以得出完整决策树图片:

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

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

相关文章

欧姆龙PLC数据 转 IEC61850项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 准备工作 4 网关采集欧姆龙PLC数据 5 用IEC61850协议转发数据 6 网关使用多个逻辑设备和逻辑节点的方法 7 案例总结 1 案例说明 设置网关采集欧姆龙PLC数据把采集的数据转成IEC61850协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX…

【JUC并发编程系列】深入理解Java并发机制:从用户态到内核态的探索(一、前置知识)

文章目录 【JUC并发编程系列】深入理解Java并发机制:从用户态到内核态的探索(一、前置知识)1.用户态与内核态区别2. 线程安全同步的方式3. 传统锁有哪些缺点4. 发生CPU上下文切换的原因5. 如何避免上下文切换6. 详细总结6.1 用户态与内核态6.…

Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程序打包为MacOS可以直接运行的DMG安…

Python(R)均方根误差平均绝对误差导图

🎯要点 回归模型评估指标评估薪水预测模型评估员工倦怠率模型评估大气分析生成式对抗模型目标对象缺失下,性能估算法追踪模型误差指标降尺度大气学模拟模型准确性评估蛋白染色质相互作用模型评估 Python回归误差指标 平均绝对误差表示数据集中实际值和…

【flask框架搭建服务器demo】Python 使用轻量级 Flask 框架搭建 Web 服务器可视化数据库数据demo

本文适合刚入门flask框架用来熟悉项目的开发人员,关于flask框架的组成概念一些用法请参考下面的文章 https://blog.csdn.net/qq_47452807/article/details/122289200 本文主要给出一个可视化sqlite数据库数据的demo,先展示一下效果: 主要的…

【uniapp/uview1.x】u-collapse 高度随内容自适应

当 u-collapse-items 中的内容为动态的时候&#xff0c;会发生这种情况&#xff1a; 在 uview 官网中有一个方法可以解决&#xff1a; 具体方法&#xff1a; 在 u-collapse 标签中配置 ref"collapse"&#xff1a; <u-collapse ref"collapse" :item-…

Golang | Leetcode Golang题解之第376摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

使用notepad++将shell脚本转为UNIX格式方法(主要差别在换行符)

sh文件尽量在linux上改&#xff0c;因windows和linux换行符不同&#xff0c;在windows上改后&#xff0c;在linux上改可能会出现换行符错误。 windows换行符 linux换行符 windows环境改换行符方法 使用notepad点 编辑–》文档格式转换–》转换未unix格式。 注&#xff1a;tx…

C# 泛型类型的约束详解与示例

文章目录 一、泛型约束概述二、泛型约束详解与示例1. 类约束2. 接口约束3. 引用类型约束4. 值类型约束5. 无参数构造函数约束6、多重约束7、默认构造函数约束8、基类和接口的组合约束 三、总结 在C#编程语言中&#xff0c;泛型是一种非常强大的特性&#xff0c;它允许我们编写可…

鸿蒙卡片服务开发

首先先创建一个项目 在该项目下创建一个卡片服务 在module.json5文件下配置 {"module": {..."extensionAbilities": [{"name": "EntryFormAbility","srcEntry": "./ets/entryformability/EntryFormAbility.ets",…

Apache Tomcat与反向代理

Apache Tomcat 是一个开源的 Java Servlet 容器&#xff0c;主要用于部署和运行基于 Java 的 Web 应用程序。Tomcat 提供了一个环境&#xff0c;让开发者能够使用 Java 编写的 Web 应用程序在 Web 服务器上运行。下面是对 Tomcat 的详细介绍&#xff1a; Tomcat 的历史 Tomca…

Unity 中使用SQLite数据库

文章目录 0.参考文章1.Presentation —— 介绍2.&#xff08;SQLite4Unity3d&#xff09;Unity中直接使用SQLite的插件3.创建数据库4.创建表5.Navicat Premium&#xff08;数据库可视化&#xff09;6.增删改查6.1 增6.2 删6.3 改6.4 查 0.参考文章 https://blog.csdn.net/Chin…

干货 | 关于Armv7m异常进入的经验分享

一、 概述 这里主要介绍异常的进入行为&#xff08;不包括复位异常&#xff09;。&#xff08;这里主要参考 armv7m&#xff09;。 二、异常进入 在发生抢占的时候&#xff08;异常发生且开始执行&#xff09;&#xff0c;硬件将上下文状态保存到一个 SP 寄存器指向的栈中&a…

优化|贝叶斯优化系列(二):大规模贝叶斯优化算法

原文&#xff1a;When Gaussian Process Meets Big Data: A Reviewof Scalable GPs 原文作者&#xff1a;Haitao Liu , Yew-Soon Ong 论文解读者&#xff1a;赵进 编者按 高斯过程模型因其出色的预测性能在仿真建模中得到了广泛应用&#xff0c;然而在当今大数据时代&#xf…

百度翻译与TOP3在线翻译伙伴:2024年的黄金组合

在这个信息丰富的时代&#xff0c;语言帮助人们跨越地域界限进行交流。随着全球化的发展&#xff0c;高效的在线翻译工具变得越来越重要&#xff0c;它能帮我们更好地了解世界和不同的文化。今天&#xff0c;我们就来看看百度翻译和它的三个新对手之间的比较&#xff0c;一起找…

Codeforces Round 916 (Div. 3) E1. Game with Marbles(博弈论*1400)

感觉很难想。 如果你直接想的话&#xff0c;你就会发现有很多做法可以选择&#xff0c;而你根本不知道应该选哪个。 这时候可以先假设鲍勃已经取走了爱丽丝的所有的颜色的弹珠&#xff0c;&#xff08;并且以每个颜色一个弹珠的代价&#xff09;。 这时候每一项得分就是 S i …

Dubbo 内置容器:Spring Container

Dubbo 内置容器&#xff1a;Spring Container 1、核心点2、误解澄清 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Dubbo本身并不直接提供容器服务&#xff0c;而是深度集成了Spring框架&#xff0c;实现了对Spring Container的全面支持。…

游戏开发设计模式之原型模式

目录 原型模式的实现步骤 原型模式的优点 原型模式的应用场景 总结 原型模式在游戏开发中的具体应用案例是什么&#xff1f; 如何在不同编程语言中实现原型模式&#xff1f; Java C# Python C JavaScript 原型模式与其他创建型设计模式&#xff08;如建造者模式、适…

Modern restaurant - building and interior (餐厅场景)

餐厅是模块化的,因此您可以使用提供的构造元素(如墙壁模块、地板模块、窗户、吧台、厨房模块、门、天花板模块等)进一步设计自己的餐厅。 图像和视频中显示的完整场景包含在此资源包中,可以用作游戏和3D项目的起点! ★ 主要特点 ★ 全模块化内饰和外观 全模块化厨房和餐厅…

PTA统计一行文本的单词个数

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串&#xff0c;各单词之间用空格分隔&#xff0c;空格数可以是多个。 输入格式: 输入给出一行字符。 输出格式: 在一行中输出单词个数。 输入样例: Lets go to room 209.输出样例: 5解题…