决策树(信息熵、信息增溢、GINI)的计算

2023-11-02

如何构建决策树,我需要选择什么属性来度量,这里我们需要通过计算才能更好的构建一棵决策树。

【有以下二分类问题训练样本】

outlook temperat humidity windy play
sunny hot high FALSE no
sunny hot high TRUE no
overcast hot high FALSE yes
rainy mild high FALSE yes
rainy cool normal  FALSE yes
rainy cool normal  TRUE no
overcast cool normal  TRUE yes
sunny mild high FALSE no
sunny cool normal  FALSE yes
rainy mild normal  FALSE yes
sunny mild normal  TRUE yes
overcast mild high TRUE yes
overcast hot normal  FALSE yes
rainy mild high TRUE no

然后我们将这个表格细分,如下所示

【信息熵的计算】

信息熵:表示信息的不确定度

从给出的数据我们可以看到,这个表格是通过天气、温度、湿度、有风为特征来判断是否去打球。

所以我们根据没有任何天气提示的情况下可以知道这一天打球大的概率为9/14,不打球的概率为5/14.

通过下面信息熵的公式(下面公式中:p(i|t) 代表了节点 t 为分类 i 的概率)

可以知道信息熵为:Entropy(D)=  

 

【信息增溢的计算】

信息增益:信息增益指的就是划分可以带来纯度的提高,信息熵的下降。它的计算公式,是父亲节点的信息熵减去所有子节点的信息熵

信息增溢的计算公式:

PS:公式中 D 是父亲节点,Di 是子节点,Gain(D,a)中的 a 作为 D 节点的属性选择。

下面我们来求基于outlook的划分来求Gain(outlook)

从图中我们知道outlook取值为sunny、overcast、rainy的概率分别为:5/14、4/14、5/14

outlook=sunny时,有2/5打球、3/5不打球,故entropy=-2/5$\log_22/5$ -3/5$\log_23/5$ =0.971

outlook= overcast时,有4个打球,概率为1,故entropy=0

outlook=rainy时,有3/5打球,2/5不打球,故entropy=-2/5$\log_22/5$ -3/5$\log_23/5$ =0.971

则Entropy(outlook)=5/14*0.971+4/14*0+5/14*0.971=0.693

所以信息增溢Gain(outlook)=Entropy(D)-Entropy(outlook)=0.940-0.693=0.247

同理,按照上面的步骤依次可以求得

Gain(temperature)=0.029    Gain(humidity)=0.152   Gain(windy)=0.048

根据上面的信息熵我们可以得出Gain(outlook) >  Gain(humidity) >  Gain(windy) > Gain(temperature)

从上面的计算结果中可以看出,信息熵越大,纯度越低。当集合中的所有样本均匀混合时,信息熵最大,纯度最低。

 

【基尼系数GINI的计算】

 GINI 公式:

同样以上面的样本为例,计算步骤如下:

outlook取值为sunny、overcast、rainy的概率分别为:5/14、4/14、5/14

outlook=sunny时,有2/5打球、3/5不打球,故GINI=1-($(2/5)^2$+$(3/5)^2$)=0.64

outlook= overcast时,有4个打球,概率为1,故GINI=0

outlook=rainy时,有3/5打球,2/5不打球,故GINI=1-($(2/5)^2$+$(3/5)^2$)=0.64

则GINI(outlook)=5/14*0.64+4/14*0+5/14*0.64=0.457

temperature取值为hot、mild、cool的概率分别为:4/14、6/14、4/14

temperature=hot 时,有1/2打球,1/2不打球,故GINI=1-($(1/2)^2$+$(1/2)^2$)=0.5

temperature=mild 时,有2/3打球,1/3不打球,故GINI=1-(($(2/3)^2$)+($(1/3)^2$))=0.444

temperature=cool 时,有3/4打球,1/4不打球,故GINI=1-(($(1/4)^2$)+(($(3/4)^2$)))=0.375

则GINI(temperature)=4/14*0.5+6/14*0.444+4/14*0.375=0.440

