【机器学习300问】33、决策树是如何进行特征选择的?

        还记得我在【机器学习300问】的第28问里谈到的,看决策树的定义不就是if-else语句吗怎么被称为机器学习模型?其中最重要的两点就是决策树算法要能够自己回答下面两问题

  • 该选哪些特征 == 特征选择
  • 该选哪个阈值 == 阈值确定

        今天这篇文章承接上文,继续深入的讲讲决策树是如何进行特征选择的?如果没有看上篇文章的友友可以点个链接哦:

【机器学习300问】28、什么是决策树?icon-default.png?t=N7T8http://t.csdnimg.cn/Tybfj

一、看一个猫咪二分类的例子

        假设你正在教一群小朋友在公园里快速分辨出哪些动物是猫,哪些是狗。现在你们面前有一大堆动物的照片,每张照片都包含了三个特征,比如“耳朵形状”、“脸是不是圆的”、“有没有胡须”。让我们试着用决策树算法来构造一颗树,先只构造根节点和左右子树。

图1

 选择耳朵是竖起来还是塌下去这个特征,我们把10个样本分成了两个子树。图中p代表猫猫出现的概率(或占比),H是信息熵函数。

二、什么是信息熵?

        首先,我们得理解信息熵的概念,信息熵是衡量一个随机变量不确定性的度量。就像孩子们开始时对所有照片的不确定性。如果照片中猫和狗的数量各占一半,那么不确定性最高,就好比每个小朋友随机猜的话,正确率只有50%。这个不确定性可以用数学上的熵来量化:

H(D) = -\sum_{i}^{}p_{i}log_{2}(p_{i})

其中 D 表示数据集,p_i是类别 i 出现的概率。如果还是有点困惑的话,我们画一个图并配合一些例子来进一步解释信息熵的概念。

图2

(1)p=0.5    H=1的情况

        这张图是信息熵的曲线图,可以看到在p=0.5的时候,信息熵最大意味着此时对于这张图片是猫咪还是小狗最不确定。也就是说是猫的可能性为50%,是狗的可能性也是50%

(2)p=0.83    H=0.65的情况

        假设p=0.83图中可以看出H(0.8)=0.65,这种情况是说,6个动物图片中有5个是小猫1个是小狗,那么我比较有把握的说和这6张图片类似的动物图片,我蛮确定它是小猫,有多确定它是小猫呢?有0.65的确定性。

(3)p=1    H=0的情况

        假设p=1,从图中可以看出H=0,这种情况是说按照某种特征来区分猫狗,分出来一边全是猫咪,一边全是小狗,这意味着数据集中的不确定性最小(不确定性为零)

(4)总结一下什么是信息熵

  • 信息熵是衡量一个随机变量不确定性的度量
  • 当某个事件发生完全确定时(概率为1或0),信息熵为0
  • 当事件发生的不确定性最高,所有可能结果的概率相同时,对于二元事件(如猫狗分类),信息熵达到最大值1

三、什么是信息增益?

        简单说信息增益就是划分前的信息熵减去条件熵,表示使用该特征后不确定性减少的程度。

图3

(1)加权平均信息熵

        在图3中,用耳朵的形状进行划分后,左右两个子树的信息熵可以单独被计算出来,一个是H(0.8)=0.72另一个是H(0.2)=0.72,这两个数代表了两个子树他们的不确定性,可是我现在想知道的是用耳朵的形状进行划分这种策略所到账的不确定性。所以我可以使用加权平均的方法将左右两个合在一起计算得到这种特征用于根节点决策所导致不确定性:

w^{left}H(p_{1}^{left})+w^{right}H(p_{1}^{right})

        其中的w就是权重,w具体是指子树的样本数量占总样本数量的比例,p具体是指猫出现在子树中的概率。这样我们就得到了采取某种特征进行分类的策略会导致多少不确定性。才能判断出这个特征选的好不好。

(2)信息增益公式

        但这还不够,因为我们要思考这个策略好不好,主要不是看当下的H值,而是看他相较于上一次减少了多少不确定性,这样做更有利于我们判断到底选哪个特征做根节点好,所以我们得用前一次的不确定性减去这一次的不确定性,得出来的就是信息增益(根节点):

