【决策树】分类属性的选择
文章目录
- 1.信息增益(ID3)
- 2.信息增益率(C4.5)
- 3.基尼指数(CART)
- ps.三者对比
实现决策树算法最关键的一点就是如何从所有的特征属性中选择一个最优的属性对样本进行分类,这种最优可以理解为希望划分后每种类别中的样本尽可能同类,也就是足够“纯净”。
1.信息增益(ID3)
需要先了解信息墒,墒表示一个系统内部的混乱程度,墒越大越混乱。信息墒的公式:

信息墒的最大值,就是当各类样本出现的比例相同时出现,代入公式可求。
对于公式的理解直接看deepseek的回答,比较准确形象:通俗理解信息墒的公式。

了解了信息墒的含义,假设现在有一个样本空间D,信息墒为E。D根据特征属性x可以划分为 D1, D2, D3 三个子样本空间,各个子样本空间样本数占总样本空间比例 k1, k2, k3,每个子样本空间根据公式也可以计算出自己的信息墒,假设为 E1, E2, E3,那么以这个特征属性划分后D的信息墒为 各个子样本空间信息墒*权重 之和,即 k1*E1 + k2*E2 + k3 *E3,这个值越大,表示用特征属性x对样本空间划分后的分类效果越差。越小表示分类效果越好,能更有效地将数据划分为纯度更高的子集。因此,需要做的就是计算出每个特征属性划分后的信息墒,优先用信息墒最小的那个特征属性划分,此时能获得最大的信息增益。
然后在子样本空间中用剩下的特征属性重复这个流程,循环往复…,得到一棵分类效果最好的树。
下面是周志华机器学习书中对信息增益的定义:

2.信息增益率(C4.5)
信息增益的选择方式倾向于选择属性值较多的属性,因为这样划分后子空间的信息墒最小,信息增益最大,但容易造成过拟合模型返回能力差的问题,比如在用户的(id、性别、年龄、体重、各种检查指标…)中拿用户的id去预测是否患病,准确但没有意义。
此时通过在上一步信息增益的基础上,除以一个属性固有值(类似于墒值),来平衡属性值较多的属性的信息增益。
这个属性固有值的公式是:

a表示特征属性,V表示值类型的数量,D表示总样本数,Dv表示每个取值下样本数量。
对于这个公式的理解:信息增益中属性固有信息的公式及理解。
所以信息增益率的公式为:

根据增益率对划分属性的选择,

对这种“启发式选择”的理解。
3.基尼指数(CART)
基尼指数属于CART算法,但CRAT算法并不只有基尼指数一种实现方式(分类: 基尼指数;回归: 均方误差)。 见【4.三者对比】部分