humidty取值为high和normal的概率分别为:1/2、1/2

humidty=high 时,有3/7打球,4/7不打球,故GINI=1-(($(3/7)^2$)+($(4/7)^2$))=0.500

humidty=normal时,有6/7打球,1/7不打球,故GINI=1-(($(1/7)^2$)+($(6/7)^2$))=0.245

则GINI(humidty)=1/2*0.500+1/2*0.245=0.373

windy取值为false和true的概率分别为:4/7,3/7

windy=false 时,有3/4打球,1/4不打球,故GINI=1-(($(3/4)^2$)+($(1/4)^2$))=0.375

windy=true 事,有1/2打球,1/2不打球,故GINI=1-(($(1/2)^2$)+($(1/2)^2$))=0.500

则GINI(windy)=1/2*0.500+1/2*0.375=0.434

 

【相关参考资料】

1.决策树:https://www.cnblogs.com/molieren/articles/10664954.html

2.机器学习经典算法(2)——决策树与随机森林:https://www.bilibili.com/video/BV1Ps411V7px?p=3

3.决策树零基础入门教程:https://www.bilibili.com/video/BV1T7411b7DG?from=search&seid=6628949932489280159

4.决策树(信息熵—GINI)计算习题:https://blog.csdn.net/wsp_1138886114/article/details/80955528

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

决策树(信息熵、信息增溢、GINI)的计算 的相关文章

  • Mysql - 为啥不建议UUID当主键

    1 不能当主键的原因 MySQL写入数据时 会把数据存放到索引页中 使用UUID作为主键 新行的主键值不一定比之前的主键值大 所以innoDb无法做到总是把新行插入到索引的最后 而需要为新行寻找合适的位置来分配新的空间 因为是B 树方式存储
  • 本周 RocektMQ社区活动

    本周 RocektMQ社区邀请了陈厚德老师进行源码直播分享 陈老师曾就职于腾讯 盛大 斗鱼等知名互联网公司 现就职于尚德机构 分享相关信息 直播方式 钉钉群直播方式 群号 21791227 分享题目 RocketMQ同步 异步刷盘机制 分享

