CART决策树-基尼指数(全网最详解)

文章目录

  • 一、基尼指数的定义
  • 二、基尼指数在CART决策树中的应用
  • 三、基尼指数与CART决策树的构建
    • 1.计算每个子集的基尼系数:
    • 2.计算基尼指数
    • 3.选择最优特征
    • 4.其余基尼指数
    • 5.构建决策树
  • 四、总结

CART决策树基尼指数是CART(Classification And Regression Tree)算法中用于分类任务的一种评估指标,主要用于衡量数据集的不纯度或不确定性。以下是关于CART决策树基尼指数的详细解释:

一、基尼指数的定义

基尼指数(Gini Index)表示从数据集中随机抽取两个样本,它们类别标记不一致的概率。对于一个包含K个类别的数据集D,其基尼指数的计算公式为:

G i n i 系数 ( D ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini系数(D)= \sum_{k=1}^{K} p_k(1-p_k)=1-\sum_{k=1}^{K} p^{2}_k Gini系数(D)=k=1Kpk(1pk)=1k=1Kpk2
G i n i 指数 ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i 系数 ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i 系数 ( D 2 ) Gini指数(D,A)=\frac{|D_1|}{|D|}Gini系数(D_1)+\frac{|D_2|}{|D|}Gini系数(D_2) Gini指数(D,A)=DD1Gini系数(D1)+DD2Gini系数(D2)

其中, p k p_k pk表示类别k在数据集D中的比例。基尼指数的取值范围在[0, 1]之间,值越小表示数据集的纯度越高,即属于同一类别的样本占比越大。

二、基尼指数在CART决策树中的应用

在构建CART分类树时,算法会根据基尼指数来选择最优的特征进行数据集的分割。具体步骤如下:

  • 计算基尼指数:对于每个特征,算法会尝试所有可能的切分点,并计算切分后左右子集的基尼指数。
  • 选择最佳切分:选择使得划分后基尼指数加权和最小的那个特征和切分点作为最优划分。加权和是根据子集大小(样本数量)来计算的。
  • 递归构建树:以选定的特征和阈值进行数据集的分割,然后对每个子集重复上述过程,直至满足停止条件(如节点中的样本都属于同一类别、达到预设的最大深度、节点中的样本数低于某个阈值等)。

三、基尼指数与CART决策树的构建

CART决策树的构建过程是一个递归的过程,通过不断选择最优特征和切分点来分割数据集,直到满足停止条件。基尼指数在这个过程中起到了关键作用,它帮助算法选择出能够最大程度降低数据集不纯度的特征和切分点。下面我们举例说明。
例:
在这里插入图片描述

1.计算每个子集的基尼系数:

首先计算各特征的基尼指数,选择最优特征以及其最优切分点。分别以 A 1 A_1 A1 A 2 A_2 A2 A 3 A_3 A3 A 4 A_4 A4表示年龄、有工作、有自己的房子和信贷情况4个特征,并以1,2,3表示年龄的值为青年、中年和老年,以1,2表示有工作和有自己的房子的值为是和否,以1,2,3表示信贷情况的值为非常好、好和一般.
对于子集 A 1 A_1 A1,我们计算其基尼指数Gini( A 1 A_1 A1),这涉及到计算 A 1 A_1 A1中每个类别的比例,并代入基尼指数公式。
同理,对于子集 A 2 A_2 A2 A 3 A_3 A3 A 4 A_4 A4,我们计算Gini( A 2 A_2 A2 A 3 A_3 A3 A 4 A_4 A4)。
特征 A 1 A_1 A1(年龄)的基尼系数:
首先我们代入公式:
G i n i ( D ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(D)= \sum_{k=1}^{K} p_k(1-p_k)=1-\sum_{k=1}^{K} p^{2}_k Gini(D)=k=1Kpk(1pk)=1k=1Kpk2
G i n i 指数 ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i 系数 ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i 系数 ( D 2 ) Gini指数(D,A)=\frac{|D_1|}{|D|}Gini系数(D_1)+\frac{|D_2|}{|D|}Gini系数(D_2) Gini指数(D,A)=DD1Gini系数(D1)+DD2Gini系数(D2)
青年(5人,2人贷款)的基尼系数:
G i n i 系数 ( D 1 ) = 2 5 ∗ ( 1 − 2 5 ) + 3 5 ∗ ( 1 − 3 5 ) = 0.48 Gini系数(D_1)=\frac{2}{5}*(1-\frac{2}{5})+\frac{3}{5}*(1-\frac{3}{5})=0.48 Gini系数(D1)=52(152)+53(153)=0.48
G i n i 系数 ( D 1 ) = 2 ∗ 2 5 ∗ ( 1 − 2 5 ) = 0.48 Gini系数(D_1)=2*\frac{2}{5}*(1-\frac{2}{5})=0.48 Gini系数(D1)=252(152)=0.48
如果是类别是二分类,则基尼系数:
p ( 1 − p ) + ( 1 − p ) p = 2 p ( 1 − p ) p(1-p)+(1-p)p=2p(1-p) p(1p)+(1p)p=2p(1p)
非青年(10人,7人贷款)的基尼系数:
G i n i 系数 ( D 2 ) = 2 ∗ 7 10 ∗ ( 1 − 7 10 ) = 0.42 Gini系数(D_2)=2*\frac{7}{10}*(1-\frac{7}{10})=0.42 Gini系数(D2)=2107(1107)=0.42

2.计算基尼指数

A 1 = 1 A_1=1 A1=1(青年)条件下,D的基尼指数:
G i n i 指数 ( D , A 1 = 1 ) = 5 15 ∗ 0.48 + 10 15 ∗ 0.42 = 0.44 Gini指数(D,A_1=1)=\frac{5}{15}*0.48+\frac{10}{15}*0.42=0.44 Gini指数(D,A1=1)=1550.48+15100.42=0.44
总公式为:
G i n i 指数 ( D , A 1 = 1 ) = 5 15 ∗ [ 2 ∗ 2 5 ∗ ( 1 − 2 5 ) ] + 10 15 ∗ [ 2 ∗ 7 10 ∗ ( 1 − 7 10 ] = 0.44 Gini指数(D,A_1=1)=\frac{5}{15}*[2*\frac{2}{5}*(1-\frac{2}{5})]+\frac{10}{15}*[2*\frac{7}{10}*(1-\frac{7}{10}]=0.44 Gini指数(D,A1=1)=155[252(152)]+1510[2107(1107]=0.44
A 1 = 2 A_1=2 A1=2(中年)条件下,D的基尼指数:
G i n i 指数 ( D , A 1 = 2 ) = 5 15 ∗ [ 2 ∗ 3 5 ∗ ( 1 − 3 5 ) ] + 10 15 ∗ [ 2 ∗ 6 10 ∗ ( 1 − 6 10 ] = 0.48 Gini指数(D,A_1=2)=\frac{5}{15}*[2*\frac{3}{5}*(1-\frac{3}{5})]+\frac{10}{15}*[2*\frac{6}{10}*(1-\frac{6}{10}]=0.48 Gini指数(D,A1=2)=155[253(153)]+1510[2106(1106]=0.48
A 1 = 3 A_1=3 A1=3条件下,D的基尼:
G i n i 指数 ( D , A 1 = 3 ) = 5 15 ∗ [ 2 ∗ 4 5 ∗ ( 1 − 4 5 ) ] + 10 15 ∗ [ 2 ∗ 5 10 ∗ ( 1 − 5 10 ] = 0.44 Gini指数(D,A_1=3)=\frac{5}{15}*[2*\frac{4}{5}*(1-\frac{4}{5})]+\frac{10}{15}*[2*\frac{5}{10}*(1-\frac{5}{10}]=0.44 Gini指数(D,A1=3)=155[254(154)]+1510[2105(1105]=0.44

3.选择最优特征

由于 G i n i 指数 ( D , A 1 = 1 ) Gini指数(D,A_1=1) Gini指数(D,A1=1) G i n i 指数 ( D , A 1 = 3 ) Gini指数(D,A_1=3) Gini指数(D,A1=3)相等,且最小,所以 A 1 = 1 A_1=1 A1=1 A 1 = 3 A_1=3 A1=3都可以选作 A 1 A_1 A1的最优切点。

4.其余基尼指数

同理:
求特征 A 2 A_2 A2 A 3 A_3 A3的基尼指数:
G i n i ( D , A 2 = 1 ) = 0.32 Gini(D, A_2=1)=0.32 Gini(D,A2=1)=0.32
G i n i ( D , A 3 = 1 ) = 0.27 Gini(D,A_3=1)=0.27 Gini(D,A3=1)=0.27
由于 A 2 A_2 A2 A 3 A_3 A3只有一个切分点,所以它们就是最优切分点。
求特征 A 4 A_4 A4的基尼指数:
G i n i ( D , A 4 = 1 ) = 0.36 Gini(D,A_4=1)=0.36 Gini(D,A4=1)=0.36
G i n i ( D , A 4 = 2 ) = 0.47 Gini(D,A_4=2)=0.47 Gini(D,A4=2)=0.47
G i n i ( D , A 4 = 3 ) = 0.32 Gini(D, A_4=3)=0.32 Gini(D,A4=3)=0.32
G i n i ( D , A 4 = 3 ) Gini(D,A_4=3) Gini(DA4=3)最小,所以 A 4 = 3 A_4=3 A4=3为A的最优切分点。

5.构建决策树

A 1 A_1 A1 A 2 A_2 A2 A 3 A_3 A3 A 4 A_4 A4几个特征中, G i n i ( D , A 3 = 1 ) = 0.27 Gini(D,A_3=1)=0.27 Gini(DA3=1)=0.27最小,所以选择特征 A 3 A_3 A3为最优特征, A 3 = 1 A_3=1 A3=1为其最优切分点,于是根结点生成两个子结点,一个是叶结点.对另一个结点继续使用以上方法在 A 1 A_1 A1 A 2 A_2 A2 A 4 A_4 A4中选择最优特征及其最优切分点,结果是 A 2 = 1 A_2=1 A2=1依此计算得知,所得结点都是叶结点.

四、总结

基尼指数是CART决策树中用于分类任务的重要评估指标,它通过衡量数据集的不纯度来帮助算法选择最优的特征和切分点进行数据集的分割。在构建CART分类树时,基尼指数起到了关键作用,确保了决策树的准确性和泛化能力。

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

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

相关文章

8-9月强化速成|30天带刷《严选题》《660》

如果你的目标是90-100分,肯定是够了,但是像下面这样微调一下更好 你的基础阶段做的是辅导讲义上的题目,那么你的基础阶段的题量肯定是够了。 但是强化阶段如果只做660题和严选题,这个题量还有有一些薄弱的,建议可以把…

四、4 逻辑操作符

按位与、按位或关注二进制位 逻辑与、逻辑或只关注真假 1、&&逻辑与(并且) 左边和右边都为真,结果为真(为1) 有一个为假,结果为假(为0) 2、|| 逻辑或(或者&a…

NumExpr加速计算(numpy表达式)

文章目录 一、简介二、安装三、函数详解四、性能评估 Python 性能优化:NumExpr Numba CuPy 一、简介 numexpr(全称:numpy expression):用于在 NumPy 表达式上快速执行元素级运算的 Python 加速库。 优势&#xff1…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

Element-ui table进阶使用

最近项目有多个报表开发的需求,我采用的是凤翎前端组件框架(基于element-ui开发),大伙可以直接参考element-ui组件库文档,把标签中的fks替换为el即可。下面我会按顺序一一展开细说这些需求: 1、有多级表头…

AI大模型开发——7.百度千帆大模型调用

本节旨在为读者提供一个实用指南,探讨如何有效地利用百度千帆大模型平台的强大功能。从基础的账号注册和密钥申请入手,逐步引领用户通过案例, 理解并掌握如何调用文本和图像处理的大模型 API, 包括但不限于 NLP、对话生成、文本续…

CV每日论文--2024.7.25

1、Diffusion Models for Monocular Depth Estimation: Overcoming Challenging Conditions 中文标题:单目深度估计的扩散模型:克服具有挑战性的条件 简介:本文提出了一种新颖的方法,旨在解决单张图像深度估计任务中具有挑战性的、超出分布范…

linux 磁盘满了,程序运行失败,如何处理?df -h

场景:紧急呼救,上传图片失败了。我一脸懵,服务器这是又咋地了,别邪乎姐姐,姐姐胆子小啊。 一、寻找问题原因 1、OSS出问题了? 然后我尝试了 IOS 的APP是没问题的,Android提示上传失败&#xf…

在Kubernetes中通过 pod 打开 pod所在宿主机上的shell

昨日一伙计突然问我 在么把自己打好的 docker镜像 上传到 kubernetes 的 节点的 local 镜像池。 现状大约如下: 1)只有master节点的登录权限; 2)不知道存在哪些worker节点也无法通过 master 借助SSH 登录到 worker节点 &#x…

MyBatis入门(上)---初识

在应⽤分层学习时, 我们了解到web应⽤程序⼀般分为三层,即:Controller、Service、Dao . 之前的案例中,请求流程如下: 浏览器发起请求, 先请求Controller, Controller接收到请求之后, 调⽤ Service进⾏业务逻辑处理, Service再调⽤Dao, 但是Da…

消化学科的领军人物陈烨教授在会议上作了《幽门螺杆菌的规范检测与质控》的专题报告

由广东省药学会主办的“第十九届消化疾病诊疗会暨胃肠疾病药物临床研究交流会”于2024年8月8日-9日在广东省深圳市召开。陈烨教授,作为消化学科的领军人物、中华医学会消化病学分会的常务委员,以及全国幽门螺杆菌学组的组长,在会议上作了《幽…

【仿真与实物设计】基于51单片机设计的打地鼠游戏机——程序源码原理图proteus仿真图PCB设计文档演示视频元件清单等(文末工程资料下载)

基于51单片机设计的打地鼠游戏机 演示视频: 基于51单片机设计的打地鼠游戏机 功能描述:使用 51单片机为核心制作一个打地鼠游戏机。按下启动开关,8盏LED流水点亮并闪烁2次,随即开始播放游戏音乐,直到开始选择模式。选…

CTF密码学小结

感觉没啥好总结的啊 基础的永远是RSA、流密码、哈希、对称密码、古典密码那一套(密码学上过课都会),其他的就是数论的一些技巧 似乎格密码也很流行,以及一些奇奇怪怪的性质利用也很多 1、random设置种子后随机的性质&#xff1a…

ORM底层的原理

2.3.面试题3:请介绍什么是ORM思想: a.什么是ORM: 1.所谓的ORM是Dao层的一种思想,意思就是对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping…

Excel技巧(一)

快捷键技巧 原文链接 选取某一行的数据直到最后一行:【CTRL SHIFT ↓ 】或者选取一行后按住SHIFT键,双击下边线就可以快速选取区域。 如果表格中有多行空行,可以先按CTRL SHIFT END,再按CTRL SHIFT 上下键调整,…

读懂 GraphRAG:提升LLM企业落地能力,智能问答革命

在企业中单纯的使用LLM并不会产生太好的效果,因为它们不会对有关组织活动的特定领域专有知识进行编码,而这些知识实际上会给信息对话界面带来价值萃取。很多企业尝试通过RAG来优化这个过程,并且越来越多的人在RAG的方向上不断的研究&#xff…

【蓝桥杯集训100题】scratch游泳时长 蓝桥杯scratch比赛专项预测编程题 集训模拟练习题第27题

目录 scratch游泳时长 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 scratc…

《黑神话.悟空》与人工智能AI重塑经典与探索未来的交织

"近期我偶然邂逅了一个极为出色的人工智能学习平台,它不仅内容深入浅出,讲解方式还风趣幽默,让人学习起来既轻松又高效。如此宝藏资源,我迫不及待想要与各位共享。即刻点击让我们一起进入这个精彩纷呈的学习网站吧&#xff0…

[java][代码]使用java在mongodb上传下载文件

建立java项目新建lib包&#xff0c;导入jar包 3.链接mongdo数据库代码 /** * 1.获取连接 * 2.上传文件 * 3.下载文件 * 4.删除文件 * */ public static GridFS GetMongoGridFS(){ List<ServerAddress> adds new ArrayList<>(); ServerAddress serverAddress new…

Python | Leetcode Python题解之第352题将数据流变为多个不想交区间

题目&#xff1a; 题解&#xff1a; from sortedcontainers import SortedDictclass SummaryRanges:def __init__(self):self.intervals SortedDict()def addNum(self, val: int) -> None:intervals_ self.intervalskeys_ self.intervals.keys()values_ self.intervals…