当前位置: 首页 > news >正文

【机器学习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. 对比每一个特征计算出来的信息增益,选择那个信息增益最大的特征!

相关文章:

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

还记得我在【机器学习300问】的第28问里谈到的,看决策树的定义不就是if-else语句吗怎么被称为机器学习模型?其中最重要的两点就是决策树算法要能够自己回答下面两问题: 该选哪些特征 特征选择该选哪个阈值 阈值确定 今天这篇文章承接上文&…...

剑指offer C ++双栈实现队列

1. 基础 队列:先进先出,即插入数据在队尾进行,删除数据在队头进行; 栈:后进先出,即插入与删除数据均在栈顶进行。 2. 思路 两个栈实现一个队列的思想:用pushStack栈作为push数据的栈&#xff…...

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt 1. 模型权重准备2. 模型重新参数化2.1 文件准备2.2 参数修改2.3 重新参数化过程 3. 重新参数化后模型推理3.1 推理超参数配置3.2 模型推理及对比 4. onnx 模型导出(补充内容)4…...

Zookeeper搭建

目录 前言 初了解Zookeeper 搭建 准备 配置Zookeeper 前言 今天来介绍Zookeeper的搭建,其实Zookeeper的搭建很简单,但是为什么还要单独整一节呢,这就不得不先了解Zookeeper有什么功能了!而且现在很火的框架也离不开Zookeepe…...

2.Datax数据同步之Windows下,mysql和sqlserver之间的自定义sql文数据同步

目录 前言步骤操作大纲步骤明细mysql 至 sqlServersqlServer 至 mysql执行同步语句中报 前言 上一篇文章实现了不同的mysql数据库之间的数据同步,在此基础上本篇将实现mysql和sqlserver之间的自定义sql文数据同步 准备工作: JDK(1.8以上,推…...

commonjs和esmodule

commonjs的模块导出和引用写法: lib.js 导出一个模块 let a 1 let b 2 function aPlus1() {return a } module.exports {a,b,aPlus1 } index.js引用一个模块 const {a,b,aPlus1} require(./lib.js) console.log(hh:,a) esmodule的模块导出和引用方法&#x…...

Android的编译系统

安卓的编译真的太多吐槽的地方了,有必须到croot下编译的,有随便改个.c就要七八分钟编译的。我有时候真的不知道这么多开发人员是怎么挺过来的。 今晚简单看看这个编译系统soong吧。 算了,下面这个写的很好了,我先看看吧。。。 …...

Midjourney指控Stability AI夜袭数据,网络风波一触即发

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

JVM知识整体学习

前言:本篇没有任何建设性的想法,只是我很早之前在学JVM时记录的笔记,只是想从个人网站迁移过来。文章其实就是对《深入理解JVM虚拟机》的提炼,纯基础知识,网上一搜一大堆。 一、知识点脑图 本文只谈论HotSpots虚拟机。…...

蓝桥杯--日期统计

目录 一、题目 二、解决代码 三、代码分析 ​四、另一种思路 五、关于set文章推荐 一、题目 二、解决代码 #include <bits/stdc.h> using namespace std; int main() {int arr[100] { 5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,…...

[leetcode~dfs]1261. 在受污染的二叉树中查找元素

给出一个满足下述规则的二叉树&#xff1a; root.val 0 如果 treeNode.val x 且 treeNode.left ! null&#xff0c;那么 treeNode.left.val 2 * x 1 如果 treeNode.val x 且 treeNode.right ! null&#xff0c;那么 treeNode.right.val 2 * x 2 现在这个二叉树受到「污…...

PyQt5使用

安装Pyqt5信号与槽使用可视化界面编辑UI (Pyside2)ui生成之后的使用(两种方法)1 ui转化为py文件 进行import2 动态调用UI文件 安装Pyqt5 pip install pyqt5-tools这时候我们使用纯代码实现一个简单的界面 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButto…...

利用GPT开发应用005:Codex、Turbo、ChatGPT、GPT-4

文章目录 一、GPT-3 Codex二、GPT-3.5 Turbo二、ChatGPT三、GPT-4 一、GPT-3 Codex 2022年3月&#xff0c;OpenAI 发布了 GPT-3 Codex 的新版本。 这个新模型具有编辑和插入文本的能力。它们是通过截至 2021 年 6 月的数据进行训练的&#xff0c;并被描述为比之前版本更强大。到…...

制造行业大数据应用:四大领域驱动产业升级与智慧发展

一、大数据应用&#xff1a;制造行业的智慧引擎 随着大数据技术的不断突破与普及&#xff0c;制造行业正迎来一场前所未有的变革。大数据应用&#xff0c;如同智慧引擎一般&#xff0c;为制造行业注入了新的活力&#xff0c;推动了产业升级与创新发展。 二、大数据应用在制造行…...

25.5 MySQL 聚合函数

1. 聚合函数 聚合函数(Aggregate Function): 是在数据库中进行数据处理和计算的常用函数. 它们可以对一组数据进行求和, 计数, 平均值, 最大值, 最小值等操作, 从而得到汇总结果.常见的聚合函数有以下几种: SUM: 用于计算某一列的数值总和, 可以用于整数, 小数或者日期类型的列…...

多维时序 | Matlab实现VMD-CNN-LSTM变分模态分解结合卷积神经网络结合长短期记忆神经网络多变量时间序列预测

多维时序 | Matlab实现VMD-CNN-LSTM变分模态分解结合卷积神经网络结合长短期记忆神经网络多变量时间序列预测 目录 多维时序 | Matlab实现VMD-CNN-LSTM变分模态分解结合卷积神经网络结合长短期记忆神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介…...

用Python进行机器学习:Scikit-learn的入门与实践【第126篇—Scikit-learn的入门】

用Python进行机器学习&#xff1a;Scikit-learn的入门与实践 随着机器学习在各个领域的广泛应用&#xff0c;Python成为了一个备受欢迎的机器学习工具之一。在众多机器学习库中&#xff0c;Scikit-learn因其简单易用、功能强大而备受青睐。本文将介绍Scikit-learn的基本概念&am…...

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

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

常用的gpt网站

ChatGPT是一款基于人工智能技术的对话型AI助手&#xff0c;能够进行自然语言交互并提供个性化的对话服务。通过先进的深度学习模型&#xff0c;ChatGPT能够理解用户输入的文本&#xff0c;并生成有逻辑、连贯性的回复。它可以回答各种问题、提供建议、分享知识&#xff0c;还能…...

java中string类型常用的37个函数

java中string类型常用的37个函数—无极低码 int indexOf(int ch, int fromIndex) 、int indexOf(int ch) 、int indexOf(String str, int fromIndex) 、int indexOf(String str) 、int lastIndexOf(int ch, int fromIndex) 、int lastIndexOf(int ch) 、int lastIndexOf(Strin…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...