Python计算信息熵实例


Posted in Python onJune 18, 2020

计算信息熵的公式:n是类别数,p(xi)是第i类的概率

Python计算信息熵实例

假设数据集有m行,即m个样本,每一行最后一列为该样本的标签,计算数据集信息熵的代码如下:

from math import log
 
def calcShannonEnt(dataSet):
  numEntries = len(dataSet) # 样本数
  labelCounts = {} # 该数据集每个类别的频数
  for featVec in dataSet: # 对每一行样本
    currentLabel = featVec[-1] # 该样本的标签
    if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0
    labelCounts[currentLabel] += 1 
  shannonEnt = 0.0
  for key in labelCounts:
    prob = float(labelCounts[key])/numEntries # 计算p(xi)
    shannonEnt -= prob * log(prob, 2) # log base 2
  return shannonEnt

补充知识: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)

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))

以上这篇Python计算信息熵实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
浅析Python中的join()方法的使用
May 19 Python
轻松实现python搭建微信公众平台
Feb 16 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
python 自定义对象的打印方法
Jan 12 Python
TensorFlow tensor的拼接实例
Jan 19 Python
pycharm运行程序时看不到任何结果显示的解决
Feb 21 Python
信号生成及DFT的python实现方式
Feb 25 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
python导入库的具体方法
Jun 18 #Python
如何基于Python代码实现高精度免费OCR工具
Jun 18 #Python
python软件都是免费的吗
Jun 18 #Python
python中return如何写
Jun 18 #Python
python对一个数向上取整的实例方法
Jun 18 #Python
Python基于time模块表示时间常用方法
Jun 18 #Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 #Python
You might like
PHP 日,周,月点击排行统计
2012/01/11 PHP
php的dl函数用法实例
2014/11/06 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
jQuery 技巧小结
2010/04/02 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
js读取配置文件自写
2014/02/11 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
工商企业管理应届生求职信
2013/11/03 职场文书
大学生创业感言
2014/01/25 职场文书
解除合同协议书
2014/04/17 职场文书
个人合作协议书范本
2014/04/18 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
个人整改措施书面材料
2014/10/24 职场文书
师范生见习报告
2014/10/31 职场文书
2014年信访工作总结
2014/11/17 职场文书
六年级学生期末评语
2014/12/26 职场文书
团组织推优材料
2014/12/29 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书