python信息熵与信息增益

news2024/11/25 10:25:23

前言

最近在读几篇华为杯的优秀论文,都是关于数据预测相关的,准确来说是时间序列预测,在数据处理部分发现了一个有趣的内容“信息熵”,之前在周志华老师的西瓜书上决策树剪枝部分看到过,在数据降维的部分看到还是第一次,在另一篇文章中也用到了信息增益这个东西,两篇文章我都会放在参考中以便感兴趣的伙伴查看。

信息熵与信息增益

这里提到的都是相对连续的数据,并不是特征是类别的频率,具体可以参考其他文章。这一部分我就完全copy于论文中:“信息熵”理论:克劳德·艾尔伍德·香农(Claude Elwood Shannon)于 1948 年提出了“信息熵”理论。一般来说,某个指标的信息熵越小,计算出来的信息熵权重也就越大,相应提供的信息量越多,其在综合模型的重要程度也越大;相反,某个指标的信息越大,其所占信息权重则越小,提供的信息量也越少,在综合模型中所起到的作用也越小。其中,对于某项指标的一组数据,其信息熵权重的计算方式如下所示: p i j = Y i j / ∑ i = 1 n Y i j E j = − ln ⁡ − 1 ( n ) ∑ i = 1 n p i j ln ⁡ p i j W j = 1 − E j n − ∑ i = 1 n E i ( j = 1 , 2 , … , n ) p_{ij}=Y_{ij}/\sum_{i=1}^{n}Y_{ij}\\E_{j}=-\ln^{-1}(n)\sum_{i=1}^{n}p_{ij}\ln p_{ij}\\W_{j}=\frac{1-E_{j}}{n-\sum_{i=1}^{n}E_{i}}(j=1,2,\ldots,n) pij=Yij/i=1nYijEj=ln1(n)i=1npijlnpijWj=ni=1nEi1Ej(j=1,2,,n)其中, E j E_j Ej为第 j j j项指标的信息熵, n n n为样本总数, Y j Y_j Yj为该指标的第 j j j条样本数据。 W j W_j Wj是第 j j j个筛选后主要变量的信息熵权重。
第二个式子中的第一项的对数作者在计算中省略了,求和中的对数有时也可换成以2为底的;第三个式子在实际计算中也没有应用,而是使用了“信息熵占比”公式,在后续的代码中可以看到,计算结果相同。
信息增益部分也从论文中截取如下:

信息增益
这两部分对于数据处理中的作用也不同,信息熵是作为降维之后的验证,信息增益是降维的直接方法。

代码实现——信息熵计算

import pandas as pd  
import numpy as np  
    
file_path = '2012年.xls'   
data = pd.read_excel(file_path, header=0) 
data_array = data.values 
def cal_weight(value):  
     
    n_features = value.shape[1]  # 特征的数量  
    n_samples = value.shape[0]  # 样本的数量  
      
    # 初始化熵增益数组  
    g = np.zeros(n_features)  
    p = np.zeros_like(data_array, dtype=np.float64)
    e = np.copy(p)
    
    # 计算每个特征的熵  
    summ=np.sum(data_array,axis = 0) 
    for j in range(n_samples):
        for i in range(n_features):
            p[j][i] = value[j][i] / summ[i]
            p[j][i] = np.where(p[j][i] == 0, 1e-9, p[j][i])
            e[j][i]=(p[j][i] * np.log(p[j][i]))  
    ee = np.sum(e,axis = 0)
    for i in range(n_features):
        g[i] = 1 - ee[i]  
    
    w = g / np.sum(g)  
      
    return w   
  
# 计算权重  
w = cal_weight(data_array)
feature_names = data.columns   # 示例特征名  
w_df = pd.DataFrame(w, index=feature_names, columns=['权重'])  
  
print("#######权重:#######")  
print(w_df.sort_values(by="权重", ascending=False))

