一、熵

熵,在信息论中是用来刻画信息混乱程度的一种度量。熵最早源于热力学,后应广泛用于物理、化学、信息论等领域。1850年,德国物理学家鲁道夫·克劳修斯首次提出熵的概念,用来表示任何一种能量在空间中分布的均匀程度。1948年,Shannon在Bell System Technical Journal上发表文章“A Mathematical Theory of Communication”,将信息熵的概念引入信息论中。本文所说的熵就是Shannon熵,即信息熵,解决了对信息的量化度量问题。

信息熵定义如下:

其中X为一随机变量,x是该随机变量的可能取值,p(x)是x发生的概率。从定义中可以看出变量的不确定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大。

二、基于Python的信息熵

import math
#以整型数据为例,给出其信息熵的计算程序。
###########################################
'''统计已知数据中的不同数据及其出现次数'''
###########################################
def StatDataInf( data ):dataArrayLen = len( data )diffData = [];diffDataNum = [];dataCpy = data;for i in range( dataArrayLen ):count = 0;j = iif( dataCpy[j] != '/' ):temp = dataCpy[i]diffData.append( temp )while( j < dataArrayLen ):if( dataCpy[j] == temp ):count = count + 1dataCpy[j] = '/'j = j + 1diffDataNum.append( count )return diffData, diffDataNum###########################################
'''计算已知数据的熵'''
###########################################
def DataEntropy( data, diffData, diffDataNum ):dataArrayLen = len( data )diffDataArrayLen = len( diffDataNum )entropyVal = 0;for i in range( diffDataArrayLen ):proptyVal = diffDataNum[i] / dataArrayLenentropyVal = entropyVal - proptyVal * math.log2( proptyVal )return entropyValdef main():data = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2 ][diffData, diffDataNum] = StatDataInf( data )entropyVal = DataEntropy( data, diffData, diffDataNum )print( entropyVal )data = [1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1 ][diffData, diffDataNum] = StatDataInf( data )entropyVal = DataEntropy( data, diffData, diffDataNum )print( entropyVal )data = [1, 2, 3, 4, 2, 1, 2, 4, 3, 2, 3, 4, 1, 1, 1 ][diffData, diffDataNum] = StatDataInf( data )entropyVal = DataEntropy( data, diffData, diffDataNum )print( entropyVal )data = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ][diffData, diffDataNum] = StatDataInf( data )entropyVal = DataEntropy( data, diffData, diffDataNum )print( entropyVal )data = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4, 5 ][diffData, diffDataNum] = StatDataInf( data )entropyVal = DataEntropy( data, diffData, diffDataNum )print( entropyVal )if __name__ == '__main__':main()
###########################################
#运行结果
1.0
0.9182958340544896
1.965596230357602
2.0
2.3183692540329317

三、参考文献

  1. Shannon C E . The mathematical theory of communication. 1963[J]. Bell Labs Technical Journal, 1950, 3(9):31-32.
  2. https://baike.so.com/doc/3291228-3467016.html.

作者:YangYF

信息熵及其Python的实现相关推荐

  1. python 信息熵

    文章目录 一.熵的概念与定义 二.python 实现 一.熵的概念与定义 熵概念   熵,在信息论中是用来刻画信息混乱程度的一种度量.熵最早源于热力学,后应广泛用于物理.化学.信息论等领域.1850年 ...

  2. 决策树算法笔记整理1 - 如何划分?(信息熵,不纯度及信息增益)

    1. 帮助理解的前置case 1.1 case1:相亲 参考CSDN其他blog 决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树. 套用俗语,决策树分类的思想类似于找对象.现想象一个女孩 ...

  3. 云端大数据实战记录-大数据推荐

    前言 WHY 云:为什么我们需要云,大数据时代我们面对两个问题,一个是大数据的存储,一个是大数据的计算.由于数据量过大,在单个终端上运行效率过差,所以人们用云来解决这两个问题. WHAT IS 云:云 ...

  4. 【五】搜索推荐技术在电商导购领域的应用——截图小王子

    这是一个古老的问题 商品,在网络虚拟货架上陈列,一张好的封面图对于促成转化是不言而喻的.那么什么样的图片才是好封面呢?我们的侧重点是让图片传递使用价值,让用户直接感知到"如果购买它,我会得到 ...

  5. 机器学习笔记——决策树之分类树

    一.什么是决策树 决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题. 本文主要介 ...

  6. 机器学习(三)——决策树

    目录 什么是决策树 决策树的节点 决策树的特点 决策树的基本算法 决策树的划分选择 如何选择最优划分属性 方法一:信息增益 信息熵的python代码实现: 用信息增益划分最优属性的python代码: ...

  7. 图像融合质量评价方法SSIM、PSNR、EN、MSE与NRMSE(一)

    文章目录 1 前言 2 融合评价指标介绍 2.1 结构相似性 SSIM 2.2 峰值信噪比 PSNR 2.3 信息熵 Entropy 2.4 均方误差 MSE 2.5 归一化均方根误差 NRMSE 3 ...

  8. 决策树之构造决策树(一)

    决策树时一种常用的数据挖掘算法,其优势在于数据形式非常容易理解,缺点在于很可能产生过度匹配的问题(即过拟合问题,如何解决过拟合问题待续.......).决策树的一个重要任务就是为了理解数据中所蕴含的数 ...

  9. 【机器学习实验二】决策树(Decision Tree)及其在图像识别任务上的应用

    经典有监督学习算法:决策树(Decision Tree) --本篇博客的决策树算法以及实验仅针对分类问题 文章目录 经典有监督学习算法:决策树(Decision Tree) 1.算法简介 2.算法思想 ...

  10. 机器学习 - [源码实现决策树小专题]决策树中混杂度数值度量的Python编程实现(信息熵和基尼系数的计算)

    混杂度数值度量的Python编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 邮箱 :29114 ...

最新文章

  1. JMH 和 Arthas 定位问题的案例分享 !
  2. 霍尔传感器与直流无刷电机换相
  3. 安全测试中常见的术语
  4. Maven如何用Eclipse创建一个Maven项目【笔记自用】
  5. 找到真爱了-sublime
  6. Python学习:numpy点乘,按元素相乘,以及转置的处理
  7. iOS中NSLog输出格式大全
  8. TCP/IP的分层管理
  9. 浅析Secondary NameNode与namenode
  10. wps如何自己制作流程图_WPS如何绘制流程图? WPS绘图流程图详细教程
  11. 网络重置有多难搞!!win10网络重置后怎么解决
  12. Python自动登录QQ
  13. java web后台开发跟手机APP后台开发有什么不同? 二者怎么通信?
  14. 在地化和本土化的区别_本地化、全球化和国际化:区别何在?
  15. lammps+colvars计算PMF
  16. UE GamePlay学习笔记
  17. 【简单算法】计算几月几日是一年的第几天
  18. OR青年|可重复使用资源的在线分配问题综述
  19. Arduino 高级教程 01:基础篇
  20. win10 Asus 家庭版 电脑初始设置相关

热门文章

  1. Chaos 发布流体模拟王者 Phoenix 的5.0版本!
  2. 记各常见手机屏幕尺寸
  3. Linux搭建es集群详细教程(最终版)
  4. [ExtJs6]随记--去除extjs trial水印
  5. myeclipse下载_资源共享:常用的编程软件下载链接分享
  6. 点扩散函数(PSF)的模型及求取
  7. 2022年5月17日 点扩展函数的matlab仿真学习
  8. Java随机生成中文姓名工具
  9. 对计算机组装和维护课的总结,计算机组装维护教学工作总结
  10. 【干货分享】嫁给爱情字体设计创意