上图中4.5基尼值的公式中, p k p_k pk为第k类样本占总样本的比例, p k ′ p_{k'} pk′为非k类样本占的比例( 1 − p k 1-p_k 1−pk)。
为什么这个公式可以反映样本空间的混乱程度?
首先 p k p_k pk的取值在0-1,且所有可能的 p k p_k pk之和等于1。
明显当所有类别占比相等时最混乱,假设对于二分类,此时对于k1、k2,所占总样本的比例 p k 1 p_{k_1} pk1 p k 2 p_{k_2} pk2都为0.5,对应的 p k 1 ′ p_{k_1'} pk1′ p k 2 ′ p_{k_2'} pk2′也都为0.5,因此 ∑ k = 1 ∣ y ∣ p k 2 \sum\limits_{k=1}^{|y|} p_k^2 k=1∑∣y∣pk2= 0. 5 2 0.5^2 0.52+ 0. 5 2 = 0.5 0.5^2=0.5 0.52=0.5,基尼指数= 1 − 0.5 = 0.5 1-0.5=0.5 1−0.5=0.5。
当增大一个 p k p_k pk时,另一个 p k p_k pk必然减少,当对 p k p_k pk进行平方运算时,大的 p k p_k pk增大的那部分必然会大于小的 p k p_k pk减少的那部分,所以 ∑ k = 1 ∣ y ∣ p k 2 \sum\limits_{k=1}^{|y|} p_k^2 k=1∑∣y∣pk2一定会变得更大,所以最终的基尼值 1 − ∑ k = 1 ∣ y ∣ p k 2 1-\sum\limits_{k=1}^{|y|} p_k^2 1−k=1∑∣y∣pk2减少。
eg: p k 1 p_{k_1} pk1=0.6, p k 2 p_{k_2} pk2=0.4, ∑ k = 1 ∣ y ∣ p k 2 \sum\limits_{k=1}^{|y|} p_k^2 k=1∑∣y∣pk2= 0. 6 2 0.6^2 0.62+ 0. 4 2 = 0.52 0.4^2=0.52 0.42=0.52,基尼指数= 1 − 0.52 = 0.48 1-0.52=0.48 1−0.52=0.48。
而下面属性a的基尼指数公式,其实是度量用a属性划分后的所有子样本空间中各自的混乱程度,然后乘以各个子样本空间在总样本空间的占比权重,最后汇总求和。所以可以说公式表示的含义是:用a属性对总样本空间进行划分后,总样本空间的混乱程度。
因此属性a划分后基尼值越小,表示样本空间越“纯净”,也就是分类效果越好。
需要注意的是:虽然基尼指数的公式理论上支持多分类,但算法实现中只会二分类,递归的生成二叉树。 分类过程中会在每个候选属性中枚举遍历找到基尼指数最小的最优组合,然后找出全局最优划分组合,该组合对应的属性和划分方式作为该节点的划分属性和分类的方式。
对基尼指数的公式及理解。
ps.三者对比

主要关注为什么CART可以做回归,而另外两种实现方式不支持。
因为上面两种核心都是要通过目标值的分类,进而知道概率计算墒值,只支持目标值为离散型变量。
而CART算法中,可以通过调整属性划分时的依据公式(均方差),尝试找到每个候选属性的最优分隔组合,这个分割组合要满足分隔后的两个子集的加权均方误差最小(目标值的均方误差),然后选择最优的那个候选属性划分。之后重复迭代下去…
当做回归预测时,最终落到哪个分类,直接返回这个类别的均值就行。
相关文章:
【决策树】分类属性的选择
文章目录 1.信息增益(ID3)2.信息增益率(C4.5)3.基尼指数(CART)ps.三者对比 实现决策树算法最关键的一点就是如何从所有的特征属性中选择一个最优的属性对样本进行分类,这种最优可以理解为希望划…...
uniapp vue3 微信小程序 uni.chooseLocation使用
申请 先要去微信公众平台申请使用接口 开通成功之后就可以在项目中配置使用了 配置 配置manifest.json "mp-weixin": {/* 小程序特有相关 */"requiredPrivateInfos": ["chooseLocation"],"permission": {"scope.userLocati…...
9. Flink的性能优化
1. Flink的资源和代码优化 1.1 slot资源配置 Flink中具体跑任务的进程叫TaskManager,TM进程又会根据配置划分出诺干个TaskSlot,它是具体运行SubTask的地方。slot是Flink用来隔离各个subtask的资源集合,这里的资源一把指内存,TCP…...
十二、OSG学习笔记-Control
上一章节: 十一、OSG学习笔记-操作系统接口-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145891502 本章节代码: OsgStudy/Controls CuiQingCheng/OsgStudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/osg-study/tree/ma…...
集群、分布式与微服务架构 区别
集群、分布式与微服务架构:概念解析与核心差异 在构建现代软件系统时,集群架构、分布式系统和微服务架构是三种常见的技术方案。它们常被混淆,但各自解决的问题、设计理念和应用场景截然不同。本文将从基础概念出发,深入分析三者…...
如何使用SSH命令安全连接并转发端口到远程服务器
ssh -p 22546 rootconnect.westc.gpuhub.com d6IS/mQKq/iG ssh -CNgv -L 6006:127.0.0.1:6006 rootconnect.westc.gpuhub.com -p 22546 第一条命令:用于登录远程服务器,进行交互式操作。第二条命令:用于建立 SSH 隧道,进行端口转…...
【Java 基础】-- 设计模式
目录 Java 设计模式详解 1. 设计模式定义 2. 设计模式示例 2.1 单例模式(Singleton Pattern) 2.2 工厂模式(Factory Pattern) 2.3 观察者模式(Observer Pattern) 2.4 代理模式(Proxy Pat…...
ComfyUI进阶学习全指南(2025年最新版)
ComfyUI进阶学习全指南(2025年最新版) 一、自定义节点与扩展管理 1.1 自定义节点安装与维护 ComfyUI的核心竞争力在于其可扩展性。通过安装第三方节点模块,用户可实现超分辨率修复、骨骼绑定动画生成等高级功能。安装方式主要分为三种&…...
Linux和gcc/g++常用命令总结
目录 Linux命令总结 文件操作相关命令 ls cd pwd cp mv rm cat mkdir rmdir touch 文本处理操作命令 grep awk sed 进程管理操作相关命令 ps top htop kill pkill killall chmod chown 网络操作相关命令 ping ifconfig netstat ss lsof curl …...
uniapp封装路由管理(兼容Vue2和Vue3)
1:uniapp已经有路由管理了为什么还要二次封装路由? 简化配置和调用增强灵活性和可扩展性实现统一的功能和策略提升开发效率和团队协作 2. 增强灵活性和可扩展性 灵活配置:二次封装允许开发者根据实际需求灵活配置路由参数,如跳…...
π0源码解析——一个模型控制7种机械臂:对开源VLA sota之π0源码的全面分析,含我司的部分落地实践
前言 ChatGPT出来后的两年多,也是我疯狂写博的两年多(年初deepseek更引爆了下),比如从创业起步时的15年到后来22年之间 每年2-6篇的,干到了23年30篇、24年65篇、25年前两月18篇,成了我在大模型和具身的原始技术积累 如今一转眼…...
【C++】Class(1)
《C程序设计基础教程》——刘厚泉,李政伟,二零一三年九月版,学习笔记 文章目录 1、类的定义1.1、结构体和类1.2、基本概念1.3、成员函数的定义1.4、内联成员函数 2、对象2.1、对象的定义2.2、成员访问 3、构造函数3.1、构造函数的定义3.2、子…...
doris: Oracle
Apache Doris JDBC Catalog 支持通过标准 JDBC 接口连接 Oracle 数据库。本文档介绍如何配置 Oracle 数据库连接。 使用须知 要连接到 Oracle 数据库,您需要 Oracle 19c, 18c, 12c, 11g 或 10g。 Oracle 数据库的 JDBC 驱动程序,您可以从 Maven 仓库…...
Android14 OTA差分包升级报Package is for source build
制作好差分包,使用adb线刷模式验证ota升级,出现E:Package is for source build错误 使用adb方式验证 进入recovery模式 adb reboot recovery稍等一会界面会提示 Now send the package you want to apply to the device with "adb sidelaod <…...
双向选择排序算法
一 概述 双向选择排序(又称鸡尾酒选择排序)是选择排序的优化版本,核心改进在于每轮遍历同时确定未排序部分的最小值和最大值,分别交换到序列两端,从而减少遍历轮数。 二 时间复杂度 时间复杂度为(O(n^2)),但实际比较次数约为标准选择排序的 (1/2)。 三 C++实现代…...
Node.js setImmediate 教程
Node.js setImmediate 教程 简介 setImmediate() 是 Node.js 环境中的一个函数,用于安排一个回调函数在当前事件循环周期结束后立即执行。它提供了一种在当前操作完成后,但在任何 I/O 事件或定时器触发之前执行代码的方法。 基本用法 setImmediate((…...
MyBatis @Param 注解详解:多参数传递与正确使用方式
Param 注解主要用于 MyBatis 进行参数传递时给 SQL 语句中的参数 起别名,通常用于 多参数 方法,使参数在 XML Mapper 文件或注解 SQL 语句中更清晰易用。 1. 基本用法 在 Mapper 接口中使用 Param 来为参数命名,避免 MyBatis 解析时出现参数…...
Spring实战spring-ai运行
目录 1. 配置 2 .搭建项目 3. 查看对应依赖 3.1 OpenAI 依赖 3.2 配置 OpenAI API 密钥 application.properties application.yml 4. openai实战 5. 运行和测试 6. 高级配置 示例:配置模型和参数 解释: 7. 处理异常和错误 示例:…...
STL:C++的超级工具箱(一)
书接上回,内存管理和指针:C的双刃手术刀(一)-CSDN博客,在上篇我们聊到了什么是内存,堆栈,内存管理和智能指针相关的内容,接下来让我们一起去看看STL是什么吧。 第一步:提…...
leetcode349 两个数组的交集
求两个数组的交集,直白点儿就是【nums2 的元素是否在 nums1 中】。 在一堆数中查找一个数,当然是扔出哈希。碰到这种对目前来说是未知数值大小的情况,我们可以使用集合 set 来解决。 使用数组来做哈希的题目,是因为题目都限制了数…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
