python 实现信息熵、条件熵、信息增益、基尼系数

2023-11-08

在这里插入代码片注:该代码为慕课网课程中老师讲解


```python
import pandas as pd
import numpy as np
import math
## 计算信息熵
def getEntropy(s):
    # 找到各个不同取值出现的次数
    if not isinstance(s, pd.core.series.Series):
        s = pd.Series(s)
    prt_ary = pd.groupby(s , by = s).count().values / float(len(s))
    return -(np.log2(prt_ary) * prt_ary).sum()
## 计算条件熵: 条件s1下s2的条件熵
def getCondEntropy(s1 , s2):
    d = dict()
    for i in list(range(len(s1))):
        d[s1[i]] = d.get(s1[i] , []) + [s2[i]]
    return sum([getEntropy(d[k]) * len(d[k]) / float(len(s1)) for k in d])


## 计算信息增益
def getEntropyGain(s1, s2):
    return getEntropy(s2) - getCondEntropy(s1, s2)

## 计算增益率
def getEntropyGainRadio(s1, s2):
    return getEntropyGain(s1, s2) / getEntropy(s2)


## 衡量离散值的相关性
import  math
def getDiscreteCorr(s1, s2):
    return getEntropyGain(s1,s2) / math.sqrt(getEntropy(s1) * getEntropy(s2))

# ######## 计算概率平方和
def getProbSS(s):
    if not isinstance(s, pd.core.series.Series):
        s = pd.Series(s)
    prt_ary = pd.groupby(s, by = s).count().values / float(len(s))
    return sum(prt_ary ** 2)
######## 计算基尼系数
def getGini(s1, s2):
    d = dict()
    for i in list(range(len(s1))):
        d[s1[i]] = d.get(s1[i] , []) + [s2[i]]
    return 1-sum([getProbSS(d[k]) * len(d[k]) / float(len(s1)) for k in d])
## 对离散型变量计算相关系数,并画出热力图, 返回相关性矩阵
def DiscreteCorr(C_data):
    ## 对离散型变量(C_data)进行相关系数的计算
    C_data_column_names =  C_data.columns.tolist()
    ## 存储C_data相关系数的矩阵
    import numpy as np
    dp_corr_mat = np.zeros([len(C_data_column_names) , len(C_data_column_names)])
    for i in range(len(C_data_column_names)):
        for j in range(len(C_data_column_names)):
            # 计算两个属性之间的相关系数
            temp_corr = getDiscreteCorr(C_data.iloc[:,i] , C_data.iloc[:,j])
            dp_corr_mat[i][j] = temp_corr
    # 画出相关系数图
    fig = plt.figure()
    fig.add_subplot(2,2,1)
    sns.heatmap(dp_corr_mat ,vmin= - 1, vmax= 1, cmap= sns.color_palette('RdBu' , n_colors= 128) , xticklabels= C_data_column_names , yticklabels= C_data_column_names)
    return pd.DataFrame(dp_corr_mat)
## 计算离散变量间的相关系数矩阵,并画出相关性热力图
## C_data: 离散变量数据
## 返回相关系数矩阵

def corr_vars(C_data):
    C_data_column_names =  C_data.columns.tolist()
    dp_corr_mat = np.zeros([len(C_data_column_names) , len(C_data_column_names)])
    for i in range(len(C_data_column_names)):
        for j in range(len(C_data_column_names)):
            # 计算两个属性之间的相关系数
            temp_corr = getDiscreteCorr(C_data.iloc[:,i] , C_data.iloc[:,j])
            dp_corr_mat[i][j] = temp_corr
    # 画出相关系数图
    fig = plt.figure()
    fig.add_subplot(2,2,1)
    sns.heatmap(dp_corr_mat ,vmin= - 1, vmax= 1,
                cmap= sns.color_palette('RdBu' , n_colors= 128) , 
                xticklabels= C_data_column_names ,
                yticklabels= C_data_column_names)
    return dp_corr_mat

if __name__ == "__main__":
    s1 = pd.Series(['X1' , 'X1' , 'X2' , 'X2' , 'X2' , 'X2'])
    s2 = pd.Series(['Y1' , 'Y1' , 'Y1' , 'Y2' , 'Y2' , 'Y2'])
    print('CondEntropy:',getCondEntropy(s1, s2))
    print('EntropyGain:' , getEntropyGain(s1, s2))
    print('EntropyGainRadio' , getEntropyGainRadio(s1 , s2))
    print('DiscreteCorr:' , getDiscreteCorr(s1, s1))
    print('Gini' , getGini(s1, s2))
    




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

python 实现信息熵、条件熵、信息增益、基尼系数 的相关文章

  • su: must be suid to work properly错误

    内核 linux2 6 21 文件系统 busybox1 19 2 yaffs2 开发板 xff1a loongson 1b 嵌入式文件系统一般用户执行su root切换根用户提示错误 xff1a su must be suid to wo
  • 【libuv】入门:queue work 的跨线程异步通信

    通过阅读2012年的uv book 入门 有中文版 Handles and Requests libuv works by the user expressing interest in particular events This is
  • android rtsp server or clinet work success

    感谢 pedroSG94大神的rtmp rtsp stream client java的库 此为我改造的一个类代码地址 pedroSG94提供了camera xff0c 录屏和opengl渲染的demo类 xff0c 本人改造的类可以向外暴
  • centos7.6输入正确密码总是提示“Sorry, that didn‘t work. Please try again.”

    跟着老韩的视频顺利安装好了VM16和CentOs7 6 但最后卡在登录上了 xff0c 输入正确的用户名和密码后一直提示 Sorry that didn 39 t work Please try again 网上找了很多方法都没有解决 最后
  • C_C++随机数据生成(is how to use but not how it work)

    1 int rand void 库 xff1a stdlib h 功能 xff1a 随机数发生器 xff0c 值在0至RAND MAX之间 xff0c RAND MAX定义在stdlib h 其值为2147483647 解释 xff1a 首
  • sorry,that didn‘t work.please try again 问题的解决

    问题 centos系统图形化界面登录的时候 xff0c 显示sorry xff0c that didnot work xff0c please try again 尝试途径 1 查询到的解决方法 xff0c 是因为大小写的问题 xff0c
  • Mac OSX 打开原生自带读写NTFS功能[10.11.6 work, 10.14.4不work]

    文章目录 一 放开mac的Rootless机制二 查看磁盘的Volume Name三 更改 etc fstab文件四 做快捷方式五 隐藏桌面移动硬盘快捷方式 xff0c 拖入Finder边栏环境 最近买了一个移动硬盘 xff0c 发现在ma
  • 远程解决win10上keyboard和chrome不work的两例问题(by quqi99)

    作者 xff1a 张华 发表于 xff1a 2022 06 10 版权声明 xff1a 可以任意转载 xff0c 转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 远程解决了两例windows问题 xff0c 记录一下 xff
  • 【问题收录】[ubuntu]startx doesn't work

    问题描述 只能进入tty 模式 输入 startx没有任何效果 span class hljs attribute XSERVTransSocketUNIXCreateListener span span class hljs string
  • python 用随机森林模型补充数值变量缺失值

    对数据建模之前 填补缺失值是必不可少的一步 这里把用随机森林模型快速预测缺失值的方法总结如下 以方便日后的工作 data df DataFrame类型的数据 obj column 待填补缺失值的列名 missing other column
  • 如何在 XMind 中绘制流程图?

    进阶教程 如何在 XMind 中绘制流程图 XMind 是专业强大的思维导图软件 由于其结构没有任何限制 很多朋友特别喜欢用它来绘制流程图 禁不住大家的多次询问 今天 GTQ28就将这简单的流程图绘图方法分享给大家 在 XMind 中 绘制
  • Python DataFrame写入OACLE数据库

    分析工具与数据库交互 Python 直接把DataFrame写入OACLE数据库 python 把模型跑出来的结果写入csv txt等文档中 不便于后续的存储和分析 于是乎我想把它直接写入数据库 但是问题来了 百度了很多写法 都是需要把Da
  • 关于工作效率的心得分享

    关于工作效率的心得分享 作者 许诗淇 高级视觉设计师 负责过QQ视觉主设工作 目前主导RTX项目设计 个人站点 这是去年11月底在小组里分享过的工作效率心得 在这里也跟大家分享一下工作 快 感哈哈 我相信大家应该都有过工作效率的些许烦恼 而
  • python 实现信息熵、条件熵、信息增益、基尼系数

    在这里插入代码片注 该代码为慕课网课程中老师讲解 python import pandas as pd import numpy as np import math 计算信息熵 def getEntropy s 找到各个不同取值出现的次数
  • ] 2014找工作总结-机会往往留给有准备的人

    看了这篇文章 感觉到了震撼 如果早看到该有多好 我也是2014年的毕业生 我的找工作历程也基本上告一段落了 与本博文的原作者比起来 自己仿佛到现在也没有真正的为工作而准备 这也是自己没有规划的原因吧 所以在找工作的过程中只收到了一个offe
  • 毕业了

    自己的学生时代快告一段落 即将迎来的是工作时代 对未来充满了好奇 兴奋 希望我保有激情的去面对工作 在写论文的过程中 我也有对自己的论文感兴趣的 比如对Hadoop 但是对于另外一方面没了兴趣 也没有怎么深究 因此 这也是自己的论文的一个遗
  • Python中执行MySQL语句, 遇到同时有单引号, 双引号处理方式 !r, repr()

    SQL语句 insert cmd INSERT INTO 0 SET 1 format db conn firmware info table join 0 1 r format k str v for k v in info dict i
  • 寻找第K大的数的方法总结

    寻找第K大的数的方法总结 今天看算法分析是 看到一个这样的问题 就是在一堆数据中查找到第k个大的值 名称是 设计一组N个数 确定其中第k个最大值 这是一个选择问题 当然 解决这个问题的方法很多 本人在网上搜索了一番 查找到以下的方式 决定很
  • linux 系统下执行R文件

    随着数据量的激增 在linux系统环境下执行数据分析模型显得很重要 本文来总结下在linux系统下执行R文件的步骤 step01 创建R脚本 例如 Rtest R step02 创建shell脚本 例如 runRtest sh 内容为 bi
  • 基于聚类的异常值检测算法依据及python实现

    假设数据集D被聚类算法划分到k个类C C1 C2 CK 对象p 的离群因子of3 p 定义为 与所有类间距的加权平均值 其中 D 为样本数量 Cj 为第j个聚类群体样本数量 d p cj 为样本p与第j个聚类中心的距离 其中cj表示第j个聚

随机推荐

  • SpringBoot项目使用EasyExcel读取上传Excel

    SpringBoot项目使用EasyExcel读取上传Excel 1 EasyExcel简介 EasyExcel是一个基于Java的简单 省内存的读写Excel的开源项目 在尽可能节约内存的情况下支持读写百M的Excel EasyExcel
  • Mybatis的mapper.xml批量插入、修改sql

    今天要有个功能 要进行一批数据的插入和修改 为了不频繁调用数据库 所以想到了批量插入和修改 因为从毕业后 就没写过批量插入和批量修改 所以在这里记录一下 避免后续再遇到忘记怎么写了 批量插入 传入的参数是List lt 实体 gt list
  • 基于vue-element-ui开发Hproxy项目前端

    hproxy项目前端使用vue element admin框架 页面为hook列表 和一个添加hook页面 添加路由 编辑src router index js文件 在constantRoutes列表追加如下路由内容 path hproxy
  • 【OpenGL】机器人手臂的实现

    一 基本功能 实现了机器人的一只手臂 由上臂 下臂 五根手指共同组成 通过A S D F G键向上旋转 通过a s d f g键向下旋转 通过方向键left和right转向 通过up和down实现放缩 效果图如下 二 实现过程 1 实现手臂
  • 音频编解码G729 PCM

    G 711与G 729的带宽分别是80Kbps和24Kbps 恩奎斯特原理规定声音的采样频率是每秒8000次 每次8bit 语音数据带宽就是64Kbps 8000 8 正常语音包是10ms成帧一次 每两帧成一个包 这样 每秒就成50个包 1
  • mysql连接池唤醒_当MySQL连接池遇上事务(一):神秘的幽灵锁

    MySQL连接池是一个很好的设计 通过将大量短连接转化为少量的长连接 从而提高整个系统的吞吐率 一般各个团队都会对连接池进行封装 只提供简洁的接口供上层使用 在上层看来 并不知道底层是否使用了连接池 甚至连访问数据库的IP和Port都不知道
  • 贪心算法 - java切金条问题 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 今天康康一个贪心算法的经典例题 切金条问题 问题 一块金条切成两半 是需要花费和长度数值一样的铜板的 比如长度为20的金条 不管切成长度多大的两半 都要花费20个铜板
  • Ubuntu下编译openwrt

    从网上找的资料 还有自己出现的错误和解决方法 合并整理一下 很多安装时出错以及找解决方法的过程 已经放在另一篇文章里了 下面也放链接了Ubuntu下编译openwrt的过程出错及解决 m0 60027682的博客 CSDN博客 我是跟着视频
  • C 时间转化(秒化时.分.秒)

    写一个函数将以秒计数的时间转换为以时 分 秒计数的时间 函数原型为 char seconds to int seconds 编写main调用测试它 输入格式要求 d 提示信息 请输入时间 秒 n 输出格式要求 d秒合计 s n d小时 d分
  • 代码好坏的评判标准

    从新手接替一个项目开始 来介绍代码的评判维度有哪些 可读性 readability 一般来说 代码被阅读的次数远远超于被编写和执行的次数 代码如果基本符合编码规范 命名清晰 注释详尽 函数的长短合适 模块划分清晰 高内聚低耦合等 基本上代码
  • 出现ModuleNotFoundError:cannot import name ‘is_scalar_nan‘ from ‘sklearn.utils‘的问题

    在最近写能源大数据分析案例时 用到了SimpleImputer库来处理缺失值 由于我电脑上的sklearn库版本较低 先是出现了No module named sklearn impute 的问题 在查阅资料后 使用pip install
  • PWM控制智能小车速度

    用Arduino板子做小车 下面的简单程序基本能实现小车的基本行走 define STOP 0 define FORWARD 1 define BACKWARD 2 define TURNLEFT 3 define TURNRIGHT 4
  • .net 获取HttpContext

    文章目录 在Controller中获取HttpContext 在自定义的服务中获取HttpContext 在Controller中获取HttpContext 可以直接使用HttpContext来获取当前的HttpContext 例如 Htt
  • 关于《Operating Systems: Three Easy Pieces》书中的 #include“common.h“

    之前在读 Operating Systems Three Easy Pieces 这本书的时候里面有代码引用 include common h 原书的代码如下 include
  • java的类学习

    先看下面的代码 span style font size 18px public class Static public int a public String SS public Static a 35 public void Test
  • 大专毕业,从6个月开发转入测试岗位的一些感悟——写在测试岗位3年之际

    时光飞逝 我从前端开发岗位转入测试岗位已经三年了 这期间从迷茫到熟悉 到强化 到熟练 到总结 感受还是很深的 三年前的某一个晚上 我正准备下班回家 我们的项目经理把我叫到办公司和我谈话 谈了很多 具体说什么不记得了 大体意思就是说测试组缺人
  • Linux基础知识点总结

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 树高千尺 落叶归根人生不易 人间真情 目录 前言 Linux 安装系统 服务管理
  • 关于uniapp将H5网页编译为微信小程序样式错乱

    在控制台看了下出现警告Some selectors are not allowed in component wxss including tag name selectors ID selectors and attribute sele
  • jsonpath - 使用 JSONPath 解析 JSON 完整内容详解

    目录 1 操作符 2 函数 3 过滤器运算符 4 Java操作示例 5 阅读文档 何时返回 谓词 6 调整配置 7 Java操作示例源码 json Java 输出 示例2 Java 输出 过滤器示例 Java 输出 JsonPath是一种简
  • python 实现信息熵、条件熵、信息增益、基尼系数

    在这里插入代码片注 该代码为慕课网课程中老师讲解 python import pandas as pd import numpy as np import math 计算信息熵 def getEntropy s 找到各个不同取值出现的次数