信息熵及其Python的实现
一、熵
熵,在信息论中是用来刻画信息混乱程度的一种度量。熵最早源于热力学,后应广泛用于物理、化学、信息论等领域。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
三、参考文献
- Shannon C E . The mathematical theory of communication. 1963[J]. Bell Labs Technical Journal, 1950, 3(9):31-32.
- https://baike.so.com/doc/3291228-3467016.html.
作者:YangYF
信息熵及其Python的实现相关推荐
- python 信息熵
文章目录 一.熵的概念与定义 二.python 实现 一.熵的概念与定义 熵概念 熵,在信息论中是用来刻画信息混乱程度的一种度量.熵最早源于热力学,后应广泛用于物理.化学.信息论等领域.1850年 ...
- 决策树算法笔记整理1 - 如何划分?(信息熵,不纯度及信息增益)
1. 帮助理解的前置case 1.1 case1:相亲 参考CSDN其他blog 决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树. 套用俗语,决策树分类的思想类似于找对象.现想象一个女孩 ...
- 云端大数据实战记录-大数据推荐
前言 WHY 云:为什么我们需要云,大数据时代我们面对两个问题,一个是大数据的存储,一个是大数据的计算.由于数据量过大,在单个终端上运行效率过差,所以人们用云来解决这两个问题. WHAT IS 云:云 ...
- 【五】搜索推荐技术在电商导购领域的应用——截图小王子
这是一个古老的问题 商品,在网络虚拟货架上陈列,一张好的封面图对于促成转化是不言而喻的.那么什么样的图片才是好封面呢?我们的侧重点是让图片传递使用价值,让用户直接感知到"如果购买它,我会得到 ...
- 机器学习笔记——决策树之分类树
一.什么是决策树 决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题. 本文主要介 ...
- 机器学习(三)——决策树
目录 什么是决策树 决策树的节点 决策树的特点 决策树的基本算法 决策树的划分选择 如何选择最优划分属性 方法一:信息增益 信息熵的python代码实现: 用信息增益划分最优属性的python代码: ...
- 图像融合质量评价方法SSIM、PSNR、EN、MSE与NRMSE(一)
文章目录 1 前言 2 融合评价指标介绍 2.1 结构相似性 SSIM 2.2 峰值信噪比 PSNR 2.3 信息熵 Entropy 2.4 均方误差 MSE 2.5 归一化均方根误差 NRMSE 3 ...
- 决策树之构造决策树(一)
决策树时一种常用的数据挖掘算法,其优势在于数据形式非常容易理解,缺点在于很可能产生过度匹配的问题(即过拟合问题,如何解决过拟合问题待续.......).决策树的一个重要任务就是为了理解数据中所蕴含的数 ...
- 【机器学习实验二】决策树(Decision Tree)及其在图像识别任务上的应用
经典有监督学习算法:决策树(Decision Tree) --本篇博客的决策树算法以及实验仅针对分类问题 文章目录 经典有监督学习算法:决策树(Decision Tree) 1.算法简介 2.算法思想 ...
- 机器学习 - [源码实现决策树小专题]决策树中混杂度数值度量的Python编程实现(信息熵和基尼系数的计算)
混杂度数值度量的Python编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 邮箱 :29114 ...
最新文章
- JMH 和 Arthas 定位问题的案例分享 !
- 霍尔传感器与直流无刷电机换相
- 安全测试中常见的术语
- Maven如何用Eclipse创建一个Maven项目【笔记自用】
- 找到真爱了-sublime
- Python学习:numpy点乘,按元素相乘,以及转置的处理
- iOS中NSLog输出格式大全
- TCP/IP的分层管理
- 浅析Secondary NameNode与namenode
- wps如何自己制作流程图_WPS如何绘制流程图? WPS绘图流程图详细教程
- 网络重置有多难搞!!win10网络重置后怎么解决
- Python自动登录QQ
- java web后台开发跟手机APP后台开发有什么不同? 二者怎么通信?
- 在地化和本土化的区别_本地化、全球化和国际化:区别何在?
- lammps+colvars计算PMF
- UE GamePlay学习笔记
- 【简单算法】计算几月几日是一年的第几天
- OR青年|可重复使用资源的在线分配问题综述
- Arduino 高级教程 01:基础篇
- win10 Asus 家庭版 电脑初始设置相关