随机森林 2(决策树)

通过 随机森林 1 的介绍,相信大家对随机森林都有了一个初步的认知,知道了随机和森林分别指的是什么,以及决策树根据什么选择内部节点。本文将会从森林深入到树,去看一下决策树是如何构建的。网上很多文章都讲了决策树如何构建,但在我看来不够生动形象,不够深入,希望此文能够让你彻彻底底了解决策树以及公式的含义。

一、决策树的核心与逻辑

决策树的核心是确定节点用哪个特征当做判断条件,优先选择分类效果最强的特征当做节点的判断条件。构建决策树的逻辑也就清晰了,根节点选择分类效果最强的特征当做判断标准,后面的节点依次选择剩余特征中分类最强的特征当做判断标准,如果两个一样强,那就形成分支,最终构建成一棵树。

二、衡量特征分类效果强弱的指标

随进森林和决策树构建的逻辑我们已经非常清楚了,我们只要知道如何判断判断特征分类效果的强弱就可以一通百顺。这里我们会讲四个指标,分别是信息熵、信息增益、信息增益率和基尼指数。

2.1 信息熵

熵大家应该都听说过,熵是用来衡量混乱程度的指标,越有序,熵越小,也可以理解为纯度的指标,越纯,熵越小。

信息熵公式

Ent(D)表示样本集合 D 的信息熵;表示 k 类样本所占的比例;所以信息熵就是计算每个类别的累加;

因为0<<1,所以越接近 1, 也就是 k 的概率接近 1,越接近 0,熵越小;相反 k 的概率越小,熵越大。举个极端的例子:假如只有一个类别,那么这个类别的概率肯定是 1,非常纯,非常有序,熵也达到了最小值 0。

这里延伸一下为什么很多公式都带 log,本质是为了让差值小的两个数字经过 log 计算后,让差值更明显。在这里因为概率之间的差异非常小,可能差异在 0.1 甚至 0.01,计算以 2 为底的,0.01 和 0.02 的对数, 结果分别时-6.644和-5.644,差异增加了 100 倍。

2.2 信息增益

我们知道了熵可以描述一个集合的纯度,那么如何利用熵来决定节点选择哪个特征划分呢?这里就引入了信息增益的概念,信息增益表示的是熵减少的程度。划分逻辑就是,划分后每个集合的熵乘以该集合占总集合的比例,然后求和与划分前熵相比较,减少的多说明划分效果好。

Gain(D,a)表示特征 a 对数据 D 进行划分所获得的信息增益,Ent(D) 表示划分前的信息熵,表示划分后的信息熵。v 表示的是特征a第 v 个取值,D^{v} 表示样本 D 在v上的样本集合,就是样本 D 在 v 上的样本集合占 D 整个集合的权重。

举个例子,集合 A 为[1,1,1,2,2,2],经过特征 X 划分为 集合 B1[1,1,2,2] 和集合 B2[1,2],经过特征 Y 划分为集合 C1[1,1,1] 和集合 C2[2,2,2]。

  1. 集合A 的熵 -0.5*{log_{2}0.5}^{}+(-0.5*{log_{2}0.5}^{})=1;
  2. 集合B1和 B2 的熵一样 -0.5*{log_{2}0.5}^{}+(-0.5*{log_{2}0.5}^{})=1,再乘以每个集合占总集合的比例 1*(4/6) + 1*(2/6) = 1;
  3. 集合 C1 和 C2 的熵一样都是 0,乘以每个集合占总集合的比例依然是 0;
  4. Gain(A,X)=0,Gain(A,Y)=1;

由此可见,通过特征 X 划分,熵依然是1,信息增益为 0,没有减小;通过特征 Y 的划分,熵从1 变成 0,信息增益为 1。很明显特征 Y 划分效果好,所以选择 Y 当做该节点划分特征。

每个节点都可以使用这个方法确定特征,从根节点不断向下延伸,这样就形成一个决策树,使用信息增益确认节点特征的代表算法时 ID3。

2.3 信息增益率

通过信息增益构建决策树有个致命的缺点,更喜欢用有大量取值的特征来分类,可能会陷入太过关注细节,无法看到大局的情况。举个例子:假设你正在构建一个决策树来帮助你预测明天是否会下雨。你有很多数据,包括每天的温度、湿度、风速等信息。其中一个特征是"云朵的形状",因为每天的云朵都可能有微小的变化,每个云朵形状只对应一个结果,导致用云朵的形状分类信息增益最小,但实际上明天是否下雨和云朵形状关系很小,甚至没有关系,这就是典型的在训练数据上表现很好,但实际使用很差,鲁棒性很差。

针对上面这种情况,有人就提出了用信息增益率来代替信息增益。信息增益率多了一个衡量本身属性分散程度的指标作为分母。

|D^{}| 表示数据集 D 的样本量,|D^{v}| 表示数据集 D 在特征第v上的样本数量。

