吃透《西瓜书》第四章 决策树定义与构造、ID3决策树、C4.5决策树、CART决策树

news2024/9/22 17:28:41

目录

一、基本概念

1.1 什么是信息熵?

1.2 决策树的定义与构造

二、决策树算法

2.1 ID3 决策树

2.2 C4.5 决策树

2.3 CART 决策树 


一、基本概念

1.1 什么是信息熵?

信息熵:

熵是度量样本集合纯度最常用的一种指标,代表一个系统中蕴含多少信息量,信息量越大表明一个系统不确定性就越大,就存在越多的可能性,即信息熵越大

1.2 决策树的定义与构造

决策树是一种基于树形结构来进行决策的算法,它的主要原理是将数据集划分为一系列小的子集,每个子集称为一个决策树的“节点”,决策树的分支表示不同的决策路径,叶节点表示最终的决策结果。

在决策树的建立过程中,通常采用的是自顶向下的贪心策略,即每次选择最优的划分特征来进行节点的分裂,直到满足停止条件为止。

在选择最优的划分特征时,需要使用一些评估指标,如信息增益、基尼指数等来评估每个特征的划分能力,并选择具有最大划分能力的特征作为节点的分裂特征。

 

一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;

叶结点对应于决策结果,其他每个结点则对应于一个属性测试:

每个结点包含的样本集合根据属性测试的结果被划分到子结点中

根结点包含样本全集.从根结点到每个叶结点的路径对应了一个判定测试序列,决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单的“分而治之”

最关键的在第  8  行

如何选择最优划分属性

 

决策树的构造是一个递归的过程,有三种情形会导致递归返回:

(1) 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别

对应第 2 行的 if 语句