论文中所提供的代码并没有实现(有点乱码),中间的计算部分我又花费了好久才完成(即使公式非常简单),原因是有点太依赖语言大模型不肯自己动脑思考,中间也出现了好多问题:
1、在原始数据的计算过程中记过出现了nan值,原因是第二个式子中的对数计算, p i j p_{ij} pij会出现负的,这是由于数据中有正有负,可能论文中用于降维后的验证也有道理(降维后的数据恰好都是正值),但是如果有负值就不能用了吗,我也查询了一些方法可以调整:
最小值加1法:将所有数值转换成它们相对于最小值的偏移量,再加上一个足够大的常数(如最小值+1),使得所有的值都成为非负的。例如,如果最小值是-5,则将每个数变成 ( x + 6 ),再计算信息熵。
最小二乘归一化:将数据标准化到0到1之间,这可以通过将数据减去最小值并除以最大值减去最小值来实现,虽然结果不再是绝对值,但它保证了数据在分析过程中是正的。
对称化:如果数据分布在均值附近存在负值和正值的对称分布,可以选择平均值作为参考点,将数据转换为相对平均值的偏差形式,然后再计算信息熵。
2、信息熵计算公式中的第三个在实际计算中可以写的稍微简单一点。
最后得到的输出形式的代码参考于论文中的,得到的结果如图:输出结果

参考

两篇论文都是2022年华为杯E题的优秀论文,其中提到信息熵的编号为E22103350038;信息增益的为E22103040108,分别在29页和20页。下载链接如下:链接:论文下载
提取码:1234

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

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

相关文章

关于springboot的拦截器能力源码分析