如果D^{v}数量特别小,占整个数据集的比例就特别小,把负号给到 log,log 计算出来的值就越大,结合右边的 log 图来看,D^{v}占整个数据集的比例越小,斜率越大,log 增长速度远大于,所以整体来看,IV(a)越大。更通俗点的理解就是,特征 a 的可能取值数目越多,IV(a)越大,信息增益率越小。这样通过增加 IV(a)分母,很好的牵制了信息增益偏向取值更多的特征的问题。

2.4 基尼指数

基尼指数和熵差不多,都是用来衡量集合的纯度,基尼指数越小,表示数据越纯。

p_{k}表示第 k 类的数据占总数据的比例;

{p_{k}}^{2} 表示随机抽取的样本既属于类别 k,又再次抽取时仍然属于类别 k 的概率,可以理解为连抽两次都是 k;

如果一个数据集特别纯,那么{p_{k}}^{2} 的概率比较高,较大,基尼指数最终结果较小。决策树会选择最小基尼指数的特征来划分。

基尼指数与信息增益率相比,有哪些进步呢?

1 、信息增益率为了避免信息增益的致命缺点,会优先考虑样本数量少的特征,具有偏向性,而基尼系数没有这个偏向性;

2 、计算开销更少,没有涉及到 log 的计算;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

幺模矩阵-线性规划的整数解特性

百度百科:幺模矩阵 在线性规划问题中&#xff0c;如果A为幺模矩阵&#xff0c;那么该问题具有最优整数解特性。也就是说使用单纯形法进行求解&#xff0c;得到的解即为整数解。无需再特定使用整数规划方法。 m i n c T x s . t . { A x ≥ b x ≥ 0 \begin{align*} min \quad…

Java动态代理Proxy(通俗易懂,一学就会)

为什么需要代理&#xff1f;代理长什么样&#xff1f; 代理实现案例代码 1.中介接口&#xff08;约束代理方法&#xff09; 2.BigStar&#xff08;被代理&#xff09; 实现接口方法 3.代理工具类 invoke方法中的proxy表示代理对象&#xff0c;method表示代理获取到调用的方法对…

Go 代码检查工具 golangci-lint

一、介绍 golangci-lint 是一个代码检查工具的集合&#xff0c;聚集了多种 Go 代码检查工具&#xff0c;如 golint、go vet 等。 优点&#xff1a; 运行速度快可以集成到 vscode、goland 等开发工具中包含了非常多种代码检查器可以集成到 CI 中这是包含的代码检查器列表&…

Linux配置环境变量的几种方式

​ &#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试…

青少年CTF-qsnctf-Web-include01include02(多种方法-知识点较多-建议收藏!)

PHP常见伪协议 php://filter是PHP中独有的一种协议&#xff0c;它是一种过滤器&#xff0c;可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据&#xff0c;且在读取和写入之前对数据进行一些过滤&#xff0c;例如base64编码处理&#xff0c;rot13处…

【MybatisPlus快速入门】(2)SpringBoot整合MybatisPlus 之 标准数据层开发 代码示例

目录 1 标准CRUD使用2 新增3 删除4 修改5 根据ID查询6 查询所有7 MyBatis-Plus CRUD总结 之前我们已学习MyBatisPlus在代码示例与MyBatisPlus的简介&#xff0c;在这一节中我们重点学习的是数据层标准的CRUD(增删改查)的实现与分页功能。代码比较多&#xff0c;我们一个个来学习…

AtomHub 开源容器镜像中心开放公测,国内服务稳定下载

由开放原子开源基金会主导&#xff0c;华为、浪潮、DaoCloud、谐云、青云、飓风引擎以及 OpenSDV 开源联盟、openEuler 社区、OpenCloudOS 社区等成员单位共同发起建设的 AtomHub 可信镜像中心正式开放公测。AtomHub 秉承共建、共治、共享的理念&#xff0c;旨在为开源组织和开…

OpenCV-Python(19):Canny边缘检测

目录 学习目标 Canny 边缘检测原理 1.噪声抑制(噪声去除) 2.梯度计算 3.非极大值抑制 4.双阈值检测(滞后阈值) 5.边缘连接 Canny 边缘检测步骤 Canny 边缘检测的OpenCV实现 不同阈值的边缘检测效果 学习目标 了解Canny边缘检测的概念学习掌握函数cv2.Canny()的用法 …

C++加法运算符的重载(operator)

1.重载加法运算符 为什么要重载加法运算符&#xff1f; 因为C提供的加法运算符只能满足基本数据类型间的加法&#xff0c;如果我想让俩个相同的类的对象进行加法的话会报错 所以为了能让俩个相同类的对象进行加法&#xff0c;我们要把这个过程封装到一个函数里面&#xff0c;只…

使用低代码工具构建电商平台:简化开发流程,加速应用搭建