随机推荐

  • 微信小程序日历签到,拿走即用~

    参考了小友那个谁的 具体也忘记了 改be改be即用了 因为是日历 里面有一个算空格的地方 嘻嘻 也是小友提供的 再次感谢 html
  • AngularJS 1.4.6 实践 一 —— 单页应用登录验证

    AngularJS 1 4 6 实践 一 单页应用登录验证 一 多视图路由及路由嵌套 1 多视图路由 2 路由嵌套 二 路由检测登录状态 1 添加路由改变监听事件 2 非常重要 解决未知路径无限循环 三 整体代码 1 index html
  • Mysql的SQL语句优化和事务隔离级别

    文章目录 安装步骤 mysql连接命令 优化 事务4种特性和4种级别 脏读 不可重复读 幻读 安装步骤 我的文章 https blog csdn net UnicornRe article details 117657298 mysql连接
  • Python读取Access数据库基本操作

    接上篇 python操作Access mdb数据库环境配置 配置好的环境 进行Access数据库基本的操作 导入模块 import pypyodbc import win32com client path r C Users Adminis
  • Parasoft Jtest 2023.1版本-全新的Jtest让你的Java测试更加容易

    测试用例的创建和执行以及测量代码覆盖率是现代开发过程的重要组成部分 新发布的Parasoft Jtest 2023 1增加了重要的新功能 使Java开发和QA团队在测试实践中更具有生产力和效率 通过使用最新版本的Jtest 您可以在Visu
  • C/C++编程:从0到1学习libuv(linux、Clion)

    libuv强制使用异步和事件驱动的编程风格 它的核心工作是提供一个event loop 还有其他基于IO和其他事件通知的回调函数 libhv还提供了一些核心工具 比如定时器 非阻塞的网络支持 异步文件系统访问 子进程等 实践 接下来我们安装
  • [CentOS6.5]cmake: command not found

    yum install y cmake
  • 如何使用Python进行数据挖掘?

    使用Python进行数据挖掘需要掌握以下几个关键步骤 数据收集 首先 你需要获取你要进行数据挖掘的数据 可以从公共数据集 API 数据库等各种来源收集数据 数据清洗 清洗数据是一个重要的步骤 它包括去除重复数据 处理缺失值 处理异常值 标准
  • 2020-11-30

    嵌入式MQTT库移植 基于mosquitto库 一 交叉编译OpenSSL 下载源码到Linux虚拟机环境 https www openssl org source openssl 1 1 1f tar gz 放入非windows共享文件夹
  • UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 的解决方法

    最近初学网络爬虫 今天在练习使用Python的request模块的时候遇到了一个错误 import requests 发送请求 response requests get https jingyan baidu com event img
  • input获取值时,页面数据value并未改为键入值,导致校验时数据不一致问题处理

    由于部分原因 系统现需要将数据进行动态处理 实现表头自定义 产生问题的背景不做介绍 现做此记录 方便后面查阅 问题描述 修改了input框的值 但实际value并未改变 如下可以看到下图右边值已经改为了500 但是进行调试时发现依旧是页面初
  • python UI自动化无界面运行

    python大家都知道可以使用selenium进行在Windows环境下运行 但每次都会进行弹框运行 但有时我们需要脚本在Linux环境进行运行或者不希望UI自动化频繁的弹框影响我们的操作 所有我们可以在编写UI自动化的时候选择有界面运行
  • echart--柱状图 从上到下排列 不居中

    遇到问题 echart的柱状图 我需要长这样 但是变成了下面那个图的样子 原因 1 x轴的对其方向不对 2 y轴的数据默认高度是auto 设置一个定死的值就行 3 y轴的对其方向不对 解决方案 在对应位置加上框里的参数
  • CPU interactive调频策略

    本文集中于interactive调频策略 内核可选的调频策略 读取可用的调频管理策略 sys devices system cpu cpufreq cpu0 cpufreq scaling available governors 调频策略通
  • python -m pip install --upgrade pip 报错

    具体问题 环境 windows python3 6 根据pip 的提示 WARNING You are using pip version 19 3 1 however version 20 0 2 is available You sho
  • 【LeetCode与《代码随想录》】双指针篇:做题笔记与总结-JavaScript版

    文章目录 代码随想录 主要题目 27 移除元素 344 反转字符串 剑指Offer 05 替换空格 151 翻转字符串里的单词 206 反转链表 24 两两交换链表中的节点 19 删除链表的倒数第 N 个结点 面试题 02 07 链表相交
  • 服务商面盯行业大佬新动向站在巨人肩膀上

    刷脸支付是以往的支付方式的巨大变革 可能会带来支付链条的变化以及交易场景的改变 从而引发第三方支付革命 其次一些新概念有助于刺激消费体验 同时可以提高企业品牌影响力 这些都是使用刷脸支付的有利之处 对于商户而言 刷脸支付增加广告曝光程度因为
  • 基于已搭建的项目完成用户管理模块

    一 创建所需数据库并添加记录 二 将资料中的所需页面内容加载到项目当中的webapp目录下 三 在各包中创建相关的类及接口 1 实体类创建 UserInfo 实体类 映射数据库字段 字段建议一致 2 在dao层接口定义用户管理模块的增删改查
  • matlab不同数据类型的读取(加载)和保存(写入)策略

    本文侧重于提供保存和读取最佳策略 分析适用场景 matlab的具体语法可以通过doc或help查询详细文档及示例 持续更新中 cell 矩阵 等不同数据类型的matlab内部读取和python交互读取策略 matlab内部读取 通用读写函数
  • 决策树(信息熵、信息增溢、GINI)的计算

    如何构建决策树 我需要选择什么属性来度量 这里我们需要通过计算才能更好的构建一棵决策树 有以下二分类问题训练样本 outlook temperat humidity windy play sunny hot high FALSE no su