首先你得有web环境,这个就不说了,springboot下很简单。 一、拦截器使用 我们先来使用一下拦截器。 步骤1、先创建一个Controller RestController RequestMapping("/test") public class MyController {GetMapping("/test/{name}"…

HAProxy原理及实例

目录 目录 haproxy简介 haproxy的基本信息 haproxy下载并查看版本 haproxy的基本配置信息 global配置 ​编辑多进程和多线程 启用多进程 启用多线程 haproxy开启多线程和多进程有什么用 proxies配置 defaults frontend backend listen socat工具 实例&#xff1a…

ESP32 SNTP 网络校时 钟表显示

8月12日(2) 例程环境:Windows 11、Visual Studio Code、IDF_V5.2.1、LVGL_V8.3.11、HelloBug ESP32 Pilot开发板 源码获取:https://item.taobao.com/item.htm?ftt&id652537645861 向商家索取对应源码 SNTP (Simple Network Time Protocol) 是一种简…

中科亿海微SoM模组——电机驱动板

电机驱动板 电机驱动板作为驱动电机的重要组成部分,被广泛应用于工业自动化、消费电子、汽车、家用电器等应用领域。在工业自动化中,电机驱动板主要用于控制机器人、数控机床、输送带等设备,确保其高效、精准地运行。在消费电子和家用电器中…

【ARM Coresight Debug 工具系列 -- Trace32 | ARM-DS5 | OpenOCD JLINK 关系与差】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 常用debug工具差异介绍Trace32ARM DS-5OpenOCDJ-Link 关系与差异差异 示例比较使用 Trace32 进行实时跟踪使用 ARM DS-5 进行高级调试使用 OpenOCD 进行开源调试 Summary 常用debug工具差异介绍 在嵌入式系统开发和…

阿里淘天校招校招开始啦,欢迎投递~

淘天校招&校招开始啦,欢迎投递~ 后续继续推出技术类面试资料,有问题也可咨询哦! 校招内推码(25年10月前均有效) 社招内推码(长期有效)

Tarjan(五)vDCC缩点

Tarjan(五) vDCC点双联通分量: 需要之前的前置知识,需要搞懂什么是割点。在tarjan(2)中有介绍到。 点双连通分量是指在一个无向图中,如果一个子图是点双连通的(即去掉该子图中的任意一个节点后,剩余的图仍然是连通的&a…

电商平台产品ID|CDN与预渲染|前端边缘计算

技术实现 都是通过ID拿到属性,进行预渲染html,通过 oss 分发出去 详情页这种基本都是通过 ssr 渲染出来,然后上缓存 CDN 分发到边缘节点来处理,具体逻辑可以参考 淘宝——EdgeRoutine边缘计算(CDNServerless 边缘计算…

深度解析HAProxy:构建高可用负载均衡的终极指南

目录 haproxy配置文件组成 实验环境 haproxy安装 haproxy的配置文件说明 全局配置段global 多进程和多线程配置 代理配置段proxies server配置说明 实验相关配置 测试效果: haproxy的状态页 socat命令 socat命令的一些常用示例 HAProxy的调度算法 静…

Oracle事务是怎么练成的

什么是事务 事务是数据库管理系统执行过程的一个逻辑单位,由一系列有限的数据库操作序列构成,事务必须满足‌ACID属性。ACID理论是数据库中最重要的概念之一,分别代表原子性(Atomicity)、一致性(Consisten…

人工智能GPU算力评估分析

GPU算力评估 一、 关于训练GPU的带宽 大模型训练算力需求:总算力(Tlops)6倍模型参数量训练数据token量,精准高效满足大规模训练需求。 需要把那么计算量和通信量的比例是多少? 3:指的是一次正向两次反向,反向是梯度…

程序员职场升级攻略:学AI技能,稳步迈向月薪破万之路

在人工智能高速发展的今天,AI技术已经成为职场人士提升收入的有力武器。许多人通过学习AI技能,成功跻身高收入行业,实现了月薪破万的目标。本文将揭秘高收入行业与城市,并提供一条清晰的学习路线,助你成为AI领域的一员…

ubuntu:更新阿里云apt源

前言 我用vmware也搭建了ubuntu服务器,并同样发现apt几乎完全用不了(系统默认用的是清华源,可能较老了) 更新阿里云apt源 1、去阿里云官网找系统对应的apt源配置 阿里云镜像:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发…

Unity教程(九)角色攻击的改进

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

WindowsAPI 查阅笔记:进程间管道通信

进程间有名管道的通信: 1.1 重叠I/O(Overlapped I/O) 重叠I/O(Overlapped I/O)是Windows编程中的一种异步 I / O 处理方式,它允许程序在发出I/O请求后继续执行其他任务,而不必等待I/O操作完成…

萌啦定价工具,萌啦数据ozon定价工具

在电商行业日益竞争激烈的今天,精准定价成为了商家们获取市场竞争优势的关键一环。尤其是对于在Ozon平台上耕耘的卖家而言,无论是本土卖家还是跨境商家,如何快速、准确地制定出既符合市场需求又能保障利润的价格策略,成为了亟待解…

高防服务器的机制和原理

高防服务器是一种具备强大防御能力的服务器,旨在保护网站免受各种网络攻击,如DDoS(分布式拒绝服务)攻击、CC(ChallengeCollapsar)攻击等。今天小编将从流量过滤与清洗、负载均衡与反向代理、实时监控与报警…

圈内水刊“三巨头”之首实至名归?发文量飙升至9000+,硕博小白照样发1区TOP!

【SciencePub学术】昨天,小编给大家介绍了环境水刊“三巨头”之一的《Journal of Hazardous Materials》,本期,给大家带来的是位于环境水刊“三巨头”之首的《Science of the Total Environment》,属于JCR1区中科院1区TOP&#xf…

冷数据归档(历史库),成本与性能如何兼得?| OceanBase应用实践

随着数据量的迅猛增长,企业和组织在数据库管理方面遭遇的挑战愈发凸显。数据库性能逐渐下滑、存储成本节节攀升,以及数据运维复杂性的增加,这些挑战使得DBA和开发者在数据管理上面临更大的压力。 为了应对这些挑战,对数据生命周期…

vulnstack-5

环境搭建 靶场虚拟机共用两个,一个外网一个内网,用来练习红队相关内容和方向,主要包括常规信息收集、Web攻防、代码审计、漏洞利用、内网渗透以及域渗透等相关内容学习。 虚拟机密码 win7 sun\heart 123.com sun\Administrator dc123.com # …