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

标签 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 的熵是多少,其中 1s 和 0s 使用熵公式重复 n 次。答案是1吗?

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

最佳答案

Or did I get the connection between compression and entropy wrong?



你很接近,但最后一个问题是错误在哪里。如果您能够将某物压缩成比其原始表示更小的形式,则意味着原始表示至少有一些冗余。 消息中的每一位实际上并没有传达 1 位信息。

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

相比之下,如果您模拟了大量随机抛硬币,则很难大幅减少此消息的大小。每一位都会贡献接近 1 位的熵。

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

However you can run-length encode it with something like 100 / 1 / 100 / 0 where it's number of bits to output followed by the bit. It seems like I have a representation smaller than the data. Especially if you increase the 100 to much larger number.



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

进一步阅读

要对此进行更彻底的处理,包括如何通过几个示例准确计算任何任意数字序列的熵,请查看 this short whitepaper .

关于compression - 香农熵公式。帮助我的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/651135/

相关文章:

linux - tar:错误不可恢复:现在退出

google-bigquery - 大查询 : compute entropy of a column

python - TensorFlow 有内置 KL 散度损失函数吗?

random - 是否可以使用物理传感器生成随机数?

r - 如何在R中拟合信息(负熵)〜大小的回归?

html - 如何最小化css的数量

PDF有损压缩

java - HTTP请求压缩

algorithm - 是什么让机器学习任务变得困难或 'complex'?关于模式的复杂性,而不是计算的复杂性

r - R中互信息的计算