(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;

对应第 5 行的 if 语句

(3) 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。

对应第 11 行的 if 语句

二、决策树算法

2.1 ID3 决策树

ID3 决策树使用信息增益为准则来选择划分属性

信息增益: 在已知属性 (特征)a的取值后的不确定性减少的量,也即纯度的提升

信息熵 度量随机变量 X 的不确定性  越大越不确定!

 

信息增益越大,表示使用该属性划分样本集D的效果越好

因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性

举例:

 

 显然,属性“纹理”的信息增益最大,于是它被选为划分属性

划分结果:

2.2 C4.5 决策树

 

ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。

因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性,来避免这个问题带来的困扰。 

C4.5决策树并未完全使用“增益率”代替“信息增益”,而是采用一种启发式的方法先选出信息增益高于平均水平的属性,然后再从中选择增益率最高的。

首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率。

2.3 CART 决策树 

CART决策树使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好,越小表明碰到的异类的概率越小,纯度就越高

基尼指数越小,表明集合越纯 

选择基尼指数最小的属性作为最优划分属性

 

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

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

相关文章

Python小红书旋转验证码识别

本周免费接了一个用户的需求,研究了一下小红书旋转验证码。刚开始小瞧了它,觉得它应该没有百度旋转验证码那么难,毕竟图像没有干扰,需要的训练样本就可以很少。然而事情并没有这么简单,所以记录一下。 首先看一下最终…

代码随想录算法训练营第二天| 977. 有序数组的平方y,螺旋矩阵 II,209. 长度最小的子数组

977. 有序数组的平方y 思路,原数组是有序的,但是因为负数平方后可能变无序了,因此利用双指针遍历原数组,比较 nums[left]*nums[left]和nums[right]*nums[right]谁更大,然后对新数组赋值 class Solution {public int…

uni-table行点击事件

uni-app 如何点击表格的行跳转到对应的页面 找到uni-ui的源码,在源码里面绑定事件 用$emit发射事件 在你使用了uni-table的组件中接受改事件 然后绑定调用成功

在中国区部署日志通2.0

前提条件 一个域名:使用此域名来访问日志通控制台提供aws iam 的ssl证书 ,而且必须跟域名相关联具有四个子网(两个公有子网和两个私有子网)和NAT网关的VPC 步骤 1.创建ACM证书 1.1 请求公有证书 1.2 配置域名 1.3 新申请的证书记…

Python自动化测试之函数知识讲解

一、前言 本文章主要讲解Python中的函数定义调用、参数分类、函数使用、作用域以及内置函数等内容,是函数专题讲解,这些都是python自动化学习中的基础哟,只有学好了基础才会有利于后面自动化的学习哟。这里我不多说废话了,直接进入…

GO学习之 多线程(goroutine)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 文章目录 GO系列前言一、并发介绍1.1 进程和线程和协程1.2 并发和并行 二、goroutine介绍三…

Android 中 app freezer 原理详解(二):S 版本

基于版本:Android S 0. 前言 在之前的两篇博文《Android 中app内存回收优化(一)》和 《Android 中app内存回收优化(二)》中详细剖析了 Android 中 app 内存优化的流程。这个机制的管理通过 CachedAppOptimizer 类管理,为什么叫这个名字,而不…

HTTP协议 和 HTTPS协议的区别(4点) HTTPS如何使用SSL/TLS协议加密过程 CA证书干啥的

(一)HTTP协议 和 HTTPS协议的区别(4点): 1. HTTP协议的端口号是80, HTTPS协议的端口号是443 2. HTTP协议使用的URL是以 http:// 开头,HTTPS协议使用的URL是以https://开头 3. HTTP协议和HTTP…

Qt 中操作xml文件和JSON字符串

文章目录 1、概述1.1、xml介绍1.2、json介绍 2、xml文件增删改查2.1、写xml文件内容2.2、读xml文件内容2.3、删除xml文件内容2.4、修改xml文件内容 3、构建JSON字符串3.1、JSON字符串排版4、剪切板操作 1、概述 1.1、xml介绍 XML 指可扩展标记语言(EXtensible Mark…

“效能指标”,该由谁来定义?| 谈效风生

第5期:效能指标,该由谁来定义? 回顾上期《「自动化」聊起来简单,做起来难》我们聊了聊如何打造「自动化」的事,这也是真正实现研发效能提升的必要条件。从单点自动化提升效率,到全工具链自动化,…

常微分方程建模R包ecode(二)——绘制相速矢量场

本节中我们考虑一个更为复杂的常微分方程模型, d X C d t ν ( X A Y A ) − β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ) ⋅ X C , ( 1 ) d Y C d t β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ρ ) ⋅ Y C , ( 2 ) d X A d t g ⋅ X C − β ⋅ X A ⋅ ( Y C Y A …

2023最新版本~十分钟零基础搭建EMQX服务器

购买服务器 已知服务器大厂商 1 阿里云 点击直接访问 2 华为云点击直接访问 3 腾讯云 点击直接访问 还是比较推荐大公司 不会跑路 这里我购买的是一年的华为云服务器(新用户 64一年) 镜像推荐乌班图18 登陆服务器(需要重置密码!!&…

Ansible自动化运维工具 —— Playbook 剧本

playbooks 本身由以下各部分组成 (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables:变量 (3)Templates:模…

ubuntu16.04忘记密码了怎么办,亲测有效

由于装载Ubuntu系统的电脑(非虚拟机)好久没有用,忘记了密码,只能进行密码重置,亲测有效: 1.首先ubuntu系统开机,期间按着shift键不放,选择高级选项。 2.enter键进入如下界面&#x…

python-occ入门指北

0、系统环境: Win10 在Windows环境中玩PythonOCC比较简单的方式是使用anaconda的cmd prompt或者powershell的prompt,这里我用的是cmd。PowerShell也有很多粉丝,但是个人真的觉得这个东西挺鸡肋的。 另外在Win10或Win11上另一个玩法是使用WSL2&#xff…

【漏洞挖掘】Xray+rad自动化批量漏洞挖掘

文章目录 前言一、挖掘方法二、使用步骤工具安装使用方法开始挖掘 总结 前言 自动化漏洞挖掘是指利用计算机程序和工具来扫描、分析和检测应用程序、网络和系统中的安全漏洞的过程。这种方法可以帮助安全专家和研究人员更高效地发现和修复潜在的安全威胁,从而提高整…

企业级开发中协同开发与持续集成持续部署

文章目录 1 创建代码仓库2 使用git协同开发2.1 独立团队开发2.2 多团队开发git工作流 2 持续集成和持续部署2.1 创建docker镜像2.2 使用coding构建 1 创建代码仓库 每个项目有唯一的代码仓库,所以不是每个开发者都需要创建一个代码仓库,一般都是项目负责…

Node版本自由切换之nvm安装教程

1.nvm安装包下载,这里推荐1.1.7版本 https://github.com/coreybutler/nvm-windows/releases/download/1.1.7/nvm-setup.zip 2.解压后运行exe文件,一路默认就可以了,自定义的话,文件路径不要有中文; 3.安装之后使用命…

CloudCompare软件手册01

1. 介绍 1.1 历史 CloudCompare是一个3D点云(和三角形网格)编辑和处理软件。 最初,它被设计用于在密集的3D点云之间进行直接比较。它依赖于一种特定的八叉树结构,在执行这类任务时,这种结构能够提供出色的性能。此外,由于大多数…

基于python+Xception算法模型实现一个图像分类识别系统

一、目录 Xception介绍数据集处理模型训练模型评估项目扩展 二、Xception介绍 在计算机视觉领域,图像识别是一个非常重要的任务,其应用涵盖了人脸识别、物体检测、场景理解等众多领域。随着深度学习技术的发展,深度卷积神经网络&#xff0…