IG=H(p_{1}^{root})-[w^{left}H(p_{1}^{left})+w^{right}H(p_{1}^{right})]

        写成更一般(任意决策节点)的公式就是: 

IG(D, f) = H(D) - \sum_{i=1}^{m} \frac{|D_i|}{|D|} H(D_i)

符号含义
IG(D, f)表示在给定特征 f 的条件下,数据集D的信息增益
H(D)数据集的原始信息熵
D_i按特征f 的第 i 个值划分后的子集
\frac{|D_i|}{|D|}子集大小占总数据集大小的比例
H(D_i)子集的信息熵

四、决策树是如何进行特征选择的?

        具体选择的流程:

  1. 计算划分前的数据集熵(即原始不确定性)。
  2. 对于每一个特征,比如“耳朵形状”,按照这个特征把数据集划分为不同的子集。
  3. 分别计算每个子集的信息熵,并根据子集内样本数目的比例加权求和。
  4. 计算出信息增益,信息增益就是划分前的熵减去条件熵,表示使用该特征后不确定性减少的程度。
  5. 对比每一个特征计算出来的信息增益,选择那个信息增益最大的特征!

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

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

相关文章

神经网络中的先验知识

单调性约束: 单调性约束对于某些问题非常关键,可以确保模型输出与输入的关系保持单调。在我的实践中,我发现通过引入这种约束,能够有效提高模型的性能,特别是在需要保持某些顺序关系的任务上。 平滑性约束&#xff1a…

探秘高校线上心理咨询室:Java+SpringBoot的实践

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

蓝桥·算法双周赛|第七场分级赛——小白入门赛

&#x1f525;博客介绍&#xff1a; 27dCnc &#x1f3a5;系列专栏&#xff1a; <<数据结构与算法>> << 算法入门>> << C项目>> &#x1f3a5; 当前专栏: << 算法入门>> 专题 : 数据结构帮助小白快速入门算法 &#x1f4…

解锁Redis宝藏:探索Redis哈希(Hash)的神奇世界!

Redis 哈希(Hash)是一种灵活且功能强大的数据结构&#xff0c;它可以存储多个字段和对应的值&#xff0c;适用于存储对象。了解 Redis 哈希的基本命令、示例和使用方法&#xff0c;以及常见的应用场景&#xff0c;将帮助您更好地利用 Redis 的强大功能。 Redis 哈希的基本命令…

AI辅助研发正在成为造福人类的新生科技力量

目录 1.AI用于药物研发 &#xff08;1&#xff09;药物靶点预测&#xff1a; &#xff08;2&#xff09;药物分子设计&#xff1a; &#xff08;3&#xff09;药物筛选&#xff1a; &#xff08;4&#xff09;药效和安全性预测&#xff1a; &#xff08;5&#xff09…

C#四部曲(知识补充)

Unity跨平台原理 .Net相关 只要编写的时候遵循.NET的这些规则&#xff0c;就能在.NET平台下通用 各种源码→根据.NET规范编写→(虚拟机)生成CIL中间码(保存在程序集中)→转成操作系统原代码 跨语言← 跨平台↓ Unity跨平台原理&#xff08;Mono&#xff09; c#脚本→MonoC#编…

CCCorelib 点云曲面特征(CloudCompare内置算法库)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里基于每个点的邻域协方差来获取点云中具有的曲面几何特征的点,计算方式如下图所示: 二、实现代码 // CloudCompare #include <CCCoreLib/PointCloudTpl.h> #include <CCCoreLib/

QT6.6下android编译及调用自定义so库方法

一.问题概述 最近需要把QT程序从5.12的桌面环境移植到QT6.6的android下,项目中有很多DLL库要重新编译为so文件,移植到android环境然后调用,中间有很多坑,虽然大体和桌面系统用法相同,但细节上还是有区别的,尤其是so库的调用方法上,过程中也是debug了两天才解决,如果你也…

husky 检查commit

1 . Package.json 安装以下插件 "commitlint/cli": "^17.4.4", "commitlint/config-conventional": "^17.4.4", "core-js": "^3.6.4", "custom-event-polyfill": "^1.0.7", "fetch-…

使用 PlayFab 服务器托管的 5 个步骤

