简略计算香农信息熵(Shannon Entropy)

先推荐一个信息熵计算器

http://www.shannonentropy.netmark.pl/

输入你想计算的内容:二进制代码或英文字母短语语句(e.g.1100101, Lorem ipsum)

计算器会按这个公式计算


我这次计算短语:“have fun”  (注意,此处有空格)

这是短语中所含符号列表

Alphabet of symbols in the string: a e f h n u v 还有空格

计算符号出现的概率/频率

Frequencies of alphabet symbols:

0.125 ->空格

0.125 -> a

0.125 -> e

0.125 -> f

0.125 -> h

0.125 -> n

0.125 -> u

0.125 -> v

因为每个符号只出现了一次,所以用1/8简单来算。但严格来说,26个字母出现的概率并不是相同的。

之后把各个符号的概率带入公式,得出结果

H(X) =-[(0.125log20.125)+(0.125log20.125)+(0.125log20.125)+(0.125log20.125)+

(0.125log20.125)+(0.125log20.125)+(0.125log20.125)+(0.125log20.125)]

H(X) =-[(-0.375)+(-0.375)+(-0.375)+(-0.375)+(-0.375)+(-0.375)+(-0.375)+(-0.375)]

H(X) =-[-3]

H(X) =3

这一步的python代码

from math import log

def calcShannonEnt(probList):

    shannonEnt=0.0

    for prob in probList:

        shannonEnt=shannonEnt-prob*log(prob,2)

    return shannonEnt

########################

pList=[0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125]#8个符号的概率

entropy=calcShannonEnt(pList)

print entropy

其实scipy有现成计算熵函数,但是装起来比较麻烦,等不及的话就自己写啦。

上述例子用2做log的底数,计算单位是bit.

其它底数对应的单位:

            e - nat

          10 - hartley/ban/dit



之后又计算了米兔积木机器人每个积木零件的信息熵

以这一款造型为例



以下是所需零件列表

零件编号及数量

现在可求得每个零件在套内出现的概率

将概率一列输入python代码中得出每个零件的信息熵(bit)

零件数:981           H: 5.3

可与乐高历代套装零件的信息熵做一下对比


来源 《The entropy of LEGO》Andrew Crompton
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 请听题:什么是熵?什么是交叉熵?什么是联合熵?什么是条件熵?什么是相对熵?它们的联系与区别是什么? 如果你感到回答...
    工程师milter阅读 14,147评论 5 57
  • 层次化的隐马尔可夫模型 在自然语言处理等应用中,由于处理序列具有递归特性,尤其当序列长度比较大时,HMM的复杂度将...
    我偏笑_NSNirvana阅读 11,798评论 1 15
  • 熵通常被认为描述一个系统或者分布的不确定性,熵越大,系统越混乱,不确定性越大。机器学习与数据挖掘的算法中大量的应用...
    sylvainwang阅读 9,884评论 0 50
  • 今天的练习本来是雨中的红衣女孩,可是我刚画完城市背景,先生从外面回来,看着画儿就说很好很好啊,就这样吧。 于是,他...
    舒舒_爱的不朽传说阅读 1,436评论 0 0
  • 前几天,台风的公司如同所有别的所有公司一样,举行了一场年会。毫不夸大的说,真的是糟透了,如果硬是要加一个程度的话,...
    NI自然醒阅读 2,833评论 0 1