香农的熵公式。帮助我的困惑

时间:2009-03-16 16:23:57

标签: compression entropy information-theory

我对熵公式的理解是,它用于计算表示某些数据所需的最小位数。在定义时通常措辞不同,但之前的理解是我到目前为止所依赖的。

这是我的问题。假设我的序列为100'1',后跟100'0'= 200位。字母表是{0,1},熵的基数是2.符号“0”的概率是0.5而“1”是0.5。所以熵是1或1位来表示1位。

然而,您可以使用100/1/100/0之类的值对其进行行程编码,其中输出的位数后跟该位。看起来我的表示比数据小。特别是如果你将100增加到更大的数字。

我现在正在使用:http://en.wikipedia.org/wiki/Information_entropy作为参考。 我哪里做错了?它是分配给符号的概率吗?我不认为这是错的。或者我是否在压缩和熵之间建立了连接错误?还有什么吗?

感谢。

修改

根据一些答案,我的后续操作是:您是否会将熵公式应用于特定的邮件实例以尝试查找其信息内容?取消息“aaab”并说熵是~0.811是否有效。如果是,那么1 ... 10 .... 0的熵是什么,其中1和0使用熵公式重复n次。答案是1?

是的,我知道您正在创建输入符号的随机变量,并根据您的消息猜测概率质量函数。我要确认的是熵公式没有考虑消息中符号的位置。

4 个答案:

答案 0 :(得分:6)

  

或者我是否在压缩和熵之间建立了连接错误?

你非常接近,但最后一个问题是错误的地方。如果您能够将某些内容压缩为小于其原始表示形式的形式,则意味着原始表示至少具有一些冗余。 邮件中的每一位确实没有传达1位信息。

由于冗余数据对消息的信息内容没有贡献,因此它也不会增加其熵。想象一下,例如,“随机位生成器”只返回值“0”。这根本不传达任何信息! (实际上,它传达了一个未定义的信息量,因为任何只包含一种符号的二进制消息都需要在熵公式中除以零。)

相比之下,如果您模拟了大量随机硬币翻转,那么很难减少此消息的大小。每个位将贡献接近1位的熵。

压缩数据时,可以提取冗余。作为交换,您需要设计一个知道如何压缩和解压缩此数据的方案,从而支付一次性熵价格;这本身就需要一些信息。

  

然而,您可以使用100/1/100/0之类的值对其进行行程编码,其中输出的位数后跟该位。看起来我的表示比数据小。特别是如果你将100增加到更大的数字。

总而言之,您可以设计一个方案,使编码的数据小于原始数据,这一事实告诉您一些重要的事情。也就是说,它表示您的原始数据包含非常少的信息


进一步阅读

有关这方面的更全面的处理,包括如何使用几个示例计算任意数字序列的熵,请查看this short whitepaper

答案 1 :(得分:5)

查看Kolmogorov complexity

  

可以压缩字符串而不会丢失信息的最小位数。这是通过通用图灵机给出的固定但通用的减压方案来定义的。

在您的特定情况下,不要将自己限制在字母{0,1}。对于你的例子,使用{0 ... 0,1 ... 1}(百分之0和百分之一)

答案 2 :(得分:4)

您的编码在此示例中有效,但可以设想一个同样有效的情况:010101010101 ...将编码为1/0/1/1 / ...

可以在给定字母表中构建的所有可能消息中测量熵,而不仅仅是病理示例!

答案 3 :(得分:4)

John Feminella说得对,但我认为还有更多话要说。

香农熵基于概率,概率总是在旁观者眼中。

你说1和0同样可能(0.5)。如果是这样,则100 1s后跟100 0s的字符串的概率为0.5 ^ 200,其中-log(base 2)为200位,如您所料。然而,该字符串的熵(以香农术语表示)是其信息内容乘以其概率,或200 * 0.5 ^ 200,仍然是一个非常小的数字。

这很重要,因为如果你进行游程编码来压缩字符串,在这个字符串的情况下,它会得到一个很小的长度,但是在所有2 ^ 200个字符串上取平均值,它不会很好。幸运的是,它平均可以达到200左右,但不会更低。

另一方面,如果你看一下你的原始字符串,并说它是如此引人注目,以至于生成它的人很可能产生更多它,那么你真的说它的​​概率大于0.5 ^ 200,所以你是对字符串生成器的原始概率结构做出不同的假设,即它的熵低于200位。

就个人而言,我发现这个主题非常有趣,特别是当你研究Kolmogorov(算法)信息时。在这种情况下,您将字符串的信息内容定义为可以生成它的最小程序的长度。这导致了对软件工程和语言设计的各种见解。

我希望有所帮助,并感谢您提出的问题。