在数字化时代&#xff0c;电商平台成为了各类企业的重要组成部分。然而&#xff0c;传统的软件开发过程往往漫长而复杂&#xff0c;需要大量的编码和调试工作。随着低代码工具的出现&#xff0c;开发者可以通过简化的方式来搭建电商平台应用&#xff0c;从而更快速地满足业务需…

Netty Review - 优化Netty通信:如何应对粘包和拆包挑战_自定义长度分包编解码码器

文章目录 概述Pre概述Code自定义协议自定义解码器服务端的消息处理客户端启动类自定义编码器客户端业务处理Handler 测试 概述 Pre Netty Review - 借助SimpleTalkRoom初体验异步网络编程的魅力 Netty Review - 优化Netty通信&#xff1a;如何应对粘包和拆包挑战 中我们遗留了…

【Linux】多线程

目录​​​​​​​ Linux线程概念 1. 什么是线程 2. 重新定义线程和进程 3. 重讲地址空间 4. 线程的优点 5. 线程的缺点 6. 线程异常 7. 线程用途 Linux进程VS线程 1. 进程和线程 2. 进程的多个线程共享 3. 线程为什么进程要更加轻量化&#xff1f; Linux线程…

盲盒小程序搭建:开启互联网盲盒时代

盲盒目前是一个非常火爆的商业模式。随着科技的发展&#xff0c;盲盒市场也开始采用线上盲盒进行拓客&#xff0c;吸引盲盒爱好者。当下在互联网电商影响下&#xff0c;盲盒小程序逐渐受到了商家的青睐。 线上盲盒市场 盲盒消费主要是根据自身的未知性吸引消费者&#xff0c;消…

SpringBoot Elasticsearch全文搜索

文章目录 概念全文搜索相关技术Elasticsearch概念近实时索引类型文档分片(Shard)和副本(Replica) 下载启用SpringBoot整合引入依赖创建文档类创建资源库测试文件初始化数据创建控制器 问题参考 概念 全文搜索&#xff08;检索&#xff09;&#xff0c;工作原理&#xff1a;计算…

最优化理论与方法(2)---单纯形方法

文章目录 1. 线性规划1.1 基本介绍1.2 最优基本可行解 2. 表格形式单纯形方法2.1 基本知识引入2.2 求解步骤2.3 例题12.4 例题2 3. 单纯形法的进一步讨论3.1 无界解3.2 多个解 1. 线性规划 1.1 基本介绍 把握住两点&#xff1a;最小化和等号。  如果问题是最大化max&#xff…

新版iApp应用商店软件库源码 /纯UI源码 /开源高品质UI源码 /无需后台支持

源码介绍&#xff1a; 新版iApp应用商店软件库源码&#xff0c;它是纯UI源码、开源高品质UI源码 &#xff0c;而且它无需后台支持。UI界面简约。 这是应用商店软件库UI源码&#xff0c;原作者为他人开发的作品&#xff0c;经过同意后进行了开源。 这是一份完全原创的作品&…

gitee版本回退本地和仓库的执行步骤(后悔药,无副作用,按说明书使用)

目录 1.本地回退 1.打开项目文件夹 3.回退到指定版本 4.选择回退模式并确认 5.本地回退成功 2.回退仓库版本 1.在git上面找到项目的提交记录 2.找到提交错误的版本​编辑 3.双击新页面这个版本进去 点击操作再点击revert​编辑 4.确认回退 ​5.仓库回退成功 在使用…

【go-zero】 go-zero API 如何接入 Nacos 被 java 服务调用 | go集成java服务

一、场景 外层使用的是springcloud alibaba 这一套java的分布式架构 然后需要接入go-zero的api服务 这里我们将对api服务接入Nacos进行一个说明 二、实战 1、package 因为使用的是go-zero框架 这里我们会优先使用go-zero生态的包 github 包如下: github.com/nacos-group/naco…

MT3608 高效率1.2MHz2A升压转换器和MT3608L 高效率1.2MHz 2.5A升压转换器 MT3608L和MT3608的区别

MT3608是一个恒定的频率&#xff0c;6引脚SOT23电流模式升压转换器的小&#xff0c;低功耗应用的目的。该MT3608开关在1.2MHz&#xff0c;并允许微小的&#xff0c;低成本的电容器和电感器使用2毫米或更小的高度内部软启动浪涌电流的结果&#xff0c;并延长电池寿命。 …

细粒度语义对齐的视觉语言预训练

抽象 大规模的视觉语言预训练在广泛的下游任务中显示出令人印象深刻的进展。现有方法主要通过图像和文本的全局表示的相似性或对图像和文本特征的高级跨模态关注来模拟跨模态对齐。然而&#xff0c;他们未能明确学习视觉区域和文本短语之间的细粒度语义对齐&#xff0c;因为只有…