在本教程中,你将了解如何使用 Unity、镜像网络和 PlayFab 服务器托管来构建在线多人游戏。玩家不能再位于同一个本地网络上。他们将连接到托管在云中的专用服务器,这使得他们即使相距很远也可以一起玩。 架构概述 下图显示了我们将构建的架构。 玩家将使用他们的客户端并连…

2024年G3锅炉水处理证模拟考试题库及G3锅炉水处理理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年G3锅炉水处理证模拟考试题库及G3锅炉水处理理论考试试题是由安全生产模拟考试一点通提供&#xff0c;G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新版教材&#xff0c;G3锅炉水处理大纲整理而成&#xff0…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记08_行为歧视

1. 常见的报价方式 1.1. 水滴定价&#xff08;Drip Pricing&#xff09; 1.1.1. 用一个较低的初始价格吸引消费者入局&#xff0c;之后再不断收取附加费用 1.2. 打折促销 1.2.1. 在一个远被高估的原价上制造折扣价格的魅力 1.2…

Hive面经

hive原理 Hive 内部表和外部表的区别Hive 有索引吗运维如何对 Hive 进行调度ORC、Parquet 等列式存储的优点数据建模用的哪些模型&#xff1f;1. 星型模型2. 雪花模型3. 星座模型 为什么要对数据仓库分层&#xff1f;使用过 Hive 解析 JSON 串吗sort by 和 order by 的区别数据…

spring cloud负载均衡算法,类型

1、轮询法 将请求按顺序轮流地分配到后端服务器上&#xff0c;它均衡地对待后端的每一台服务器&#xff0c;而不关心服务器实际的连接数和当前的系统负载。 2、随机法 通过系统的随机算法&#xff0c;根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统…

linux 系统下在终端中切换base环境

Linux 系统下切换base环境 1. 查看当前conda下已安装环境 conda info --envs 2. 切换到另一环境可以使用 conda activate env_name 3. 想要返回base环境&#xff0c;可使用 conda deactivate

【MySQL 系列】MySQL 语句篇_DCL 语句

DCL&#xff08; Data Control Language&#xff0c;数据控制语言&#xff09;用于对数据访问权限进行控制&#xff0c;定义数据库、表、字段、用户的访问权限和安全级别。主要关键字包括 GRANT、 REVOKE 等。 文章目录 1、MySQL 中的 DCL 语句1.1、数据控制语言--DCL1.2、MySQ…

自动化运维工具Ansible

一.Ansible基本内容 1.定义 Ansible是基于模块工作的&#xff0c;只是提供了一种运行框架&#xff0c;本身没有完成任务的能力&#xff0c;真正操作的是Anisble的模块。每个模块都是独立的、实现了批量系统配置、批量程序部署、批量运行命令等功能。 2.特点与优势 优势&…

【Python爬虫神器揭秘】手把手教你安装配置Scrapy,高效抓取网络数据

1、 引言 在大数据时代&#xff0c;网络上的信息犹如海洋般浩瀚。想要在这片海洋里挖掘宝藏&#xff0c;一款强大的工具必不可少。今天我们要带大家深入探索的就是Python界鼎鼎大名的爬虫框架——Scrapy。无论你是数据分析师、研究员还是开发者&#xff0c;学会利用Scrapy来自…

基于单片机的IC 卡门禁系统设计

摘要:针对传统门锁钥匙易丢失、配置不便和忘记携带等问题,提出了一种基于STC89C52 的IC 卡门禁系统设计。该系统以STC89C52 单片机为核心来控制电子锁模块的开关。主要过程是由RFID 模块读取IC卡ID 并通过串口发送至STC89C52 单片机模块,STC89C52 单片机模块可以实现在线对I…

如果电脑缺少dll文件怎么解决?如何快速解决dll丢失问题

最近有小伙伴问电脑老是缺少dll文件&#xff0c;这种问题到底要怎么去解决呢&#xff1f;其实这种现象是正常的&#xff0c;为啥说正常呢&#xff0c;下面我们会给大家详细的讲解dll为啥会缺少&#xff0c;然后还会讲解电脑缺少dll文件怎么解决的方法&#xff0c;好了&#xff…